sequel_bitemporal 0.8.1 → 0.8.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.
- 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}),
|