mongoid-history 0.8.3 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.document +5 -5
  4. data/.github/workflows/test.yml +72 -0
  5. data/.gitignore +46 -46
  6. data/.rspec +2 -2
  7. data/.rubocop.yml +6 -6
  8. data/.rubocop_todo.yml +99 -99
  9. data/CHANGELOG.md +173 -163
  10. data/CONTRIBUTING.md +117 -118
  11. data/Dangerfile +1 -1
  12. data/Gemfile +49 -40
  13. data/LICENSE.txt +20 -20
  14. data/README.md +609 -608
  15. data/RELEASING.md +66 -67
  16. data/Rakefile +24 -24
  17. data/UPGRADING.md +53 -53
  18. data/lib/mongoid/history/attributes/base.rb +72 -72
  19. data/lib/mongoid/history/attributes/create.rb +45 -45
  20. data/lib/mongoid/history/attributes/destroy.rb +34 -34
  21. data/lib/mongoid/history/attributes/update.rb +104 -104
  22. data/lib/mongoid/history/options.rb +177 -177
  23. data/lib/mongoid/history/trackable.rb +588 -583
  24. data/lib/mongoid/history/tracker.rb +247 -247
  25. data/lib/mongoid/history/version.rb +5 -5
  26. data/lib/mongoid/history.rb +77 -77
  27. data/lib/mongoid-history.rb +1 -1
  28. data/mongoid-history.gemspec +25 -25
  29. data/perf/benchmark_modified_attributes_for_create.rb +65 -65
  30. data/perf/gc_suite.rb +21 -21
  31. data/spec/integration/embedded_in_polymorphic_spec.rb +112 -112
  32. data/spec/integration/integration_spec.rb +976 -976
  33. data/spec/integration/multi_relation_spec.rb +47 -47
  34. data/spec/integration/multiple_trackers_spec.rb +68 -68
  35. data/spec/integration/nested_embedded_documents_spec.rb +64 -64
  36. data/spec/integration/nested_embedded_documents_tracked_in_parent_spec.rb +124 -124
  37. data/spec/integration/nested_embedded_polymorphic_documents_spec.rb +115 -115
  38. data/spec/integration/subclasses_spec.rb +47 -47
  39. data/spec/integration/track_history_order_spec.rb +84 -84
  40. data/spec/integration/validation_failure_spec.rb +76 -76
  41. data/spec/spec_helper.rb +32 -30
  42. data/spec/support/error_helpers.rb +7 -0
  43. data/spec/support/mongoid.rb +11 -11
  44. data/spec/support/mongoid_history.rb +12 -12
  45. data/spec/unit/attributes/base_spec.rb +141 -141
  46. data/spec/unit/attributes/create_spec.rb +342 -342
  47. data/spec/unit/attributes/destroy_spec.rb +228 -228
  48. data/spec/unit/attributes/update_spec.rb +342 -342
  49. data/spec/unit/callback_options_spec.rb +165 -165
  50. data/spec/unit/embedded_methods_spec.rb +87 -87
  51. data/spec/unit/history_spec.rb +58 -58
  52. data/spec/unit/my_instance_methods_spec.rb +555 -555
  53. data/spec/unit/options_spec.rb +365 -365
  54. data/spec/unit/singleton_methods_spec.rb +406 -406
  55. data/spec/unit/store/default_store_spec.rb +11 -11
  56. data/spec/unit/store/request_store_spec.rb +13 -13
  57. data/spec/unit/trackable_spec.rb +1057 -987
  58. data/spec/unit/tracker_spec.rb +190 -190
  59. metadata +9 -7
  60. data/.travis.yml +0 -36
@@ -1,115 +1,115 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::History::Tracker do
4
- before :each do
5
- class ModelOne
6
- include Mongoid::Document
7
- include Mongoid::History::Trackable
8
-
9
- field :name, type: String
10
- belongs_to :user
11
- embeds_one :one_embedded, as: :embedable
12
-
13
- track_history
14
- end
15
-
16
- class ModelTwo
17
- include Mongoid::Document
18
- include Mongoid::History::Trackable
19
-
20
- field :name, type: String
21
- belongs_to :user
22
- embeds_one :one_embedded, as: :embedable
23
-
24
- track_history
25
- end
26
-
27
- class OneEmbedded
28
- include Mongoid::Document
29
- include Mongoid::History::Trackable
30
-
31
- field :name
32
- embeds_many :embedded_twos, store_as: :ems
33
- embedded_in :embedable, polymorphic: true
34
-
35
- track_history scope: %i[model_one model_two]
36
- end
37
-
38
- class EmbeddedTwo
39
- include Mongoid::Document
40
- include Mongoid::History::Trackable
41
-
42
- field :name
43
- embedded_in :one_embedded
44
-
45
- track_history scope: %i[model_one model_two]
46
- end
47
-
48
- class User
49
- include Mongoid::Document
50
-
51
- has_many :model_ones
52
- has_many :model_twos
53
- end
54
- end
55
-
56
- after :each do
57
- Object.send(:remove_const, :ModelOne)
58
- Object.send(:remove_const, :ModelTwo)
59
- Object.send(:remove_const, :OneEmbedded)
60
- Object.send(:remove_const, :EmbeddedTwo)
61
- Object.send(:remove_const, :User)
62
- end
63
-
64
- let (:user) { User.create! }
65
-
66
- it 'tracks history for nested embedded documents with polymorphic relations' do
67
- user = User.create!
68
-
69
- model_one = user.model_ones.build(name: 'model_one', modifier: user)
70
- model_one.save!
71
- model_one.build_one_embedded(name: 'model_one_one_embedded', modifier: user).save!
72
- expect(model_one.history_tracks.count).to eq(2)
73
- expect(model_one.one_embedded.history_tracks.count).to eq(1)
74
-
75
- model_one.reload
76
- model_one.one_embedded.update_attributes!(name: 'model_one_embedded_one!')
77
- expect(model_one.history_tracks.count).to eq(3)
78
- expect(model_one.one_embedded.history_tracks.count).to eq(2)
79
- expect(model_one.history_tracks.last.action).to eq('update')
80
-
81
- model_one.build_one_embedded(name: 'Lorem ipsum', modifier: user).save!
82
- expect(model_one.history_tracks.count).to eq(4)
83
- expect(model_one.one_embedded.history_tracks.count).to eq(1)
84
- expect(model_one.one_embedded.history_tracks.last.action).to eq('create')
85
- expect(model_one.one_embedded.history_tracks.last.association_chain.last['name']).to eq('one_embedded')
86
-
87
- embedded_one1 = model_one.one_embedded.embedded_twos.create!(name: 'model_one_one_embedded_1', modifier: user)
88
- expect(model_one.history_tracks.count).to eq(5)
89
- expect(model_one.one_embedded.history_tracks.count).to eq(2)
90
- expect(embedded_one1.history_tracks.count).to eq(1)
91
-
92
- model_two = user.model_twos.build(name: 'model_two', modifier: user)
93
- model_two.save!
94
- model_two.build_one_embedded(name: 'model_two_one_embedded', modifier: user).save!
95
- expect(model_two.history_tracks.count).to eq(2)
96
- expect(model_two.one_embedded.history_tracks.count).to eq(1)
97
-
98
- model_two.reload
99
- model_two.one_embedded.update_attributes!(name: 'model_two_one_embedded!')
100
- expect(model_two.history_tracks.count).to eq(3)
101
- expect(model_two.one_embedded.history_tracks.count).to eq(2)
102
- expect(model_two.history_tracks.last.action).to eq('update')
103
-
104
- model_two.build_one_embedded(name: 'Lorem ipsum', modifier: user).save!
105
- expect(model_two.history_tracks.count).to eq(4)
106
- expect(model_two.one_embedded.history_tracks.count).to eq(1)
107
- expect(model_two.one_embedded.history_tracks.last.action).to eq('create')
108
- expect(model_two.one_embedded.history_tracks.last.association_chain.last['name']).to eq('one_embedded')
109
-
110
- embedded_one2 = model_two.one_embedded.embedded_twos.create!(name: 'model_two_one_embedded_1', modifier: user)
111
- expect(model_two.history_tracks.count).to eq(5)
112
- expect(model_two.one_embedded.history_tracks.count).to eq(2)
113
- expect(embedded_one2.history_tracks.count).to eq(1)
114
- end
115
- end
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::History::Tracker do
4
+ before :each do
5
+ class ModelOne
6
+ include Mongoid::Document
7
+ include Mongoid::History::Trackable
8
+
9
+ field :name, type: String
10
+ belongs_to :user
11
+ embeds_one :one_embedded, as: :embedable
12
+
13
+ track_history
14
+ end
15
+
16
+ class ModelTwo
17
+ include Mongoid::Document
18
+ include Mongoid::History::Trackable
19
+
20
+ field :name, type: String
21
+ belongs_to :user
22
+ embeds_one :one_embedded, as: :embedable
23
+
24
+ track_history
25
+ end
26
+
27
+ class OneEmbedded
28
+ include Mongoid::Document
29
+ include Mongoid::History::Trackable
30
+
31
+ field :name
32
+ embeds_many :embedded_twos, store_as: :ems
33
+ embedded_in :embedable, polymorphic: true
34
+
35
+ track_history scope: %i[model_one model_two]
36
+ end
37
+
38
+ class EmbeddedTwo
39
+ include Mongoid::Document
40
+ include Mongoid::History::Trackable
41
+
42
+ field :name
43
+ embedded_in :one_embedded
44
+
45
+ track_history scope: %i[model_one model_two]
46
+ end
47
+
48
+ class User
49
+ include Mongoid::Document
50
+
51
+ has_many :model_ones
52
+ has_many :model_twos
53
+ end
54
+ end
55
+
56
+ after :each do
57
+ Object.send(:remove_const, :ModelOne)
58
+ Object.send(:remove_const, :ModelTwo)
59
+ Object.send(:remove_const, :OneEmbedded)
60
+ Object.send(:remove_const, :EmbeddedTwo)
61
+ Object.send(:remove_const, :User)
62
+ end
63
+
64
+ let (:user) { User.create! }
65
+
66
+ it 'tracks history for nested embedded documents with polymorphic relations' do
67
+ user = User.create!
68
+
69
+ model_one = user.model_ones.build(name: 'model_one', modifier: user)
70
+ model_one.save!
71
+ model_one.build_one_embedded(name: 'model_one_one_embedded', modifier: user).save!
72
+ expect(model_one.history_tracks.count).to eq(2)
73
+ expect(model_one.one_embedded.history_tracks.count).to eq(1)
74
+
75
+ model_one.reload
76
+ model_one.one_embedded.update_attributes!(name: 'model_one_embedded_one!')
77
+ expect(model_one.history_tracks.count).to eq(3)
78
+ expect(model_one.one_embedded.history_tracks.count).to eq(2)
79
+ expect(model_one.history_tracks.last.action).to eq('update')
80
+
81
+ model_one.build_one_embedded(name: 'Lorem ipsum', modifier: user).save!
82
+ expect(model_one.history_tracks.count).to eq(4)
83
+ expect(model_one.one_embedded.history_tracks.count).to eq(1)
84
+ expect(model_one.one_embedded.history_tracks.last.action).to eq('create')
85
+ expect(model_one.one_embedded.history_tracks.last.association_chain.last['name']).to eq('one_embedded')
86
+
87
+ embedded_one1 = model_one.one_embedded.embedded_twos.create!(name: 'model_one_one_embedded_1', modifier: user)
88
+ expect(model_one.history_tracks.count).to eq(5)
89
+ expect(model_one.one_embedded.history_tracks.count).to eq(2)
90
+ expect(embedded_one1.history_tracks.count).to eq(1)
91
+
92
+ model_two = user.model_twos.build(name: 'model_two', modifier: user)
93
+ model_two.save!
94
+ model_two.build_one_embedded(name: 'model_two_one_embedded', modifier: user).save!
95
+ expect(model_two.history_tracks.count).to eq(2)
96
+ expect(model_two.one_embedded.history_tracks.count).to eq(1)
97
+
98
+ model_two.reload
99
+ model_two.one_embedded.update_attributes!(name: 'model_two_one_embedded!')
100
+ expect(model_two.history_tracks.count).to eq(3)
101
+ expect(model_two.one_embedded.history_tracks.count).to eq(2)
102
+ expect(model_two.history_tracks.last.action).to eq('update')
103
+
104
+ model_two.build_one_embedded(name: 'Lorem ipsum', modifier: user).save!
105
+ expect(model_two.history_tracks.count).to eq(4)
106
+ expect(model_two.one_embedded.history_tracks.count).to eq(1)
107
+ expect(model_two.one_embedded.history_tracks.last.action).to eq('create')
108
+ expect(model_two.one_embedded.history_tracks.last.association_chain.last['name']).to eq('one_embedded')
109
+
110
+ embedded_one2 = model_two.one_embedded.embedded_twos.create!(name: 'model_two_one_embedded_1', modifier: user)
111
+ expect(model_two.history_tracks.count).to eq(5)
112
+ expect(model_two.one_embedded.history_tracks.count).to eq(2)
113
+ expect(embedded_one2.history_tracks.count).to eq(1)
114
+ end
115
+ end
@@ -1,47 +1,47 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::History::Tracker do
4
- before :each do
5
- class Element
6
- include Mongoid::Document
7
- include Mongoid::Timestamps
8
- include Mongoid::History::Trackable
9
-
10
- track_history
11
-
12
- field :body
13
-
14
- # force preparation of options
15
- history_trackable_options
16
- end
17
-
18
- class Prompt < Element
19
- field :head
20
- end
21
-
22
- class User
23
- include Mongoid::Document
24
- end
25
- end
26
-
27
- after :each do
28
- Object.send(:remove_const, :Element)
29
- Object.send(:remove_const, :Prompt)
30
- Object.send(:remove_const, :User)
31
- end
32
-
33
- let(:user) { User.create! }
34
-
35
- it 'tracks subclass create and update' do
36
- prompt = Prompt.new(modifier: user)
37
- expect { prompt.save! }.to change(Tracker, :count).by(1)
38
- expect { prompt.update_attributes!(body: 'one', head: 'two') }.to change(Tracker, :count).by(1)
39
- prompt.undo! user
40
- expect(prompt.body).to be_blank
41
- expect(prompt.head).to be_blank
42
- prompt.redo! user, 2
43
- expect(prompt.body).to eq('one')
44
- expect(prompt.head).to eq('two')
45
- expect { prompt.destroy }.to change(Tracker, :count).by(1)
46
- end
47
- end
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::History::Tracker do
4
+ before :each do
5
+ class Element
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Mongoid::History::Trackable
9
+
10
+ track_history
11
+
12
+ field :body
13
+
14
+ # force preparation of options
15
+ history_trackable_options
16
+ end
17
+
18
+ class Prompt < Element
19
+ field :head
20
+ end
21
+
22
+ class User
23
+ include Mongoid::Document
24
+ end
25
+ end
26
+
27
+ after :each do
28
+ Object.send(:remove_const, :Element)
29
+ Object.send(:remove_const, :Prompt)
30
+ Object.send(:remove_const, :User)
31
+ end
32
+
33
+ let(:user) { User.create! }
34
+
35
+ it 'tracks subclass create and update' do
36
+ prompt = Prompt.new(modifier: user)
37
+ expect { prompt.save! }.to change(Tracker, :count).by(1)
38
+ expect { prompt.update_attributes!(body: 'one', head: 'two') }.to change(Tracker, :count).by(1)
39
+ prompt.undo! user
40
+ expect(prompt.body).to be_blank
41
+ expect(prompt.head).to be_blank
42
+ prompt.redo! user, 2
43
+ expect(prompt.body).to eq('one')
44
+ expect(prompt.head).to eq('two')
45
+ expect { prompt.destroy }.to change(Tracker, :count).by(1)
46
+ end
47
+ end
@@ -1,84 +1,84 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::History::Tracker do
4
- context 'when track_history not called' do
5
- before :each do
6
- class NotModel
7
- include Mongoid::Document
8
- include Mongoid::History::Trackable
9
-
10
- field :foo
11
- end
12
- end
13
-
14
- after :each do
15
- Object.send(:remove_const, :NotModel)
16
- end
17
-
18
- it 'should not track fields' do
19
- expect(NotModel.respond_to?(:tracked?)).to be false
20
- end
21
- end
22
-
23
- context 'boefore field' do
24
- before :each do
25
- class InsideBeforeModel
26
- include Mongoid::Document
27
- include Mongoid::History::Trackable
28
-
29
- track_history on: :fields
30
-
31
- field :foo
32
- end
33
- end
34
-
35
- after :each do
36
- Object.send(:remove_const, :InsideBeforeModel)
37
- end
38
-
39
- it 'should track fields' do
40
- expect(InsideBeforeModel.tracked?(:foo)).to be true
41
- end
42
- end
43
-
44
- context 'when track_history called inside class and after fields' do
45
- before :each do
46
- class InsideAfterModel
47
- include Mongoid::Document
48
- include Mongoid::History::Trackable
49
-
50
- field :foo
51
-
52
- track_history on: :fields
53
- end
54
- end
55
-
56
- after :each do
57
- Object.send(:remove_const, :InsideAfterModel)
58
- end
59
-
60
- it 'should track fields' do
61
- expect(InsideAfterModel.tracked?(:foo)).to be true
62
- end
63
- end
64
-
65
- context 'when track_history called outside class' do
66
- before :each do
67
- class OutsideModel
68
- include Mongoid::Document
69
- include Mongoid::History::Trackable
70
-
71
- field :foo
72
- end
73
- end
74
-
75
- after :each do
76
- Object.send(:remove_const, :OutsideModel)
77
- end
78
-
79
- it 'should track fields' do
80
- OutsideModel.track_history on: :fields
81
- expect(OutsideModel.tracked?(:foo)).to be true
82
- end
83
- end
84
- end
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::History::Tracker do
4
+ context 'when track_history not called' do
5
+ before :each do
6
+ class NotModel
7
+ include Mongoid::Document
8
+ include Mongoid::History::Trackable
9
+
10
+ field :foo
11
+ end
12
+ end
13
+
14
+ after :each do
15
+ Object.send(:remove_const, :NotModel)
16
+ end
17
+
18
+ it 'should not track fields' do
19
+ expect(NotModel.respond_to?(:tracked?)).to be false
20
+ end
21
+ end
22
+
23
+ context 'boefore field' do
24
+ before :each do
25
+ class InsideBeforeModel
26
+ include Mongoid::Document
27
+ include Mongoid::History::Trackable
28
+
29
+ track_history on: :fields
30
+
31
+ field :foo
32
+ end
33
+ end
34
+
35
+ after :each do
36
+ Object.send(:remove_const, :InsideBeforeModel)
37
+ end
38
+
39
+ it 'should track fields' do
40
+ expect(InsideBeforeModel.tracked?(:foo)).to be true
41
+ end
42
+ end
43
+
44
+ context 'when track_history called inside class and after fields' do
45
+ before :each do
46
+ class InsideAfterModel
47
+ include Mongoid::Document
48
+ include Mongoid::History::Trackable
49
+
50
+ field :foo
51
+
52
+ track_history on: :fields
53
+ end
54
+ end
55
+
56
+ after :each do
57
+ Object.send(:remove_const, :InsideAfterModel)
58
+ end
59
+
60
+ it 'should track fields' do
61
+ expect(InsideAfterModel.tracked?(:foo)).to be true
62
+ end
63
+ end
64
+
65
+ context 'when track_history called outside class' do
66
+ before :each do
67
+ class OutsideModel
68
+ include Mongoid::Document
69
+ include Mongoid::History::Trackable
70
+
71
+ field :foo
72
+ end
73
+ end
74
+
75
+ after :each do
76
+ Object.send(:remove_const, :OutsideModel)
77
+ end
78
+
79
+ it 'should track fields' do
80
+ OutsideModel.track_history on: :fields
81
+ expect(OutsideModel.tracked?(:foo)).to be true
82
+ end
83
+ end
84
+ end
@@ -1,76 +1,76 @@
1
- require 'spec_helper'
2
-
3
- describe Mongoid::History::Tracker do
4
- before :each do
5
- class Element
6
- include Mongoid::Document
7
- include Mongoid::Timestamps
8
- include Mongoid::History::Trackable
9
-
10
- field :title
11
- field :body
12
-
13
- validates :title, presence: true
14
-
15
- if Mongoid::Compatibility::Version.mongoid7_or_newer?
16
- has_many :items, dependent: :restrict_with_exception
17
- else
18
- has_many :items, dependent: :restrict
19
- end
20
-
21
- track_history on: [:body]
22
- end
23
-
24
- class Item
25
- include Mongoid::Document
26
- include Mongoid::Timestamps
27
-
28
- belongs_to :element
29
- end
30
-
31
- class Prompt < Element
32
- end
33
-
34
- class User
35
- include Mongoid::Document
36
- end
37
- end
38
-
39
- after :each do
40
- Object.send(:remove_const, :Element)
41
- Object.send(:remove_const, :Item)
42
- Object.send(:remove_const, :Prompt)
43
- Object.send(:remove_const, :User)
44
- end
45
-
46
- let(:user) { User.create! }
47
-
48
- it 'does not track delete when parent class validation fails' do
49
- prompt = Prompt.new(title: 'first', modifier: user)
50
- expect { prompt.save! }.to change(Tracker, :count).by(1)
51
- expect do
52
- expect { prompt.update_attributes!(title: nil, body: 'one') }
53
- .to raise_error(Mongoid::Errors::Validations)
54
- end.to change(Tracker, :count).by(0)
55
- end
56
-
57
- it 'does not track delete when parent class restrict dependency fails' do
58
- prompt = Prompt.new(title: 'first', modifier: user)
59
- prompt.items << Item.new
60
- expect { prompt.save! }.to change(Tracker, :count).by(1)
61
- expect(prompt.version).to eq(1)
62
- expect do
63
- expect { prompt.destroy }.to raise_error(Mongoid::Errors::DeleteRestriction)
64
- end.to change(Tracker, :count).by(0)
65
- end
66
-
67
- it 'does not track delete when restrict dependency fails' do
68
- elem = Element.new(title: 'first', modifier: user)
69
- elem.items << Item.new
70
- expect { elem.save! }.to change(Tracker, :count).by(1)
71
- expect(elem.version).to eq(1)
72
- expect do
73
- expect { elem.destroy }.to raise_error(Mongoid::Errors::DeleteRestriction)
74
- end.to change(Tracker, :count).by(0)
75
- end
76
- end
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::History::Tracker do
4
+ before :each do
5
+ class Element
6
+ include Mongoid::Document
7
+ include Mongoid::Timestamps
8
+ include Mongoid::History::Trackable
9
+
10
+ field :title
11
+ field :body
12
+
13
+ validates :title, presence: true
14
+
15
+ if Mongoid::Compatibility::Version.mongoid7_or_newer?
16
+ has_many :items, dependent: :restrict_with_exception
17
+ else
18
+ has_many :items, dependent: :restrict
19
+ end
20
+
21
+ track_history on: [:body]
22
+ end
23
+
24
+ class Item
25
+ include Mongoid::Document
26
+ include Mongoid::Timestamps
27
+
28
+ belongs_to :element
29
+ end
30
+
31
+ class Prompt < Element
32
+ end
33
+
34
+ class User
35
+ include Mongoid::Document
36
+ end
37
+ end
38
+
39
+ after :each do
40
+ Object.send(:remove_const, :Element)
41
+ Object.send(:remove_const, :Item)
42
+ Object.send(:remove_const, :Prompt)
43
+ Object.send(:remove_const, :User)
44
+ end
45
+
46
+ let(:user) { User.create! }
47
+
48
+ it 'does not track delete when parent class validation fails' do
49
+ prompt = Prompt.new(title: 'first', modifier: user)
50
+ expect { prompt.save! }.to change(Tracker, :count).by(1)
51
+ expect do
52
+ expect { prompt.update_attributes!(title: nil, body: 'one') }
53
+ .to raise_error(Mongoid::Errors::Validations)
54
+ end.to change(Tracker, :count).by(0)
55
+ end
56
+
57
+ it 'does not track delete when parent class restrict dependency fails' do
58
+ prompt = Prompt.new(title: 'first', modifier: user)
59
+ prompt.items << Item.new
60
+ expect { prompt.save! }.to change(Tracker, :count).by(1)
61
+ expect(prompt.version).to eq(1)
62
+ expect do
63
+ expect { prompt.destroy }.to raise_error(Mongoid::Errors::DeleteRestriction)
64
+ end.to change(Tracker, :count).by(0)
65
+ end
66
+
67
+ it 'does not track delete when restrict dependency fails' do
68
+ elem = Element.new(title: 'first', modifier: user)
69
+ elem.items << Item.new
70
+ expect { elem.save! }.to change(Tracker, :count).by(1)
71
+ expect(elem.version).to eq(1)
72
+ expect do
73
+ expect { elem.destroy }.to raise_error(Mongoid::Errors::DeleteRestriction)
74
+ end.to change(Tracker, :count).by(0)
75
+ end
76
+ end