activehistory 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,72 +10,211 @@ class HasManyAssociationTest < ActiveSupport::TestCase
10
10
  test '::create with has_many association' do
11
11
  @property = create(:property)
12
12
  WebMock::RequestRegistry.instance.reset!
13
-
13
+
14
14
  @photo = travel_to(@time) { create(:photo, property: @property) }
15
15
 
16
- assert_posted("/events") do |req|
17
- req_data = JSON.parse(req.body)
18
- assert_equal 2, req_data['actions'].size
19
-
20
- assert_equal req_data['actions'][0], {
16
+ assert_posted("/events") do
17
+ assert_action_for @photo, {
21
18
  diff: {
22
19
  id: [nil, @photo.id],
23
20
  property_id: [nil, @property.id],
24
21
  format: [nil, @photo.format]
25
22
  },
26
- subject: "Photo/#{@photo.id}",
23
+ subject_type: "Photo",
24
+ subject_id: @photo.id,
27
25
  timestamp: @time.iso8601(3),
28
26
  type: 'create'
29
- }.as_json
27
+ }
30
28
 
31
- assert_equal req_data['actions'][1], {
29
+ assert_action_for @property, {
32
30
  timestamp: @time.iso8601(3),
33
31
  type: 'update',
34
- subject: "Property/#{@property.id}",
32
+ subject_type: "Property",
33
+ subject_id: @property.id,
35
34
  diff: {
36
35
  photo_ids: [[], [@photo.id]]
37
36
  }
38
- }.as_json
37
+ }
39
38
  end
40
39
  end
41
-
40
+
42
41
  test '::update with has_many association' do
43
42
  @property = create(:property)
44
43
  @photo = create(:photo, property: @property)
45
44
  WebMock::RequestRegistry.instance.reset!
46
-
45
+
47
46
  travel_to(@time) { @photo.update(property: nil) }
48
-
49
- assert_posted("/events") do |req|
50
- req_data = JSON.parse(req.body)
51
- assert_equal 2, req_data['actions'].size
52
-
53
- assert_equal req_data['actions'][0], {
47
+
48
+ assert_posted("/events") do
49
+ assert_action_for @photo, {
54
50
  diff: {
55
51
  property_id: [@property.id, nil]
56
52
  },
57
- subject: "Photo/#{@photo.id}",
53
+ subject_type: "Photo",
54
+ subject_id: @photo.id,
58
55
  timestamp: @time.iso8601(3),
59
56
  type: 'update'
60
- }.as_json
57
+ }
61
58
 
62
- assert_equal req_data['actions'][1], {
59
+ assert_action_for @property, {
63
60
  timestamp: @time.iso8601(3),
64
61
  type: 'update',
65
- subject: "Property/#{@property.id}",
62
+ subject_type: "Property",
63
+ subject_id: @property.id,
66
64
  diff: {
67
65
  photo_ids: [[@photo.id], []]
68
66
  }
69
- }.as_json
67
+ }
70
68
  end
71
69
  end
72
70
 
73
71
  test 'has_many <<'
74
72
  test 'has_many.delete'
75
73
  test 'has_many.destroy'
76
- test 'has_many='
77
- test 'has_many_ids='
78
- test 'has_many.clear'
74
+
75
+ test 'has_many=' do
76
+ @property = create(:property)
77
+ @photo1 = create(:photo)
78
+ @photo2 = create(:photo)
79
+ WebMock::RequestRegistry.instance.reset!
80
+
81
+ travel_to(@time) { @property.photos = [@photo1] }
82
+ assert_posted("/events") do
83
+ assert_action_for @photo1, {
84
+ diff: { property_id: [nil, @property.id] },
85
+ subject_type: "Photo",
86
+ subject_id: @photo1.id,
87
+ timestamp: @time.iso8601(3),
88
+ type: 'update'
89
+ }
90
+
91
+ assert_action_for @property, {
92
+ diff: { photo_ids: [[], [@photo1.id]] },
93
+ subject_type: "Property",
94
+ subject_id: @property.id,
95
+ timestamp: @time.iso8601(3),
96
+ type: 'update'
97
+ }
98
+ end
99
+
100
+ WebMock::RequestRegistry.instance.reset!
101
+ travel_to(@time) { @property.photos = [@photo2] }
102
+ assert_posted("/events") do
103
+ assert_action_for @photo2, {
104
+ diff: { property_id: [nil, @property.id] },
105
+ subject_type: "Photo",
106
+ subject_id: @photo2.id,
107
+ timestamp: @time.iso8601(3),
108
+ type: 'update'
109
+ }
110
+
111
+ assert_action_for @property, {
112
+ diff: { photo_ids: [[@photo1.id], [@photo2.id]] },
113
+ subject_type: "Property",
114
+ subject_id: @property.id,
115
+ timestamp: @time.iso8601(3),
116
+ type: 'update'
117
+ }
118
+
119
+ assert_action_for @photo1, {
120
+ diff: { property_id: [@property.id, nil] },
121
+ subject_type: "Photo",
122
+ subject_id: @photo1.id,
123
+ timestamp: @time.iso8601(3),
124
+ type: 'update'
125
+ }
126
+ end
127
+ end
128
+
129
+ test 'has_many_ids=' do
130
+ @property = create(:property)
131
+ @photo1 = create(:photo)
132
+ @photo2 = create(:photo)
133
+ WebMock::RequestRegistry.instance.reset!
134
+
135
+ travel_to(@time) { @property.photo_ids = [@photo1].map(&:id) }
136
+ assert_posted("/events") do
137
+ assert_action_for @property, {
138
+ diff: { photo_ids: [[], [@photo1.id]] },
139
+ subject_type: "Property",
140
+ subject_id: @property.id,
141
+ timestamp: @time.iso8601(3),
142
+ type: 'update'
143
+ }
144
+
145
+ assert_action_for @photo1, {
146
+ diff: { property_id: [nil, @property.id] },
147
+ subject_type: "Photo",
148
+ subject_id: @photo1.id,
149
+ timestamp: @time.iso8601(3),
150
+ type: 'update'
151
+ }
152
+ end
153
+
154
+ WebMock::RequestRegistry.instance.reset!
155
+ travel_to(@time) { @property.photo_ids = [@photo2].map(&:id) }
156
+ assert_posted("/events") do
157
+ assert_action_for @photo2, {
158
+ diff: { property_id: [nil, @property.id] },
159
+ subject_type: "Photo",
160
+ subject_id: @photo2.id,
161
+ timestamp: @time.iso8601(3),
162
+ type: 'update'
163
+ }
164
+
165
+ assert_action_for @property, {
166
+ diff: { photo_ids: [[@photo1.id], [@photo2.id]] },
167
+ subject_type: "Property",
168
+ subject_id: @property.id,
169
+ timestamp: @time.iso8601(3),
170
+ type: 'update'
171
+ }
172
+
173
+ assert_action_for @photo1, {
174
+ diff: { property_id: [@property.id, nil] },
175
+ subject_type: "Photo",
176
+ subject_id: @photo1.id,
177
+ timestamp: @time.iso8601(3),
178
+ type: 'update'
179
+ }
180
+ end
181
+ end
182
+
183
+ test 'has_many.clear' do
184
+ @photo1 = create(:photo)
185
+ @photo2 = create(:photo)
186
+ @property = create(:property, photos: [@photo1, @photo2])
187
+ WebMock::RequestRegistry.instance.reset!
188
+
189
+ travel_to(@time) { @property.photos.clear }
190
+ assert_posted("/events") do |req|
191
+
192
+ assert_action_for @property, {
193
+ diff: { photo_ids: [[@photo1, @photo2].map(&:id), []] },
194
+ subject_type: "Property",
195
+ subject_id: @property.id,
196
+ timestamp: @time.iso8601(3),
197
+ type: 'update'
198
+ }
199
+
200
+ assert_action_for @photo1, {
201
+ diff: { property_id: [@property.id, nil] },
202
+ subject_type: "Photo",
203
+ subject_id: @photo1.id,
204
+ timestamp: @time.iso8601(3),
205
+ type: 'update'
206
+ }
207
+
208
+ assert_action_for @photo2, {
209
+ diff: { property_id: [@property.id, nil] },
210
+ subject_type: "Photo",
211
+ subject_id: @photo2.id,
212
+ timestamp: @time.iso8601(3),
213
+ type: 'update'
214
+ }
215
+ end
216
+ end
217
+
79
218
  test 'has_many.create'
80
219
 
81
220
  end
@@ -13,30 +13,29 @@ class HasOneAssociationTest < ActiveSupport::TestCase
13
13
 
14
14
  @account = travel_to(@time) { create(:account, email_address: @email_address) }
15
15
 
16
- assert_posted("/events") do |req|
17
- req_data = JSON.parse(req.body)
18
- assert_equal 2, req_data['actions'].size
19
-
20
- assert_equal req_data['actions'][0], {
16
+ assert_posted("/events") do
17
+ assert_action_for @account, {
21
18
  diff: {
22
19
  id: [nil, @account.id],
23
20
  name: [nil, @account.name],
24
21
  photos_count: [nil, 0],
25
22
  email_address_id: [nil, @email_address.id]
26
23
  },
27
- subject: "Account/#{@account.id}",
24
+ subject_type: "Account",
25
+ subject_id: @account.id,
28
26
  timestamp: @time.iso8601(3),
29
27
  type: 'create'
30
- }.as_json
28
+ }
31
29
 
32
- assert_equal req_data['actions'][1], {
30
+ assert_action_for @email_address, {
33
31
  timestamp: @time.iso8601(3),
34
32
  type: 'update',
35
- subject: "EmailAddress/#{@email_address.id}",
33
+ subject_type: "EmailAddress",
34
+ subject_id: @email_address.id,
36
35
  diff: {
37
36
  account_id: [nil, @account.id]
38
37
  }
39
- }.as_json
38
+ }
40
39
  end
41
40
  end
42
41
 
@@ -46,61 +45,59 @@ class HasOneAssociationTest < ActiveSupport::TestCase
46
45
 
47
46
  @email_address = travel_to(@time) { create(:email_address, account: @account) }
48
47
 
49
- assert_posted("/events") do |req|
50
- req_data = JSON.parse(req.body)
51
- assert_equal 2, req_data['actions'].size
52
-
53
- assert_equal req_data['actions'][0], {
48
+ assert_posted("/events") do
49
+ assert_action_for @email_address, {
54
50
  diff: {
55
51
  id: [nil, @email_address.id],
56
52
  address: [nil, @email_address.address],
57
53
  account_id: [nil, @account.id]
58
54
  },
59
- subject: "EmailAddress/#{@email_address.id}",
55
+ subject_type: "EmailAddress",
56
+ subject_id: @email_address.id,
60
57
  timestamp: @time.iso8601(3),
61
58
  type: 'create'
62
- }.as_json
59
+ }
63
60
 
64
- assert_equal req_data['actions'][1], {
61
+ assert_action_for @account, {
65
62
  timestamp: @time.iso8601(3),
66
63
  type: 'update',
67
- subject: "Account/#{@account.id}",
64
+ subject_type: "Account",
65
+ subject_id: @account.id,
68
66
  diff: {
69
67
  email_address_id: [nil, @email_address.id]
70
68
  }
71
- }.as_json
69
+ }
72
70
  end
73
71
  end
74
72
 
75
73
  test '::create with has_one association 2' do
76
74
  @account = travel_to(@time) { create(:account, email_address: build(:email_address)) }
77
75
 
78
- assert_posted("/events") do |req|
79
- req_data = JSON.parse(req.body)
80
- assert_equal 2, req_data['actions'].size
81
-
82
- assert_equal req_data['actions'][0], {
76
+ assert_posted("/events") do
77
+ assert_action_for @account, {
83
78
  diff: {
84
79
  id: [nil, @account.id],
85
80
  name: [nil, @account.name],
86
81
  photos_count: [nil, 0],
87
82
  email_address_id: [nil, @account.email_address.id]
88
83
  },
89
- subject: "Account/#{@account.id}",
84
+ subject_type: "Account",
85
+ subject_id: @account.id,
90
86
  timestamp: @time.iso8601(3),
91
87
  type: 'create'
92
- }.as_json
88
+ }
93
89
 
94
- assert_equal req_data['actions'][1], {
90
+ assert_action_for @account.email_address, {
95
91
  timestamp: @time.iso8601(3),
96
92
  type: 'create',
97
- subject: "EmailAddress/#{@account.email_address.id}",
93
+ subject_type: "EmailAddress",
94
+ subject_id: @account.email_address.id,
98
95
  diff: {
99
96
  id: [nil, @account.email_address.id],
100
97
  address: [nil, @account.email_address.address],
101
98
  account_id: [nil, @account.id]
102
99
  }
103
- }.as_json
100
+ }
104
101
  end
105
102
  end
106
103
 
@@ -111,27 +108,26 @@ class HasOneAssociationTest < ActiveSupport::TestCase
111
108
  @email_address = @account.email_address
112
109
  travel_to(@time) { @account.update(email_address: nil) }
113
110
 
114
- assert_posted("/events") do |req|
115
- req_data = JSON.parse(req.body)
116
- assert_equal 2, req_data['actions'].size
117
-
118
- assert_equal req_data['actions'][0], {
111
+ assert_posted("/events") do
112
+ assert_action_for @email_address, {
119
113
  diff: {
120
114
  account_id: [@account.id, nil]
121
115
  },
122
- subject: "EmailAddress/#{@email_address.id}",
116
+ subject_type: "EmailAddress",
117
+ subject_id: @email_address.id,
123
118
  timestamp: @time.iso8601(3),
124
119
  type: 'update'
125
- }.as_json
120
+ }
126
121
 
127
- assert_equal req_data['actions'][1], {
122
+ assert_action_for @account, {
128
123
  timestamp: @time.iso8601(3),
129
124
  type: 'update',
130
- subject: "Account/#{@account.id}",
125
+ subject_type: "Account",
126
+ subject_id: @account.id,
131
127
  diff: {
132
128
  email_address_id: [@email_address.id, nil]
133
129
  }
134
- }.as_json
130
+ }
135
131
  end
136
132
  end
137
133
 
@@ -10,11 +10,8 @@ class CreateTest < ActiveSupport::TestCase
10
10
  test '::create creates an Action' do
11
11
  @property = travel_to(@time) { create(:property) }
12
12
 
13
- assert_posted("/events") do |req|
14
- req_data = JSON.parse(req.body)
15
- assert_equal 1, req_data['actions'].size
16
-
17
- assert_equal req_data['actions'][0], {
13
+ assert_posted("/events") do
14
+ assert_action_for @property, {
18
15
  diff: {
19
16
  id: [nil, @property.id],
20
17
  name: [nil, @property.name],
@@ -25,30 +22,29 @@ class CreateTest < ActiveSupport::TestCase
25
22
  active: [nil, @property.active],
26
23
  created_at: [nil, @property.created_at]
27
24
  },
28
- subject: "Property/#{@property.id}",
25
+ subject_type: "Property",
26
+ subject_id: @property.id,
29
27
  timestamp: @time.iso8601(3),
30
28
  type: 'create'
31
- }.as_json
29
+ }
32
30
  end
33
31
  end
34
32
 
35
33
  test "::create creates an Action without :excluded attributes" do
36
34
  @comment = travel_to(@time) { create(:comment) }
37
35
 
38
- assert_posted("/events") do |req|
39
- req_data = JSON.parse(req.body)
40
- assert_equal 1, req_data['actions'].size
41
-
42
- assert_equal req_data['actions'][0], {
36
+ assert_posted("/events") do
37
+ assert_action_for @comment, {
43
38
  diff: {
44
39
  id: [nil, @comment.id],
45
40
  # No Title
46
41
  body: [nil, @comment.body]
47
42
  },
48
- subject: "Comment/#{@comment.id}",
43
+ subject_type: "Comment",
44
+ subject_id: @comment.id,
49
45
  timestamp: @time.iso8601(3),
50
46
  type: 'create'
51
- }.as_json
47
+ }
52
48
  end
53
49
  end
54
50
 
@@ -13,14 +13,12 @@ class DestroyTest < ActiveSupport::TestCase
13
13
 
14
14
  travel_to(@time) { @property.destroy }
15
15
 
16
- assert_posted("/events") do |req|
17
- req_data = JSON.parse(req.body)
18
- assert_equal 1, req_data['actions'].size
19
-
20
- assert_equal req_data['actions'][0], {
16
+ assert_posted("/events") do
17
+ assert_action_for @property, {
21
18
  timestamp: @time.iso8601(3),
22
19
  type: 'destroy',
23
- subject: "Property/#{@property.id}",
20
+ subject_type: "Property",
21
+ subject_id: @property.id,
24
22
  diff: {
25
23
  id: [@property.id, nil],
26
24
  name: [@property.name, nil],