sequel_bitemporal 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/lib/sequel/plugins/bitemporal.rb +12 -11
- data/sequel_bitemporal.gemspec +3 -3
- data/spec/bitemporal_date_spec.rb +147 -135
- data/spec/bitemporal_date_with_range_spec.rb +127 -127
- data/spec/bitemporal_serialization_spec.rb +7 -7
- data/spec/bitemporal_time_spec.rb +82 -82
- data/spec/bitemporal_time_with_range_spec.rb +85 -85
- data/spec/spec_helper.rb +0 -1
- data/spec/support/bitemporal_matchers.rb +11 -11
- metadata +8 -7
@@ -11,36 +11,36 @@ if DbHelpers.pg?
|
|
11
11
|
Timecop.return
|
12
12
|
end
|
13
13
|
it "checks version class is given" do
|
14
|
-
|
14
|
+
expect{
|
15
15
|
@version_class.plugin :bitemporal
|
16
|
-
}.
|
16
|
+
}.to raise_error Sequel::Error, "please specify version class to use for bitemporal plugin"
|
17
17
|
end
|
18
18
|
it "checks required columns are present" do
|
19
|
-
|
19
|
+
expect{
|
20
20
|
@version_class.plugin :bitemporal, version_class: @master_class
|
21
|
-
}.
|
21
|
+
}.to raise_error Sequel::Error, "bitemporal plugin requires the following missing columns on version class: master_id, valid_from, valid_to, created_at, expired_at"
|
22
22
|
end
|
23
23
|
it "propagates errors from version to master" do
|
24
24
|
master = @master_class.new
|
25
|
-
master.
|
25
|
+
expect(master).to be_valid
|
26
26
|
master.attributes = {name: "Single Standard"}
|
27
|
-
master.
|
28
|
-
master.errors.
|
27
|
+
expect(master).not_to be_valid
|
28
|
+
expect(master.errors).to eq({price: ["is required"]})
|
29
29
|
end
|
30
30
|
it "#update_attributes returns false instead of raising errors" do
|
31
31
|
master = @master_class.new
|
32
|
-
master.update_attributes(name: "Single Standard").
|
33
|
-
master.
|
34
|
-
master.errors.
|
35
|
-
master.update_attributes(price: 98).
|
32
|
+
expect(master.update_attributes(name: "Single Standard")).to be_falsey
|
33
|
+
expect(master).to be_new
|
34
|
+
expect(master.errors).to eq({price: ["is required"]})
|
35
|
+
expect(master.update_attributes(price: 98)).to be_truthy
|
36
36
|
end
|
37
37
|
it "allows creating a master and its first version in one step" do
|
38
38
|
master = @master_class.new
|
39
39
|
result = master.update_attributes name: "Single Standard", price: 98
|
40
|
-
result.
|
41
|
-
result.
|
42
|
-
master.
|
43
|
-
master.
|
40
|
+
expect(result).to be_truthy
|
41
|
+
expect(result).to eq(master)
|
42
|
+
expect(master).not_to be_new
|
43
|
+
expect(master).to have_versions %Q{
|
44
44
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
45
45
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
46
46
|
}
|
@@ -48,7 +48,7 @@ if DbHelpers.pg?
|
|
48
48
|
it "allows creating a new version in the past" do
|
49
49
|
master = @master_class.new
|
50
50
|
master.update_attributes name: "Single Standard", price: 98, valid_from: Date.today-1
|
51
|
-
master.
|
51
|
+
expect(master).to have_versions %Q{
|
52
52
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
53
53
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-27 | MAX DATE | true |
|
54
54
|
}
|
@@ -56,7 +56,7 @@ if DbHelpers.pg?
|
|
56
56
|
it "allows creating a new version in the future" do
|
57
57
|
master = @master_class.new
|
58
58
|
master.update_attributes name: "Single Standard", price: 98, valid_from: Date.today+1
|
59
|
-
master.
|
59
|
+
expect(master).to have_versions %Q{
|
60
60
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
61
61
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-29 | MAX DATE | |
|
62
62
|
}
|
@@ -65,7 +65,7 @@ if DbHelpers.pg?
|
|
65
65
|
master = @master_class.new
|
66
66
|
master.update_attributes name: "Single Standard", price: 98
|
67
67
|
master.update_attributes name: "Single Standard", price: 94
|
68
|
-
master.
|
68
|
+
expect(master).to have_versions %Q{
|
69
69
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
70
70
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
71
71
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
@@ -76,7 +76,7 @@ if DbHelpers.pg?
|
|
76
76
|
master.update_attributes name: "Single Standard", price: 98
|
77
77
|
master.update_attributes price: 94
|
78
78
|
master.update_attributes name: "King Size"
|
79
|
-
master.
|
79
|
+
expect(master).to have_versions %Q{
|
80
80
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
81
81
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
82
82
|
| Single Standard | 94 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
@@ -88,7 +88,7 @@ if DbHelpers.pg?
|
|
88
88
|
master.update_attributes name: "Single Standard", price: 98
|
89
89
|
Timecop.freeze Date.today+1
|
90
90
|
master.update_attributes price: 94
|
91
|
-
master.
|
91
|
+
expect(master).to have_versions %Q{
|
92
92
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
93
93
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
94
94
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -99,9 +99,9 @@ if DbHelpers.pg?
|
|
99
99
|
master = @master_class.new
|
100
100
|
master.update_attributes name: "Single Standard", price: 98, valid_to: Date.today+1
|
101
101
|
Timecop.freeze Date.today+1
|
102
|
-
master.update_attributes(price: 94).
|
102
|
+
expect(master.update_attributes(price: 94)).to be_falsey
|
103
103
|
master.update_attributes name: "Single Standard", price: 94
|
104
|
-
master.
|
104
|
+
expect(master).to have_versions %Q{
|
105
105
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
106
106
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | 2009-11-29 | |
|
107
107
|
| Single Standard | 94 | 2009-11-29 | | 2009-11-29 | MAX DATE | true |
|
@@ -112,7 +112,7 @@ if DbHelpers.pg?
|
|
112
112
|
master.update_attributes name: "Single Standard", price: 98
|
113
113
|
Timecop.freeze Date.today+1
|
114
114
|
master.update_attributes valid_to: Date.today+10
|
115
|
-
master.
|
115
|
+
expect(master).to have_versions %Q{
|
116
116
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
117
117
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
118
118
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -127,12 +127,12 @@ if DbHelpers.pg?
|
|
127
127
|
master = @master_class.new
|
128
128
|
master.update_attributes name: "Single Standard", price: 98, valid_to: Date.today+2
|
129
129
|
Timecop.freeze Date.today+1
|
130
|
-
master.
|
130
|
+
expect(master).to have_versions %Q{
|
131
131
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
132
132
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | 2009-11-30 | true |
|
133
133
|
}
|
134
134
|
master.update_attributes valid_to: nil
|
135
|
-
master.
|
135
|
+
expect(master).to have_versions %Q{
|
136
136
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
137
137
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
138
138
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -148,7 +148,7 @@ if DbHelpers.pg?
|
|
148
148
|
master.update_attributes name: "Single Standard", price: 98
|
149
149
|
master.update_attributes price: 98
|
150
150
|
master.update_attributes name: "Single Standard", price: 98
|
151
|
-
master.
|
151
|
+
expect(master).to have_versions %Q{
|
152
152
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
153
153
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
154
154
|
}
|
@@ -159,7 +159,7 @@ if DbHelpers.pg?
|
|
159
159
|
Timecop.freeze Date.today+1
|
160
160
|
master.update_attributes price: 98, valid_from: Date.today-2
|
161
161
|
master.update_attributes price: 98, valid_from: Date.today+1
|
162
|
-
master.
|
162
|
+
expect(master).to have_versions %Q{
|
163
163
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
164
164
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
165
165
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-27 | 2009-11-28 | |
|
@@ -176,7 +176,7 @@ if DbHelpers.pg?
|
|
176
176
|
master.update_attributes name: "Single Standard", price: 95, valid_from: Date.today+4, valid_to: Date.today+6
|
177
177
|
Timecop.freeze Date.today+1
|
178
178
|
master.update_attributes name: "King Size", valid_to: nil
|
179
|
-
master.
|
179
|
+
expect(master).to have_versions %Q{
|
180
180
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
181
181
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
182
182
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-30 | 2009-12-02 | |
|
@@ -192,7 +192,7 @@ if DbHelpers.pg?
|
|
192
192
|
master.update_attributes name: "Single Standard", price: 95, valid_from: Date.today+4, valid_to: Date.today+6
|
193
193
|
Timecop.freeze Date.today+1
|
194
194
|
master.update_attributes name: "King Size", valid_to: Date.today+4
|
195
|
-
master.
|
195
|
+
expect(master).to have_versions %Q{
|
196
196
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
197
197
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
198
198
|
| Single Standard | 94 | 2009-11-28 | 2009-11-29 | 2009-11-30 | 2009-12-02 | |
|
@@ -209,7 +209,7 @@ if DbHelpers.pg?
|
|
209
209
|
master.update_attributes name: "Single Standard", price: 95, valid_from: Date.today+4, valid_to: Date.today+6
|
210
210
|
Timecop.freeze Date.today+1
|
211
211
|
master.update_attributes name: "King Size", valid_to: Time.utc(9999)
|
212
|
-
master.
|
212
|
+
expect(master).to have_versions %Q{
|
213
213
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
214
214
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
215
215
|
| Single Standard | 94 | 2009-11-28 | 2009-11-29 | 2009-11-30 | 2009-12-02 | |
|
@@ -224,8 +224,8 @@ if DbHelpers.pg?
|
|
224
224
|
master.update_attributes name: "Single Standard", price: 98
|
225
225
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
226
226
|
Timecop.freeze Date.today+1
|
227
|
-
master.current_version.destroy.
|
228
|
-
master.
|
227
|
+
expect(master.current_version.destroy).to be_truthy
|
228
|
+
expect(master).to have_versions %Q{
|
229
229
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
230
230
|
| Single Standard | 92 | 2009-11-28 | | 2009-11-26 | 2009-11-28 | |
|
231
231
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
@@ -240,8 +240,8 @@ if DbHelpers.pg?
|
|
240
240
|
master.update_attributes name: "Single Standard", price: 98
|
241
241
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
242
242
|
Timecop.freeze Date.today+1
|
243
|
-
master.current_version.destroy(expand_previous_version: true).
|
244
|
-
master.
|
243
|
+
expect(master.current_version.destroy(expand_previous_version: true)).to be_truthy
|
244
|
+
expect(master).to have_versions %Q{
|
245
245
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
246
246
|
| Single Standard | 92 | 2009-11-28 | | 2009-11-26 | 2009-11-28 | |
|
247
247
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
@@ -256,8 +256,8 @@ if DbHelpers.pg?
|
|
256
256
|
master.update_attributes name: "Single Standard", price: 98
|
257
257
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
258
258
|
Timecop.freeze Date.today+1
|
259
|
-
master.versions.last.destroy.
|
260
|
-
master.
|
259
|
+
expect(master.versions.last.destroy).to be_truthy
|
260
|
+
expect(master).to have_versions %Q{
|
261
261
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
262
262
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
263
263
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
@@ -270,8 +270,8 @@ if DbHelpers.pg?
|
|
270
270
|
master.update_attributes name: "Single Standard", price: 98
|
271
271
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
272
272
|
Timecop.freeze Date.today+1
|
273
|
-
master.versions.last.destroy(expand_previous_version: false).
|
274
|
-
master.
|
273
|
+
expect(master.versions.last.destroy(expand_previous_version: false)).to be_truthy
|
274
|
+
expect(master).to have_versions %Q{
|
275
275
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
276
276
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
277
277
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | 2009-11-30 | true |
|
@@ -283,8 +283,8 @@ if DbHelpers.pg?
|
|
283
283
|
master.update_attributes name: "Single Standard", price: 98
|
284
284
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
285
285
|
Timecop.freeze Date.today+1
|
286
|
-
master.destroy.
|
287
|
-
master.
|
286
|
+
expect(master.destroy).to be_truthy
|
287
|
+
expect(master).to have_versions %Q{
|
288
288
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
289
289
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-28 | MAX DATE | |
|
290
290
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | 2009-11-30 | |
|
@@ -298,7 +298,7 @@ if DbHelpers.pg?
|
|
298
298
|
master2 = @master_class.find id: master.id
|
299
299
|
master.update_attributes name: "Single Standard", price: 94
|
300
300
|
master2.update_attributes name: "Single Standard", price: 95
|
301
|
-
master.
|
301
|
+
expect(master).to have_versions %Q{
|
302
302
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
303
303
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
304
304
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -313,7 +313,7 @@ if DbHelpers.pg?
|
|
313
313
|
master2 = @master_class.find id: master.id
|
314
314
|
master.update_attributes price: 94
|
315
315
|
master2.update_attributes name: "King Size"
|
316
|
-
master.
|
316
|
+
expect(master).to have_versions %Q{
|
317
317
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
318
318
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
319
319
|
| Single Standard | 98 | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -324,11 +324,11 @@ if DbHelpers.pg?
|
|
324
324
|
it "can expire invalid versions" do
|
325
325
|
master = @master_class.new.update_attributes name: "Single Standard", price: 98
|
326
326
|
master.current_version.price = nil
|
327
|
-
master.current_version.
|
327
|
+
expect(master.current_version).not_to be_valid
|
328
328
|
master.current_version.save validate: false
|
329
329
|
Timecop.freeze Date.today+1
|
330
330
|
master.update_attributes price: 94
|
331
|
-
master.
|
331
|
+
expect(master).to have_versions %Q{
|
332
332
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
333
333
|
| Single Standard | | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | |
|
334
334
|
| Single Standard | | 2009-11-29 | | 2009-11-28 | 2009-11-29 | |
|
@@ -344,17 +344,17 @@ if DbHelpers.pg?
|
|
344
344
|
initial_today = Date.today
|
345
345
|
Timecop.freeze initial_today+1 do
|
346
346
|
master.update_attributes valid_from: initial_today+4, name: "King Size", price: 15, length: 2, width: 2
|
347
|
-
master.propagated_during_last_save.
|
347
|
+
expect(master.propagated_during_last_save.size).to eq(0)
|
348
348
|
end
|
349
349
|
Timecop.freeze initial_today+2 do
|
350
350
|
master.update_attributes valid_from: initial_today+3, length: 1, width: 1
|
351
|
-
master.propagated_during_last_save.
|
351
|
+
expect(master.propagated_during_last_save.size).to eq(0)
|
352
352
|
end
|
353
353
|
Timecop.freeze initial_today+3 do
|
354
354
|
master.update_attributes valid_from: initial_today+2, length: 3, width: 4
|
355
|
-
master.propagated_during_last_save.
|
355
|
+
expect(master.propagated_during_last_save.size).to eq(1)
|
356
356
|
end
|
357
|
-
master.
|
357
|
+
expect(master).to have_versions %Q{
|
358
358
|
| name | price | length | width | created_at | expired_at | valid_from | valid_to | current |
|
359
359
|
| Single Standard | 12 | | 1 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | true |
|
360
360
|
| Single Standard | 12 | | 1 | 2009-11-29 | 2009-11-30 | 2009-11-28 | 2009-12-02 | |
|
@@ -373,10 +373,10 @@ if DbHelpers.pg?
|
|
373
373
|
master = @master_class.new
|
374
374
|
master.update_attributes name: "Single Standard", price: 98
|
375
375
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
376
|
-
@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first.
|
376
|
+
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be
|
377
377
|
Timecop.freeze Date.today+1
|
378
378
|
master.destroy
|
379
|
-
@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first.
|
379
|
+
expect(@master_class.eager_graph(:current_version).where("rooms_current_version.id IS NOT NULL").first).to be_nil
|
380
380
|
end
|
381
381
|
it "allows loading masters with a current version" do
|
382
382
|
master_destroyed = @master_class.new
|
@@ -386,27 +386,27 @@ if DbHelpers.pg?
|
|
386
386
|
master_with_current.update_attributes name: "Single Standard", price: 94
|
387
387
|
master_with_future = @master_class.new
|
388
388
|
master_with_future.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
389
|
-
@master_class.with_current_version.all.
|
389
|
+
expect(@master_class.with_current_version.all.size).to eq(1)
|
390
390
|
end
|
391
391
|
it "gets pending or current version attributes" do
|
392
392
|
master = @master_class.new
|
393
|
-
master.attributes.
|
394
|
-
master.pending_version.
|
395
|
-
master.current_version.
|
396
|
-
master.name.
|
393
|
+
expect(master.attributes).to eq({})
|
394
|
+
expect(master.pending_version).to be_nil
|
395
|
+
expect(master.current_version).to be_nil
|
396
|
+
expect(master.name).to be_nil
|
397
397
|
|
398
|
-
master.pending_or_current_version.name.
|
398
|
+
expect(master.pending_or_current_version.name).to be_nil
|
399
399
|
master.update_attributes name: "Single Standard", price: 98
|
400
|
-
master.attributes[:name].
|
401
|
-
master.pending_version.
|
402
|
-
master.pending_or_current_version.name.
|
403
|
-
master.name.
|
400
|
+
expect(master.attributes[:name]).to eq("Single Standard")
|
401
|
+
expect(master.pending_version).to be_nil
|
402
|
+
expect(master.pending_or_current_version.name).to eq("Single Standard")
|
403
|
+
expect(master.name).to eq("Single Standard")
|
404
404
|
|
405
405
|
master.attributes = {name: "King Size"}
|
406
|
-
master.attributes[:name].
|
407
|
-
master.pending_version.
|
408
|
-
master.pending_or_current_version.name.
|
409
|
-
master.name.
|
406
|
+
expect(master.attributes[:name]).to eq("King Size")
|
407
|
+
expect(master.pending_version).to be
|
408
|
+
expect(master.pending_or_current_version.name).to eq("King Size")
|
409
|
+
expect(master.name).to eq("King Size")
|
410
410
|
end
|
411
411
|
it "allows to go back in time" do
|
412
412
|
master = @master_class.new
|
@@ -417,7 +417,7 @@ if DbHelpers.pg?
|
|
417
417
|
Timecop.freeze Date.today+1
|
418
418
|
master.update_attributes price: 94
|
419
419
|
master.update_attributes price: 96, valid_from: Date.today+2
|
420
|
-
master.
|
420
|
+
expect(master).to have_versions %Q{
|
421
421
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
422
422
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-28 | 2009-11-29 | |
|
423
423
|
| Single Standard | 95 | 2009-11-28 | 2009-11-29 | 2009-11-29 | 2009-11-30 | |
|
@@ -426,44 +426,44 @@ if DbHelpers.pg?
|
|
426
426
|
| Single Standard | 94 | 2009-11-29 | | 2009-11-29 | 2009-11-30 | true |
|
427
427
|
| Single Standard | 96 | 2009-11-29 | | 2009-12-01 | MAX DATE | |
|
428
428
|
}
|
429
|
-
master.current_version.price.
|
429
|
+
expect(master.current_version.price).to eq(94)
|
430
430
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
431
|
-
master.current_version(true).price.
|
431
|
+
expect(master.current_version(true).price).to eq(98)
|
432
432
|
end
|
433
433
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
434
|
-
master.current_version(true).price.
|
434
|
+
expect(master.current_version(true).price).to eq(93)
|
435
435
|
end
|
436
436
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
437
|
-
master.current_version(true).price.
|
437
|
+
expect(master.current_version(true).price).to eq(96)
|
438
438
|
end
|
439
439
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today-1) do
|
440
|
-
master.current_version(true).price.
|
441
|
-
master.current_version.
|
440
|
+
expect(master.current_version(true).price).to eq(95)
|
441
|
+
expect(master.current_version).to be_current
|
442
442
|
Sequel::Plugins::Bitemporal.at(Date.today-1) do
|
443
|
-
master.current_version(true).price.
|
443
|
+
expect(master.current_version(true).price).to eq(98)
|
444
444
|
end
|
445
445
|
Sequel::Plugins::Bitemporal.at(Date.today+1) do
|
446
|
-
master.current_version(true).price.
|
446
|
+
expect(master.current_version(true).price).to eq(93)
|
447
447
|
end
|
448
448
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
449
|
-
master.current_version(true).price.
|
449
|
+
expect(master.current_version(true).price).to eq(91)
|
450
450
|
end
|
451
451
|
end
|
452
452
|
end
|
453
453
|
it "correctly reset time if failure when going back in time" do
|
454
454
|
before = Sequel::Plugins::Bitemporal.now
|
455
|
-
|
455
|
+
expect do
|
456
456
|
Sequel::Plugins::Bitemporal.at(Date.today+2) do
|
457
457
|
raise StandardError, "error during back in time"
|
458
458
|
end
|
459
|
-
end.
|
460
|
-
Sequel::Plugins::Bitemporal.now.
|
461
|
-
|
459
|
+
end.to raise_error StandardError
|
460
|
+
expect(Sequel::Plugins::Bitemporal.now).to eq(before)
|
461
|
+
expect do
|
462
462
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today+2) do
|
463
463
|
raise StandardError, "error during back in time"
|
464
464
|
end
|
465
|
-
end.
|
466
|
-
Sequel::Plugins::Bitemporal.now.
|
465
|
+
end.to raise_error StandardError
|
466
|
+
expect(Sequel::Plugins::Bitemporal.now).to eq(before)
|
467
467
|
end
|
468
468
|
it "allows eager loading with conditions on current or future versions" do
|
469
469
|
master = @master_class.new
|
@@ -472,16 +472,16 @@ if DbHelpers.pg?
|
|
472
472
|
master.update_attributes name: "Single Standard", price: 99
|
473
473
|
master.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
474
474
|
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(current_or_future_versions__id: nil) & {price: 99}).all.first
|
475
|
-
res.
|
476
|
-
res.current_or_future_versions.
|
477
|
-
res.current_or_future_versions.first.price.
|
475
|
+
expect(res).to be
|
476
|
+
expect(res.current_or_future_versions.size).to eq(1)
|
477
|
+
expect(res.current_or_future_versions.first.price).to eq(99)
|
478
478
|
res = @master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(current_or_future_versions__id: nil) & {price: 94}).all.first
|
479
|
-
res.
|
480
|
-
res.current_or_future_versions.
|
481
|
-
res.current_or_future_versions.first.price.
|
479
|
+
expect(res).to be
|
480
|
+
expect(res.current_or_future_versions.size).to eq(1)
|
481
|
+
expect(res.current_or_future_versions.first.price).to eq(94)
|
482
482
|
Timecop.freeze Date.today+1
|
483
483
|
master.destroy
|
484
|
-
@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(current_or_future_versions__id: nil)).all.
|
484
|
+
expect(@master_class.eager_graph(:current_or_future_versions).where(Sequel.negate(current_or_future_versions__id: nil)).all).to be_empty
|
485
485
|
end
|
486
486
|
it "allows loading masters with current or future versions" do
|
487
487
|
master_destroyed = @master_class.new
|
@@ -491,15 +491,15 @@ if DbHelpers.pg?
|
|
491
491
|
master_with_current.update_attributes name: "Single Standard", price: 94
|
492
492
|
master_with_future = @master_class.new
|
493
493
|
master_with_future.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+2
|
494
|
-
@master_class.with_current_or_future_versions.all.
|
494
|
+
expect(@master_class.with_current_or_future_versions.all.size).to eq(2)
|
495
495
|
end
|
496
496
|
it "delegates attributes from master to pending_or_current_version" do
|
497
497
|
master = @master_class.new
|
498
|
-
master.name.
|
498
|
+
expect(master.name).to be_nil
|
499
499
|
master.update_attributes name: "Single Standard", price: 98
|
500
|
-
master.name.
|
500
|
+
expect(master.name).to eq("Single Standard")
|
501
501
|
master.attributes = {name: "King Size"}
|
502
|
-
master.name.
|
502
|
+
expect(master.name).to eq("King Size")
|
503
503
|
end
|
504
504
|
it "avoids delegation with option delegate: false" do
|
505
505
|
closure = @version_class
|
@@ -528,19 +528,19 @@ if DbHelpers.pg?
|
|
528
528
|
master = @master_class.new.update_attributes name: "Single Standard", price: 98
|
529
529
|
master.disabled = true
|
530
530
|
master.update_attributes price: 94
|
531
|
-
master.reload.disabled.
|
531
|
+
expect(master.reload.disabled).to be_truthy
|
532
532
|
end
|
533
533
|
it "uses current version for partial_update even if valid_from is specified" do
|
534
534
|
master = @master_class.new
|
535
535
|
master.update_attributes name: "Single Standard", price: 98, valid_from: Date.today-2, valid_to: Date.today
|
536
536
|
master.update_attributes name: "Single Standard", price: 94
|
537
|
-
master.
|
537
|
+
expect(master).to have_versions %Q{
|
538
538
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
539
539
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-26 | 2009-11-28 | |
|
540
540
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
541
541
|
}
|
542
542
|
master.update_attributes name: "King Size", valid_from: Date.today-2
|
543
|
-
master.
|
543
|
+
expect(master).to have_versions %Q{
|
544
544
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
545
545
|
| Single Standard | 98 | 2009-11-28 | 2009-11-28 | 2009-11-26 | 2009-11-28 | |
|
546
546
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
@@ -553,7 +553,7 @@ if DbHelpers.pg?
|
|
553
553
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today+1) do
|
554
554
|
master.update_attributes name: "King Size"
|
555
555
|
end
|
556
|
-
master.
|
556
|
+
expect(master).to have_versions %Q{
|
557
557
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
558
558
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | true |
|
559
559
|
| King Size | 98 | 2009-11-29 | | 2009-11-28 | MAX DATE | |
|
@@ -561,7 +561,7 @@ if DbHelpers.pg?
|
|
561
561
|
Sequel::Plugins::Bitemporal.as_we_knew_it(Date.today+2) do
|
562
562
|
master.current_version(true).destroy
|
563
563
|
end
|
564
|
-
master.
|
564
|
+
expect(master).to have_versions %Q{
|
565
565
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
566
566
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-28 | MAX DATE | true |
|
567
567
|
| King Size | 98 | 2009-11-29 | 2009-11-30 | 2009-11-28 | MAX DATE | |
|
@@ -572,7 +572,7 @@ if DbHelpers.pg?
|
|
572
572
|
master = @master_class.new
|
573
573
|
master.update_attributes name: "Single Standard", price: 98, valid_from: Date.today-2, valid_to: Date.today
|
574
574
|
master.update_attributes name: "Single Standard", price: 94
|
575
|
-
master.
|
575
|
+
expect(master).to have_versions %Q{
|
576
576
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
577
577
|
| Single Standard | 98 | 2009-11-28 | | 2009-11-26 | 2009-11-28 | |
|
578
578
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
@@ -582,7 +582,7 @@ if DbHelpers.pg?
|
|
582
582
|
master.update_attributes name: "King Size"
|
583
583
|
end
|
584
584
|
end
|
585
|
-
master.
|
585
|
+
expect(master).to have_versions %Q{
|
586
586
|
| name | price | created_at | expired_at | valid_from | valid_to | current |
|
587
587
|
| Single Standard | 98 | 2009-11-28 | 2009-11-29 | 2009-11-26 | 2009-11-28 | |
|
588
588
|
| Single Standard | 94 | 2009-11-28 | | 2009-11-28 | MAX DATE | true |
|
@@ -593,32 +593,32 @@ if DbHelpers.pg?
|
|
593
593
|
context "#deleted?" do
|
594
594
|
subject{ @master_class.new }
|
595
595
|
it "is false unless persisted" do
|
596
|
-
subject.
|
596
|
+
expect(subject).not_to be_deleted
|
597
597
|
end
|
598
598
|
it "is false when persisted with a current version" do
|
599
|
-
subject.update_attributes(name: "Single Standard", price: 94).
|
599
|
+
expect(subject.update_attributes(name: "Single Standard", price: 94)).not_to be_deleted
|
600
600
|
end
|
601
601
|
it "is true when persisted without a current version" do
|
602
|
-
subject.update_attributes(name: "Single Standard", price: 94, valid_from: Date.today+1).
|
602
|
+
expect(subject.update_attributes(name: "Single Standard", price: 94, valid_from: Date.today+1)).to be_deleted
|
603
603
|
end
|
604
604
|
end
|
605
605
|
context "#last_version" do
|
606
606
|
subject{ @master_class.new }
|
607
607
|
it "is nil unless persisted" do
|
608
|
-
subject.last_version.
|
608
|
+
expect(subject.last_version).to be_nil
|
609
609
|
end
|
610
610
|
it "is current version when persisted with a current version" do
|
611
611
|
subject.update_attributes name: "Single Standard", price: 94
|
612
|
-
subject.last_version.
|
612
|
+
expect(subject.last_version).to eq(subject.current_version)
|
613
613
|
end
|
614
614
|
it "is nil with future version but no current version" do
|
615
615
|
subject.update_attributes name: "Single Standard", price: 94, valid_from: Date.today+1
|
616
|
-
subject.last_version.
|
616
|
+
expect(subject.last_version).to be_nil
|
617
617
|
end
|
618
618
|
it "is last version with previous version but no current version" do
|
619
619
|
subject.update_attributes name: "Single Standard", price: 94, valid_from: Date.today-2, valid_to: Date.today-1
|
620
|
-
subject.current_version.
|
621
|
-
subject.last_version.
|
620
|
+
expect(subject.current_version).to be_nil
|
621
|
+
expect(subject.last_version).to eq(subject.versions.last)
|
622
622
|
end
|
623
623
|
end
|
624
624
|
context "#restore" do
|
@@ -626,13 +626,13 @@ if DbHelpers.pg?
|
|
626
626
|
it "make last version current" do
|
627
627
|
subject.update_attributes name: "Single Standard", price: 94, valid_from: Date.today-2, valid_to: Date.today-1
|
628
628
|
subject.restore
|
629
|
-
subject.current_version.
|
629
|
+
expect(subject.current_version).to eq(subject.last_version)
|
630
630
|
end
|
631
631
|
it "can add additional attributes to apply" do
|
632
632
|
subject.update_attributes name: "Single Standard", price: 94, valid_from: Date.today-2, valid_to: Date.today-1
|
633
633
|
subject.restore name: "New Standard"
|
634
|
-
subject.current_version.name.
|
635
|
-
subject.current_version.price.
|
634
|
+
expect(subject.current_version.name).to eq("New Standard")
|
635
|
+
expect(subject.current_version.price).to eq(94)
|
636
636
|
end
|
637
637
|
end
|
638
638
|
end
|
@@ -653,8 +653,8 @@ if DbHelpers.pg?
|
|
653
653
|
let(:author){ double :author, audit_kind: "user" }
|
654
654
|
it "generates a new audit on creation" do
|
655
655
|
master = @master_class.new
|
656
|
-
master.
|
657
|
-
@audit_class.
|
656
|
+
expect(master).to receive(:updated_by).and_return author
|
657
|
+
expect(@audit_class).to receive(:audit).with(
|
658
658
|
master,
|
659
659
|
{},
|
660
660
|
hash_including({name: "Single Standard", price: 98}),
|
@@ -665,9 +665,9 @@ if DbHelpers.pg?
|
|
665
665
|
end
|
666
666
|
it "generates a new audit on full update" do
|
667
667
|
master = @master_class.new
|
668
|
-
master.
|
668
|
+
expect(master).to receive(:updated_by).twice.and_return author
|
669
669
|
master.update_attributes name: "Single Standard", price: 98
|
670
|
-
@audit_class.
|
670
|
+
expect(@audit_class).to receive(:audit).with(
|
671
671
|
master,
|
672
672
|
hash_including({name: "Single Standard", price: 98}),
|
673
673
|
hash_including({name: "King size", price: 98}),
|
@@ -678,9 +678,9 @@ if DbHelpers.pg?
|
|
678
678
|
end
|
679
679
|
it "generates a new audit on partial update" do
|
680
680
|
master = @master_class.new
|
681
|
-
master.
|
681
|
+
expect(master).to receive(:updated_by).twice.and_return author
|
682
682
|
master.update_attributes name: "Single Standard", price: 98
|
683
|
-
@audit_class.
|
683
|
+
expect(@audit_class).to receive(:audit).with(
|
684
684
|
master,
|
685
685
|
hash_including({name: "Single Standard", price: 98}),
|
686
686
|
hash_including({name: "King size", price: 98}),
|
@@ -694,30 +694,30 @@ if DbHelpers.pg?
|
|
694
694
|
begin
|
695
695
|
@master_class.instance_variable_set :@propagate_per_column, true
|
696
696
|
master = @master_class.new
|
697
|
-
master.
|
697
|
+
expect(master).to receive(:updated_by).exactly(8).times.and_return author
|
698
698
|
|
699
699
|
master.update_attributes name: "Single Standard", price: 12, length: nil, width: 1
|
700
700
|
initial_today = Date.today
|
701
701
|
Timecop.freeze initial_today+1 do
|
702
702
|
Sequel::Plugins::Bitemporal.at initial_today+4 do
|
703
703
|
master.update_attributes valid_from: initial_today+4, name: "King Size", price: 15, length: 2, width: 2
|
704
|
-
master.propagated_during_last_save.
|
704
|
+
expect(master.propagated_during_last_save.size).to eq(0)
|
705
705
|
end
|
706
706
|
end
|
707
707
|
Timecop.freeze initial_today+2 do
|
708
708
|
Sequel::Plugins::Bitemporal.at initial_today+3 do
|
709
709
|
master.update_attributes valid_from: initial_today+3, length: 1, width: 1
|
710
|
-
master.propagated_during_last_save.
|
710
|
+
expect(master.propagated_during_last_save.size).to eq(0)
|
711
711
|
end
|
712
712
|
end
|
713
|
-
@audit_class.
|
713
|
+
expect(@audit_class).to receive(:audit).with(
|
714
714
|
master,
|
715
715
|
hash_including({name: "Single Standard", price: 12, length: nil, width: 1}),
|
716
716
|
hash_including({name: "Single Standard", price: 12, length: 3, width: 4}),
|
717
717
|
initial_today+2,
|
718
718
|
author
|
719
719
|
)
|
720
|
-
@audit_class.
|
720
|
+
expect(@audit_class).to receive(:audit).with(
|
721
721
|
master,
|
722
722
|
hash_including({name: "Single Standard", price: 12, length: 1, width: 1}),
|
723
723
|
hash_including({name: "Single Standard", price: 12, length: 1, width: 4}),
|
@@ -727,7 +727,7 @@ if DbHelpers.pg?
|
|
727
727
|
Timecop.freeze initial_today+3 do
|
728
728
|
Sequel::Plugins::Bitemporal.at initial_today+2 do
|
729
729
|
master.update_attributes valid_from: initial_today+2, length: 3, width: 4
|
730
|
-
master.propagated_during_last_save.
|
730
|
+
expect(master.propagated_during_last_save.size).to eq(1)
|
731
731
|
end
|
732
732
|
end
|
733
733
|
ensure
|
@@ -751,8 +751,8 @@ if DbHelpers.pg?
|
|
751
751
|
end
|
752
752
|
it "generates a new audit on creation" do
|
753
753
|
master = @master_class.new
|
754
|
-
master.
|
755
|
-
@audit_class.
|
754
|
+
expect(master).to receive(:author).and_return author
|
755
|
+
expect(@audit_class).to receive(:audit).with(
|
756
756
|
master,
|
757
757
|
{},
|
758
758
|
hash_including({name: "Single Standard", price: 98}),
|
@@ -763,9 +763,9 @@ if DbHelpers.pg?
|
|
763
763
|
end
|
764
764
|
it "generates a new audit on full update" do
|
765
765
|
master = @master_class.new
|
766
|
-
master.
|
766
|
+
expect(master).to receive(:author).twice.and_return author
|
767
767
|
master.update_attributes name: "Single Standard", price: 98
|
768
|
-
@audit_class.
|
768
|
+
expect(@audit_class).to receive(:audit).with(
|
769
769
|
master,
|
770
770
|
hash_including({name: "Single Standard", price: 98}),
|
771
771
|
hash_including({name: "King size", price: 98}),
|
@@ -776,9 +776,9 @@ if DbHelpers.pg?
|
|
776
776
|
end
|
777
777
|
it "generates a new audit on partial update" do
|
778
778
|
master = @master_class.new
|
779
|
-
master.
|
779
|
+
expect(master).to receive(:author).twice.and_return author
|
780
780
|
master.update_attributes name: "Single Standard", price: 98
|
781
|
-
@audit_class.
|
781
|
+
expect(@audit_class).to receive(:audit).with(
|
782
782
|
master,
|
783
783
|
hash_including({name: "Single Standard", price: 98}),
|
784
784
|
hash_including({name: "King size", price: 98}),
|