acts_as_span 0.0.5

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.
@@ -0,0 +1,302 @@
1
+ require 'spec_helper'
2
+
3
+ describe "a basic model using acts_as_span" do
4
+ before(:all) do
5
+ build_model :span_model do
6
+ string :description
7
+ date :start_date
8
+ date :end_date
9
+
10
+ acts_as_span
11
+ end
12
+ end
13
+
14
+ context "named_scopes and current?, expired?, and future?" do
15
+ # -2 -1 T +1 +2 C F E
16
+ # A |---| E
17
+ # B |-------| C
18
+ # C |--------------| C
19
+ # D | C
20
+ # E |------| C
21
+ # F |--| F
22
+ # G |-> C
23
+ # H |-> C
24
+ # I |-> F
25
+ # J <-| E
26
+ # K <-| C
27
+ # L <-| C
28
+ # M <-> C
29
+ context "A) start_date < today & end_date < today" do
30
+ before(:all) do
31
+ @span_model = SpanModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today - 1.day)
32
+ end
33
+
34
+ it "should NOT be included in #current" do
35
+ SpanModel.current.should_not include(@span_model)
36
+ @span_model.current?.should be_false
37
+ end
38
+
39
+ it "should NOT be included in #future" do
40
+ SpanModel.future.should_not include(@span_model)
41
+ @span_model.future?.should be_false
42
+ end
43
+
44
+ it "should be included in #expired" do
45
+ SpanModel.expired.should include(@span_model)
46
+ @span_model.expired?.should be_true
47
+ end
48
+ end
49
+
50
+ context "B) start_date < today & end_date == today" do
51
+ before(:all) do
52
+ @span_model = SpanModel.create!(:start_date => Date.today - 2.day, :end_date => Date.today)
53
+ end
54
+
55
+ it "should be included in #current" do
56
+ SpanModel.current.should include(@span_model)
57
+ @span_model.current?.should be_true
58
+ end
59
+
60
+ it "should NOT be included in #future" do
61
+ SpanModel.future.should_not include(@span_model)
62
+ @span_model.future?.should be_false
63
+ end
64
+
65
+ it "should NOT be included in #expired" do
66
+ SpanModel.expired.should_not include(@span_model)
67
+ @span_model.expired?.should be_false
68
+ end
69
+ end
70
+
71
+ context "C) start_date < today & end_date > today" do
72
+ before(:all) do
73
+ @span_model = SpanModel.create!(:start_date => Date.today - 2.day, :end_date => Date.today + 2.day)
74
+ end
75
+
76
+ it "should be included in #current" do
77
+ SpanModel.current.should include(@span_model)
78
+ @span_model.current?.should be_true
79
+ end
80
+
81
+ it "should NOT be included in #future" do
82
+ SpanModel.future.should_not include(@span_model)
83
+ @span_model.future?.should be_false
84
+ end
85
+
86
+ it "should NOT be included in #expired" do
87
+ SpanModel.expired.should_not include(@span_model)
88
+ @span_model.expired?.should be_false
89
+ end
90
+ end
91
+
92
+ context "D) start_date == today & end_date == today" do
93
+ before(:all) do
94
+ @span_model = SpanModel.create!(:start_date => Date.today, :end_date => Date.today)
95
+ end
96
+
97
+ it "should be included in #current" do
98
+ SpanModel.current.should include(@span_model)
99
+ @span_model.current?.should be_true
100
+ end
101
+
102
+ it "should NOT be included in #future" do
103
+ SpanModel.future.should_not include(@span_model)
104
+ @span_model.future?.should be_false
105
+ end
106
+
107
+ it "should NOT be included in #expired" do
108
+ SpanModel.expired.should_not include(@span_model)
109
+ @span_model.expired?.should be_false
110
+ end
111
+ end
112
+
113
+ context "E) start_date == today & end_date > today" do
114
+ before(:all) do
115
+ @span_model = SpanModel.create!(:start_date => Date.today, :end_date => Date.today + 2.day)
116
+ end
117
+
118
+ it "should be included in #current" do
119
+ SpanModel.current.should include(@span_model)
120
+ @span_model.current?.should be_true
121
+ end
122
+
123
+ it "should NOT be included in #future" do
124
+ SpanModel.future.should_not include(@span_model)
125
+ @span_model.future?.should be_false
126
+ end
127
+
128
+ it "should NOT be included in #expired" do
129
+ SpanModel.expired.should_not include(@span_model)
130
+ @span_model.expired?.should be_false
131
+ end
132
+ end
133
+
134
+ context "F) start_date > today & end_date > today" do
135
+ before(:all) do
136
+ @span_model = SpanModel.create!(:start_date => Date.today + 1.day, :end_date => Date.today + 2.days)
137
+ end
138
+
139
+ it "should NOT be included in #current" do
140
+ SpanModel.current.should_not include(@span_model)
141
+ @span_model.current?.should be_false
142
+ end
143
+
144
+ it "should be included in #future" do
145
+ SpanModel.future.should include(@span_model)
146
+ @span_model.future?.should be_true
147
+ end
148
+
149
+ it "should NOT be included in #expired" do
150
+ SpanModel.expired.should_not include(@span_model)
151
+ @span_model.expired?.should be_false
152
+ end
153
+ end
154
+
155
+ context "G) start_date < today & end_date == nil" do
156
+ before(:all) do
157
+ @span_model = SpanModel.create!(:start_date => Date.today - 2.day, :end_date => nil)
158
+ end
159
+
160
+ it "should be included in #current" do
161
+ SpanModel.current.should include(@span_model)
162
+ @span_model.current?.should be_true
163
+ end
164
+
165
+ it "should NOT be included in #future" do
166
+ SpanModel.future.should_not include(@span_model)
167
+ @span_model.future?.should be_false
168
+ end
169
+
170
+ it "should NOT be included in #expired" do
171
+ SpanModel.expired.should_not include(@span_model)
172
+ @span_model.expired?.should be_false
173
+ end
174
+ end
175
+
176
+ context "H) start_date == today & end_date == nil" do
177
+ before(:all) do
178
+ @span_model = SpanModel.create!(:start_date => Date.today, :end_date => nil)
179
+ end
180
+
181
+ it "should be included in #current" do
182
+ SpanModel.current.should include(@span_model)
183
+ @span_model.current?.should be_true
184
+ end
185
+
186
+ it "should NOT be included in #future" do
187
+ SpanModel.future.should_not include(@span_model)
188
+ @span_model.future?.should be_false
189
+ end
190
+
191
+ it "should NOT be included in #expired" do
192
+ SpanModel.expired.should_not include(@span_model)
193
+ @span_model.expired?.should be_false
194
+ end
195
+ end
196
+
197
+ context "I) start_date > today & end_date == nil" do
198
+ before(:all) do
199
+ @span_model = SpanModel.create!(:start_date => Date.today + 1.day, :end_date => nil)
200
+ end
201
+
202
+ it "should NOT be included in #current" do
203
+ SpanModel.current.should_not include(@span_model)
204
+ @span_model.current?.should be_false
205
+ end
206
+
207
+ it "should be included in #future" do
208
+ SpanModel.future.should include(@span_model)
209
+ @span_model.future?.should be_true
210
+ end
211
+
212
+ it "should NOT be included in #expired" do
213
+ SpanModel.expired.should_not include(@span_model)
214
+ @span_model.expired?.should be_false
215
+ end
216
+ end
217
+
218
+ context "J) start_date == nil & end_date < today" do
219
+ before(:all) do
220
+ @span_model = SpanModel.create!(:start_date => nil, :end_date => Date.today - 1.day)
221
+ end
222
+
223
+ it "should NOT be included in #current" do
224
+ SpanModel.current.should_not include(@span_model)
225
+ @span_model.current?.should be_false
226
+ end
227
+
228
+ it "should NOT be included in #future" do
229
+ SpanModel.future.should_not include(@span_model)
230
+ @span_model.future?.should be_false
231
+ end
232
+
233
+ it "should be included in #expired" do
234
+ SpanModel.expired.should include(@span_model)
235
+ @span_model.expired?.should be_true
236
+ end
237
+ end
238
+
239
+ context "K) start_date == nil & end_date == today" do
240
+ before(:all) do
241
+ @span_model = SpanModel.create!(:start_date => nil, :end_date => Date.today)
242
+ end
243
+
244
+ it "should be included in #current" do
245
+ SpanModel.current.should include(@span_model)
246
+ @span_model.current?.should be_true
247
+ end
248
+
249
+ it "should NOT be included in #future" do
250
+ SpanModel.future.should_not include(@span_model)
251
+ @span_model.future?.should be_false
252
+ end
253
+
254
+ it "should NOT be included in #expired" do
255
+ SpanModel.expired.should_not include(@span_model)
256
+ @span_model.expired?.should be_false
257
+ end
258
+ end
259
+
260
+ context "L) start_date == nil & end_date > today" do
261
+ before(:all) do
262
+ @span_model = SpanModel.create!(:start_date => nil, :end_date => Date.today + 2.day)
263
+ end
264
+
265
+ it "should be included in #current" do
266
+ SpanModel.current.should include(@span_model)
267
+ @span_model.current?.should be_true
268
+ end
269
+
270
+ it "should NOT be included in #future" do
271
+ SpanModel.future.should_not include(@span_model)
272
+ @span_model.future?.should be_false
273
+ end
274
+
275
+ it "should NOT be included in #expired" do
276
+ SpanModel.expired.should_not include(@span_model)
277
+ @span_model.expired?.should be_false
278
+ end
279
+ end
280
+
281
+ context "M) start_date == nil & end_date == nil" do
282
+ before(:all) do
283
+ @span_model = SpanModel.create!(:start_date => nil, :end_date => nil)
284
+ end
285
+
286
+ it "should be included in #current" do
287
+ SpanModel.current.should include(@span_model)
288
+ @span_model.current?.should be_true
289
+ end
290
+
291
+ it "should NOT be included in #future" do
292
+ SpanModel.future.should_not include(@span_model)
293
+ @span_model.future?.should be_false
294
+ end
295
+
296
+ it "should NOT be included in #expired" do
297
+ SpanModel.expired.should_not include(@span_model)
298
+ @span_model.expired?.should be_false
299
+ end
300
+ end
301
+ end
302
+ end
@@ -0,0 +1,597 @@
1
+ require 'spec_helper'
2
+
3
+ describe "a basic model using acts_as_span" do
4
+ before(:each) do
5
+ build_model :multiple_scoped_model do
6
+ integer :parent_1_id
7
+ integer :parent_2_id
8
+ string :description
9
+ date :start_date
10
+ date :end_date
11
+
12
+ acts_as_span :span_overlap_count => 1, :span_overlap_scope => [:parent_1_id, :parent_2_id]
13
+ end
14
+
15
+ build_model :single_scoped_model do
16
+ integer :parent_1_id
17
+ string :description
18
+ date :start_date
19
+ date :end_date
20
+
21
+ acts_as_span :span_overlap_scope => :parent_1_id
22
+ end
23
+
24
+ build_model :scoped_model do
25
+ string :description
26
+ date :start_date
27
+ date :end_date
28
+
29
+ acts_as_span :span_overlap_count => 0
30
+ end
31
+
32
+ build_model :span_model do
33
+ string :description
34
+ date :start_date
35
+ date :end_date
36
+
37
+ acts_as_span :span_overlap_count => nil
38
+ end
39
+
40
+ ScopedModel.all.each(&:destroy)
41
+ end
42
+
43
+ #context "span_overlap_count == nil" do
44
+ # before(:each) do
45
+ # @span_model = SpanModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day)
46
+ # end
47
+ #
48
+ # it "should be valid if overlap?" do
49
+ # non_scoped_model = SpanModel.new(:start_date => Date.today, :end_date => Date.today)
50
+ # non_scoped_model.should be_valid
51
+ # non_scoped_model.overlap?(@span_model).should be_true
52
+ # end
53
+ #end
54
+ #
55
+ #context "span_overlap_count == 1, span_overlap_scope == Array" do
56
+ # before(:each) do
57
+ # @span_model = MultipleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1, :parent_2_id => 2)
58
+ # @span_model_2 = MultipleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1, :parent_2_id => 2)
59
+ # end
60
+ #
61
+ # it "should NOT be valid if in scope && overlap?" do
62
+ # scoped_model = MultipleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1, :parent_2_id => 2)
63
+ # scoped_model.should_not be_valid
64
+ # scoped_model.overlap?(@span_model).should be_true
65
+ # end
66
+ #
67
+ # it "should be valid if NOT in scope && overlap?" do
68
+ # scoped_model = MultipleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1, :parent_2_id => 0)
69
+ # scoped_model.should be_valid
70
+ # scoped_model.overlap?(@span_model).should be_true
71
+ # end
72
+ #end
73
+ #
74
+ #context "span_overlap_count == nil, span_overlap_scope == symbol" do
75
+ # before(:each) do
76
+ # @span_model = SingleScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day, :parent_1_id => 1)
77
+ # end
78
+ #
79
+ # it "should NOT be valid if in scope && overlap?" do
80
+ # scoped_model = SingleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 1)
81
+ # scoped_model.should_not be_valid
82
+ # scoped_model.overlap?(@span_model).should be_true
83
+ # end
84
+ #
85
+ # it "should be valid if NOT in scope && overlap?" do
86
+ # scoped_model = SingleScopedModel.new(:start_date => Date.today, :end_date => Date.today, :parent_1_id => 0)
87
+ # scoped_model.should be_valid
88
+ # scoped_model.overlap?(@span_model).should be_true
89
+ # end
90
+ #
91
+ # it "should ignore itself" do
92
+ # @span_model.should be_valid
93
+ # end
94
+ #end
95
+
96
+ context "span_overlap_count == 0" do
97
+ # -4 -3 -2 -1 +1 +2 +3 +4
98
+ # |-----------| TEST SPAN
99
+ # A |---| VALID
100
+ # B |---------------|
101
+ # C |---------------------------|
102
+ # D |---|
103
+ # E |---------------|
104
+ # F |---| VALID
105
+ # G |->
106
+ # H |->
107
+ # I |-> VALID
108
+ # J <-|
109
+ # K <-|
110
+ # L <-| VALID
111
+ # M <--->
112
+ context "span_model.start_date && span_model.end_date" do
113
+ before(:each) do
114
+ @span_model = ScopedModel.create!(:start_date => Date.today - 2.days, :end_date => Date.today + 2.day)
115
+ end
116
+
117
+ context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
118
+ it "should be valid" do
119
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
120
+ scoped_model.should be_valid
121
+ scoped_model.overlap?(@span_model).should be_false
122
+ end
123
+ end
124
+
125
+ context "B) start_date < span_model.start_date && end_date IN span" do
126
+ it "should NOT be valid" do
127
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
128
+ scoped_model.should_not be_valid
129
+ scoped_model.overlap?(@span_model).should be_true
130
+ end
131
+ end
132
+
133
+ context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
134
+ it "should NOT be valid" do
135
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
136
+ scoped_model.should_not be_valid
137
+ scoped_model.overlap?(@span_model).should be_true
138
+ end
139
+ end
140
+
141
+ context "D) start_date IN span && end_date IN span" do
142
+ it "should NOT be valid" do
143
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
144
+ scoped_model.should_not be_valid
145
+ scoped_model.overlap?(@span_model).should be_true
146
+ end
147
+ end
148
+
149
+ context "E) start_date IN span && end_date > span_model.end_date" do
150
+ it "should NOT be valid" do
151
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
152
+ scoped_model.should_not be_valid
153
+ scoped_model.overlap?(@span_model).should be_true
154
+ end
155
+ end
156
+
157
+ context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
158
+ it "should be valid" do
159
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
160
+ scoped_model.should be_valid
161
+ scoped_model.overlap?(@span_model).should be_false
162
+ end
163
+ end
164
+
165
+ context "G) start_date < span_model.start_date && end_date nil" do
166
+ it "should NOT be valid" do
167
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
168
+ scoped_model.should_not be_valid
169
+ scoped_model.overlap?(@span_model).should be_true
170
+ end
171
+ end
172
+
173
+ context "H) start_date IN span && end_date nil" do
174
+ it "should NOT be valid" do
175
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
176
+ scoped_model.should_not be_valid
177
+ scoped_model.overlap?(@span_model).should be_true
178
+ end
179
+ end
180
+
181
+ context "I) start_date > span_model.end_date && end_date nil" do
182
+ it "should be valid" do
183
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
184
+ scoped_model.should be_valid
185
+ scoped_model.overlap?(@span_model).should be_false
186
+ end
187
+ end
188
+
189
+ context "J) start_date nil && end_date > span_model.end_date" do
190
+ it "should NOT be valid" do
191
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
192
+ scoped_model.should_not be_valid
193
+ scoped_model.overlap?(@span_model).should be_true
194
+ end
195
+ end
196
+
197
+ context "K) start_date nil && end_date IN span" do
198
+ it "should NOT be valid" do
199
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
200
+ scoped_model.should_not be_valid
201
+ scoped_model.overlap?(@span_model).should be_true
202
+ end
203
+ end
204
+
205
+ context "L) start_date nil && end_date < span_model.start_date" do
206
+ it "should be valid" do
207
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
208
+ scoped_model.should be_valid
209
+ scoped_model.overlap?(@span_model).should be_false
210
+ end
211
+ end
212
+
213
+ context "M) start_date nil && end_date nil" do
214
+ it "should NOT be valid" do
215
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
216
+ scoped_model.should_not be_valid
217
+ scoped_model.overlap?(@span_model).should be_true
218
+ end
219
+ end
220
+ end
221
+
222
+ # -4 -3 -2 -1 +1 +2 +3 +4
223
+ # |-------------------> TEST SPAN
224
+ # A |---| VALID
225
+ # B |---------------|
226
+ # C |---------------------------|
227
+ # D |---|
228
+ # E |---------------|
229
+ # F |---|
230
+ # G |->
231
+ # H |->
232
+ # I |->
233
+ # J <-|
234
+ # K <-|
235
+ # L <-| VALID
236
+ # M <--->
237
+ context "span_model.start_date && span_model.end_date.nil" do
238
+ before(:each) do
239
+ @span_model = ScopedModel.create!(:start_date => Date.today - 2.days, :end_date => nil)
240
+ end
241
+
242
+ context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
243
+ it "should be valid" do
244
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
245
+ scoped_model.should be_valid
246
+ scoped_model.overlap?(@span_model).should be_false
247
+ end
248
+ end
249
+
250
+ context "B) start_date < span_model.start_date && end_date IN span" do
251
+ it "should NOT be valid" do
252
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
253
+ scoped_model.should_not be_valid
254
+ scoped_model.overlap?(@span_model).should be_true
255
+ end
256
+ end
257
+
258
+ context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
259
+ it "should NOT be valid" do
260
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
261
+ scoped_model.should_not be_valid
262
+ scoped_model.overlap?(@span_model).should be_true
263
+ end
264
+ end
265
+
266
+ context "D) start_date IN span && end_date IN span" do
267
+ it "should NOT be valid" do
268
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
269
+ scoped_model.should_not be_valid
270
+ scoped_model.overlap?(@span_model).should be_true
271
+ end
272
+ end
273
+
274
+ context "E) start_date IN span && end_date > span_model.end_date" do
275
+ it "should NOT be valid" do
276
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
277
+ scoped_model.should_not be_valid
278
+ scoped_model.overlap?(@span_model).should be_true
279
+ end
280
+ end
281
+
282
+ context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
283
+ it "should NOT be valid" do
284
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
285
+ scoped_model.should_not be_valid
286
+ scoped_model.overlap?(@span_model).should be_true
287
+ end
288
+ end
289
+
290
+ context "G) start_date < span_model.start_date && end_date nil" do
291
+ it "should NOT be valid" do
292
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
293
+ scoped_model.should_not be_valid
294
+ scoped_model.overlap?(@span_model).should be_true
295
+ end
296
+ end
297
+
298
+ context "H) start_date IN span && end_date nil" do
299
+ it "should NOT be valid" do
300
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
301
+ scoped_model.should_not be_valid
302
+ scoped_model.overlap?(@span_model).should be_true
303
+ end
304
+ end
305
+
306
+ context "I) start_date > span_model.end_date && end_date nil" do
307
+ it "should NOT be valid" do
308
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
309
+ scoped_model.should_not be_valid
310
+ scoped_model.overlap?(@span_model).should be_true
311
+ end
312
+ end
313
+
314
+ context "J) start_date nil && end_date > span_model.end_date" do
315
+ it "should NOT be valid" do
316
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
317
+ scoped_model.should_not be_valid
318
+ scoped_model.overlap?(@span_model).should be_true
319
+ end
320
+ end
321
+
322
+ context "K) start_date nil && end_date IN span" do
323
+ it "should NOT be valid" do
324
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
325
+ scoped_model.should_not be_valid
326
+ scoped_model.overlap?(@span_model).should be_true
327
+ end
328
+ end
329
+
330
+ context "L) start_date nil && end_date < span_model.start_date" do
331
+ it "should be valid" do
332
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
333
+ scoped_model.should be_valid
334
+ scoped_model.overlap?(@span_model).should be_false
335
+ end
336
+ end
337
+
338
+ context "M) start_date nil && end_date nil" do
339
+ it "should NOT be valid" do
340
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
341
+ scoped_model.should_not be_valid
342
+ scoped_model.overlap?(@span_model).should be_true
343
+ end
344
+ end
345
+ end
346
+
347
+ # -4 -3 -2 -1 +1 +2 +3 +4
348
+ # <-------------------| TEST SPAN
349
+ # A |---|
350
+ # B |---------------|
351
+ # C |---------------------------|
352
+ # D |---|
353
+ # E |---------------|
354
+ # F |---| VALID
355
+ # G |->
356
+ # H |->
357
+ # I |-> VALID
358
+ # J <-|
359
+ # K <-|
360
+ # L <-|
361
+ # M <--->
362
+ context "span_model.start_date.nil && span_model.end_date" do
363
+ before(:each) do
364
+ @span_model = ScopedModel.create!(:start_date => nil, :end_date => Date.today + 2.day)
365
+ end
366
+
367
+ context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
368
+ it "should NOT be valid" do
369
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
370
+ scoped_model.should_not be_valid
371
+ scoped_model.overlap?(@span_model).should be_true
372
+ end
373
+ end
374
+
375
+ context "B) start_date < span_model.start_date && end_date IN span" do
376
+ it "should NOT be valid" do
377
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
378
+ scoped_model.should_not be_valid
379
+ scoped_model.overlap?(@span_model).should be_true
380
+ end
381
+ end
382
+
383
+ context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
384
+ it "should NOT be valid" do
385
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
386
+ scoped_model.should_not be_valid
387
+ scoped_model.overlap?(@span_model).should be_true
388
+ end
389
+ end
390
+
391
+ context "D) start_date IN span && end_date IN span" do
392
+ it "should NOT be valid" do
393
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
394
+ scoped_model.should_not be_valid
395
+ scoped_model.overlap?(@span_model).should be_true
396
+ end
397
+ end
398
+
399
+ context "E) start_date IN span && end_date > span_model.end_date" do
400
+ it "should NOT be valid" do
401
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
402
+ scoped_model.should_not be_valid
403
+ scoped_model.overlap?(@span_model).should be_true
404
+ end
405
+ end
406
+
407
+ context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
408
+ it "should be valid" do
409
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
410
+ scoped_model.should be_valid
411
+ scoped_model.overlap?(@span_model).should be_false
412
+ end
413
+ end
414
+
415
+ context "G) start_date < span_model.start_date && end_date nil" do
416
+ it "should NOT be valid" do
417
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
418
+ scoped_model.should_not be_valid
419
+ scoped_model.overlap?(@span_model).should be_true
420
+ end
421
+ end
422
+
423
+ context "H) start_date IN span && end_date nil" do
424
+ it "should NOT be valid" do
425
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
426
+ scoped_model.should_not be_valid
427
+ scoped_model.overlap?(@span_model).should be_true
428
+ end
429
+ end
430
+
431
+ context "I) start_date > span_model.end_date && end_date nil" do
432
+ it "should be valid" do
433
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
434
+ scoped_model.should be_valid
435
+ scoped_model.overlap?(@span_model).should be_false
436
+ end
437
+ end
438
+
439
+ context "J) start_date nil && end_date > span_model.end_date" do
440
+ it "should NOT be valid" do
441
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
442
+ scoped_model.should_not be_valid
443
+ scoped_model.overlap?(@span_model).should be_true
444
+ end
445
+ end
446
+
447
+ context "K) start_date nil && end_date IN span" do
448
+ it "should NOT be valid" do
449
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
450
+ scoped_model.should_not be_valid
451
+ scoped_model.overlap?(@span_model).should be_true
452
+ end
453
+ end
454
+
455
+ context "L) start_date nil && end_date < span_model.start_date" do
456
+ it "should NOT be valid" do
457
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
458
+ scoped_model.should_not be_valid
459
+ scoped_model.overlap?(@span_model).should be_true
460
+ end
461
+ end
462
+
463
+ context "M) start_date nil && end_date nil" do
464
+ it "should NOT be valid" do
465
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
466
+ scoped_model.should_not be_valid
467
+ scoped_model.overlap?(@span_model).should be_true
468
+ end
469
+ end
470
+ end
471
+
472
+ # -4 -3 -2 -1 +1 +2 +3 +4
473
+ # <---------------------------> TEST SPAN
474
+ # A |---|
475
+ # B |---------------|
476
+ # C |---------------------------|
477
+ # D |---|
478
+ # E |---------------|
479
+ # F |---|
480
+ # G |->
481
+ # H |->
482
+ # I |->
483
+ # J <-|
484
+ # K <-|
485
+ # L <-|
486
+ # M <--->
487
+ context "span_model.start_date.nil && span_model.end_date.nil" do
488
+ before(:each) do
489
+ @span_model = ScopedModel.create!(:start_date => nil, :end_date => nil)
490
+ end
491
+
492
+ context "A) start_date < span_model.start_date && end_date < span_model.start_date" do
493
+ it "should NOT be valid" do
494
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today - 3.days)
495
+ scoped_model.should_not be_valid
496
+ scoped_model.overlap?(@span_model).should be_true
497
+ end
498
+ end
499
+
500
+ context "B) start_date < span_model.start_date && end_date IN span" do
501
+ it "should NOT be valid" do
502
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 1.day)
503
+ scoped_model.should_not be_valid
504
+ scoped_model.overlap?(@span_model).should be_true
505
+ end
506
+ end
507
+
508
+ context "C) start_date < span_model.start_date && end_date > span_model.end_date" do
509
+ it "should NOT be valid" do
510
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => Date.today + 4.days)
511
+ scoped_model.should_not be_valid
512
+ scoped_model.overlap?(@span_model).should be_true
513
+ end
514
+ end
515
+
516
+ context "D) start_date IN span && end_date IN span" do
517
+ it "should NOT be valid" do
518
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 1.day)
519
+ scoped_model.should_not be_valid
520
+ scoped_model.overlap?(@span_model).should be_true
521
+ end
522
+ end
523
+
524
+ context "E) start_date IN span && end_date > span_model.end_date" do
525
+ it "should NOT be valid" do
526
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => Date.today + 4.day)
527
+ scoped_model.should_not be_valid
528
+ scoped_model.overlap?(@span_model).should be_true
529
+ end
530
+ end
531
+
532
+ context "F) start_date > span_model.end_date && end_date > span_model.end_date" do
533
+ it "should NOT be valid" do
534
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => Date.today + 4.days)
535
+ scoped_model.should_not be_valid
536
+ scoped_model.overlap?(@span_model).should be_true
537
+ end
538
+ end
539
+
540
+ context "G) start_date < span_model.start_date && end_date nil" do
541
+ it "should NOT be valid" do
542
+ scoped_model = ScopedModel.new(:start_date => Date.today - 4.days, :end_date => nil)
543
+ scoped_model.should_not be_valid
544
+ scoped_model.overlap?(@span_model).should be_true
545
+ end
546
+ end
547
+
548
+ context "H) start_date IN span && end_date nil" do
549
+ it "should NOT be valid" do
550
+ scoped_model = ScopedModel.new(:start_date => Date.today - 1.days, :end_date => nil)
551
+ scoped_model.should_not be_valid
552
+ scoped_model.overlap?(@span_model).should be_true
553
+ end
554
+ end
555
+
556
+ context "I) start_date > span_model.end_date && end_date nil" do
557
+ it "should NOT be valid" do
558
+ scoped_model = ScopedModel.new(:start_date => Date.today + 3.days, :end_date => nil)
559
+ scoped_model.should_not be_valid
560
+ scoped_model.overlap?(@span_model).should be_true
561
+ end
562
+ end
563
+
564
+ context "J) start_date nil && end_date > span_model.end_date" do
565
+ it "should NOT be valid" do
566
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 4.days)
567
+ scoped_model.should_not be_valid
568
+ scoped_model.overlap?(@span_model).should be_true
569
+ end
570
+ end
571
+
572
+ context "K) start_date nil && end_date IN span" do
573
+ it "should NOT be valid" do
574
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today + 1.day)
575
+ scoped_model.should_not be_valid
576
+ scoped_model.overlap?(@span_model).should be_true
577
+ end
578
+ end
579
+
580
+ context "L) start_date nil && end_date < span_model.start_date" do
581
+ it "should NOT be valid" do
582
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => Date.today - 3.days)
583
+ scoped_model.should_not be_valid
584
+ scoped_model.overlap?(@span_model).should be_true
585
+ end
586
+ end
587
+
588
+ context "M) start_date nil && end_date nil" do
589
+ it "should NOT be valid" do
590
+ scoped_model = ScopedModel.new(:start_date => nil, :end_date => nil)
591
+ scoped_model.should_not be_valid
592
+ scoped_model.overlap?(@span_model).should be_true
593
+ end
594
+ end
595
+ end
596
+ end
597
+ end