validates_overlap 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/.rubocop.yml +5 -0
- data/Gemfile +1 -1
- data/Gemfile.rails50 +5 -0
- data/README.md +16 -2
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/lib/validates_overlap/locale/es.yml +4 -0
- data/lib/validates_overlap/overlap_validator.rb +42 -38
- data/spec/dummy/app/models/active_meeting.rb +2 -2
- data/spec/dummy/app/models/end_overlap_meeting.rb +2 -2
- data/spec/dummy/app/models/meeting.rb +1 -1
- data/spec/dummy/app/models/position.rb +4 -4
- data/spec/dummy/app/models/secure_meeting.rb +1 -1
- data/spec/dummy/app/models/shift.rb +1 -1
- data/spec/dummy/app/models/start_end_overlap_meeting.rb +2 -2
- data/spec/dummy/app/models/start_overlap_meeting.rb +1 -1
- data/spec/dummy/app/models/time_slot.rb +4 -4
- data/spec/dummy/app/models/user_meeting.rb +1 -1
- data/spec/dummy/config/application.rb +7 -7
- data/spec/dummy/config/boot.rb +1 -1
- data/spec/dummy/config/environments/development.rb +1 -2
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/initializers/session_store.rb +1 -1
- data/spec/dummy/db/schema.rb +52 -54
- data/spec/dummy/spec/factories/position.rb +2 -2
- data/spec/dummy/spec/factories/user_meeting.rb +2 -2
- data/spec/dummy/spec/models/active_meetings_spec.rb +4 -10
- data/spec/dummy/spec/models/end_overlap_meeting_spec.rb +26 -29
- data/spec/dummy/spec/models/meeting_spec.rb +51 -47
- data/spec/dummy/spec/models/position_spec.rb +18 -28
- data/spec/dummy/spec/models/secure_meeting_spec.rb +5 -11
- data/spec/dummy/spec/models/shift_spec.rb +32 -33
- data/spec/dummy/spec/models/start_end_overlap_meeting_spec.rb +26 -29
- data/spec/dummy/spec/models/start_overlap_meeting_spec.rb +26 -29
- data/spec/dummy/spec/models/time_slot_spec.rb +21 -31
- data/spec/dummy/spec/models/user_meeting_spec.rb +16 -19
- data/spec/dummy/spec/models/user_spec.rb +3 -5
- data/spec/dummy/spec/overlap_validator_spec.rb +12 -14
- data/spec/spec_helper.rb +29 -20
- data/validates_overlap.gemspec +19 -16
- metadata +48 -2
@@ -2,42 +2,41 @@ require_relative '../../../spec_helper'
|
|
2
2
|
require_relative '../factories/shift'
|
3
3
|
|
4
4
|
describe Meeting do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
Shift.delete_all
|
9
|
-
end
|
10
|
-
|
11
|
-
it "create meeting" do
|
12
|
-
lambda {
|
5
|
+
context 'Validation' do
|
6
|
+
it 'create meeting' do
|
7
|
+
expect do
|
13
8
|
FactoryGirl.create(:shift)
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
it "is not valid if exists shift within wider range" do
|
18
|
-
shift = FactoryGirl.build(:shift, :starts_at => "2011-01-09".to_date, :ends_at => "2011-01-11".to_date)
|
19
|
-
shift.should_not be_valid
|
20
|
-
shift.errors[:starts_at].should_not be_empty
|
21
|
-
shift.errors[:ends_at].should be_empty
|
22
|
-
|
23
|
-
shift = FactoryGirl.build(:shift, :starts_at => "2011-01-01".to_date, :ends_at => "2011-01-04".to_date)
|
24
|
-
shift.should_not be_valid
|
25
|
-
shift.errors[:starts_at].should_not be_empty
|
26
|
-
shift.errors[:ends_at].should be_empty
|
9
|
+
end.to change(Shift, :count).by(1)
|
27
10
|
end
|
28
11
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
12
|
+
context 'validation with shift configuration' do
|
13
|
+
before do
|
14
|
+
FactoryGirl.create(:shift)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'is not valid if exists shift within wider range' do
|
18
|
+
shift = FactoryGirl.build(:shift, starts_at: '2011-01-09'.to_date, ends_at: '2011-01-11'.to_date)
|
19
|
+
expect(shift).not_to be_valid
|
20
|
+
expect(shift.errors[:starts_at]).not_to be_empty
|
21
|
+
expect(shift.errors[:ends_at]).to be_empty
|
22
|
+
|
23
|
+
shift = FactoryGirl.build(:shift, starts_at: '2011-01-01'.to_date, ends_at: '2011-01-04'.to_date)
|
24
|
+
expect(shift).not_to be_valid
|
25
|
+
expect(shift.errors[:starts_at]).not_to be_empty
|
26
|
+
expect(shift.errors[:ends_at]).to be_empty
|
27
|
+
end
|
28
|
+
|
29
|
+
it ' validate object which has not got overlap' do
|
30
|
+
shift = FactoryGirl.build(:shift, starts_at: '2011-01-10'.to_date, ends_at: '2011-01-11'.to_date)
|
31
|
+
expect(shift).to be_valid
|
32
|
+
expect(shift.errors[:starts_at]).to be_empty
|
33
|
+
expect(shift.errors[:ends_at]).to be_empty
|
34
|
+
|
35
|
+
shift = FactoryGirl.build(:shift, starts_at: '2011-01-01'.to_date, ends_at: '2011-01-02'.to_date)
|
36
|
+
expect(shift).to be_valid
|
37
|
+
expect(shift.errors[:starts_at]).to be_empty
|
38
|
+
expect(shift.errors[:ends_at]).to be_empty
|
39
|
+
end
|
39
40
|
end
|
40
|
-
|
41
41
|
end
|
42
|
-
|
43
42
|
end
|
@@ -2,51 +2,48 @@ require_relative '../../../spec_helper'
|
|
2
2
|
require_relative '../factories/start_end_overlap_meeting'
|
3
3
|
|
4
4
|
describe StartEndOverlapMeeting do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
it 'create meeting' do
|
6
|
+
expect do
|
7
|
+
FactoryGirl.create(:start_end_overlap_meeting)
|
8
|
+
end.to change(StartEndOverlapMeeting, :count).by(1)
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
context 'Validation with exclude edges starts_at, ends_at' do
|
12
|
+
before do
|
12
13
|
FactoryGirl.create(:start_end_overlap_meeting)
|
13
|
-
|
14
|
-
end
|
14
|
+
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
"starts at time of end and ends after" => ['2011-01-08'.to_date, '2011-01-19'.to_date]
|
16
|
+
@valid_times = {
|
17
|
+
'starts before and ends at time of start' => ['2011-01-03'.to_date, '2011-01-05'.to_date],
|
18
|
+
'starts at time of end and ends after' => ['2011-01-08'.to_date, '2011-01-19'.to_date]
|
20
19
|
}
|
21
20
|
|
22
21
|
@not_valid_times = {
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
22
|
+
'has same starts_at and ends_at' => ['2011-01-05'.to_date, '2011-01-08'.to_date],
|
23
|
+
'starts before starts_at and ends after ends_at' => ['2011-01-04'.to_date, '2011-01-09'.to_date],
|
24
|
+
'starts before starts_at and ends inside' => ['2011-01-04'.to_date, '2011-01-06'.to_date],
|
25
|
+
'starts inside and ends after ends_at' => ['2011-01-06'.to_date, '2011-01-09'.to_date],
|
26
|
+
'starts inside and ends inside' => ['2011-01-06'.to_date, '2011-01-07'.to_date],
|
27
|
+
'starts at same time and ends inside' => ['2011-01-05'.to_date, '2011-01-07'.to_date],
|
28
|
+
'starts inside and ends at same time' => ['2011-01-06'.to_date, '2011-01-08'.to_date]
|
29
|
+
}
|
31
30
|
|
32
31
|
@not_valid_times.each do |description, time_range|
|
33
32
|
it "is not valid if exists meeting which #{description}" do
|
34
|
-
meeting = FactoryGirl.build(:start_end_overlap_meeting, :
|
35
|
-
meeting.
|
36
|
-
meeting.errors[:starts_at].
|
37
|
-
meeting.errors[:ends_at].
|
33
|
+
meeting = FactoryGirl.build(:start_end_overlap_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
34
|
+
expect(meeting).not_to be_valid
|
35
|
+
expect(meeting.errors[:starts_at]).not_to be_empty
|
36
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
41
40
|
@valid_times.each do |description, time_range|
|
42
41
|
it "is valid if exists meeting which #{description}" do
|
43
|
-
meeting = FactoryGirl.build(:start_end_overlap_meeting, :
|
44
|
-
meeting.
|
45
|
-
meeting.errors[:starts_at].
|
46
|
-
meeting.errors[:ends_at].
|
42
|
+
meeting = FactoryGirl.build(:start_end_overlap_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
43
|
+
expect(meeting).to be_valid
|
44
|
+
expect(meeting.errors[:starts_at]).to be_empty
|
45
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
47
46
|
end
|
48
47
|
end
|
49
|
-
|
50
48
|
end
|
51
|
-
|
52
49
|
end
|
@@ -2,51 +2,48 @@ require_relative '../../../spec_helper'
|
|
2
2
|
require_relative '../factories/start_overlap_meeting'
|
3
3
|
|
4
4
|
describe StartOverlapMeeting do
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
it 'create meeting' do
|
6
|
+
expect do
|
7
|
+
FactoryGirl.create(:start_overlap_meeting)
|
8
|
+
end.to change(StartOverlapMeeting, :count).by(1)
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
context 'Validation with exclude edge starts_at' do
|
12
|
+
before do
|
12
13
|
FactoryGirl.create(:start_overlap_meeting)
|
13
|
-
|
14
|
-
end
|
14
|
+
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
"starts before and ends at time of start" => ['2011-01-03'.to_date, '2011-01-05'.to_date],
|
16
|
+
@valid_times = {
|
17
|
+
'starts before and ends at time of start' => ['2011-01-03'.to_date, '2011-01-05'.to_date]
|
19
18
|
}
|
20
19
|
|
21
20
|
@not_valid_times = {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
'has same starts_at and ends_at' => ['2011-01-05'.to_date, '2011-01-08'.to_date],
|
22
|
+
'starts before starts_at and ends after ends_at' => ['2011-01-04'.to_date, '2011-01-09'.to_date],
|
23
|
+
'starts before starts_at and ends inside' => ['2011-01-04'.to_date, '2011-01-06'.to_date],
|
24
|
+
'starts inside and ends after ends_at' => ['2011-01-06'.to_date, '2011-01-09'.to_date],
|
25
|
+
'starts inside and ends inside' => ['2011-01-06'.to_date, '2011-01-07'.to_date],
|
26
|
+
'starts at same time and ends inside' => ['2011-01-05'.to_date, '2011-01-07'.to_date],
|
27
|
+
'starts inside and ends at same time' => ['2011-01-06'.to_date, '2011-01-08'.to_date],
|
28
|
+
'starts at time of end and ends after' => ['2011-01-08'.to_date, '2011-01-19'.to_date]
|
29
|
+
}
|
31
30
|
|
32
31
|
@not_valid_times.each do |description, time_range|
|
33
32
|
it "is not valid if exists meeting which #{description}" do
|
34
|
-
meeting = FactoryGirl.build(:start_overlap_meeting, :
|
35
|
-
meeting.
|
36
|
-
meeting.errors[:starts_at].
|
37
|
-
meeting.errors[:ends_at].
|
33
|
+
meeting = FactoryGirl.build(:start_overlap_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
34
|
+
expect(meeting).not_to be_valid
|
35
|
+
expect(meeting.errors[:starts_at]).not_to be_empty
|
36
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
38
37
|
end
|
39
38
|
end
|
40
39
|
|
41
40
|
@valid_times.each do |description, time_range|
|
42
41
|
it "is valid if exists meeting which #{description}" do
|
43
|
-
meeting = FactoryGirl.build(:start_overlap_meeting, :
|
44
|
-
meeting.
|
45
|
-
meeting.errors[:starts_at].
|
46
|
-
meeting.errors[:ends_at].
|
42
|
+
meeting = FactoryGirl.build(:start_overlap_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
43
|
+
expect(meeting).to be_valid
|
44
|
+
expect(meeting.errors[:starts_at]).to be_empty
|
45
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
47
46
|
end
|
48
47
|
end
|
49
|
-
|
50
48
|
end
|
51
|
-
|
52
49
|
end
|
@@ -4,48 +4,38 @@ require_relative '../factories/time_slot'
|
|
4
4
|
require_relative '../factories/user'
|
5
5
|
|
6
6
|
describe TimeSlot do
|
7
|
-
|
8
|
-
|
9
|
-
Position.delete_all
|
10
|
-
TimeSlot.delete_all
|
11
|
-
User.delete_all
|
12
|
-
end
|
13
|
-
|
14
|
-
it "create time_slot" do
|
15
|
-
lambda {
|
7
|
+
it 'create time_slot' do
|
8
|
+
expect do
|
16
9
|
FactoryGirl.create(:time_slot)
|
17
|
-
|
10
|
+
end.to change(TimeSlot, :count).by(1)
|
18
11
|
end
|
19
12
|
|
20
|
-
context
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
time_slot2 = FactoryGirl.create(:time_slot, :starts_at => "2012-10-15".to_date, :ends_at => "2012-10-16".to_date)
|
13
|
+
context 'Validation with scope and association' do
|
14
|
+
it 'is not valid if exists time slot which have position with same person' do
|
15
|
+
time_slot1 = FactoryGirl.create(:time_slot, starts_at: '2012-10-11'.to_date, ends_at: '2012-10-13'.to_date)
|
16
|
+
time_slot2 = FactoryGirl.create(:time_slot, starts_at: '2012-10-15'.to_date, ends_at: '2012-10-16'.to_date)
|
25
17
|
user = FactoryGirl.create(:user)
|
26
18
|
user_2 = FactoryGirl.create(:user)
|
27
|
-
position1 = FactoryGirl.create(:position, :
|
28
|
-
position2 = FactoryGirl.create(:position, :
|
29
|
-
position3 = FactoryGirl.create(:position, :
|
19
|
+
position1 = FactoryGirl.create(:position, time_slot: time_slot1, user: user)
|
20
|
+
position2 = FactoryGirl.create(:position, time_slot: time_slot2, user: user)
|
21
|
+
position3 = FactoryGirl.create(:position, time_slot: time_slot2, user: user_2)
|
30
22
|
time_slot2.reload
|
31
|
-
time_slot2.starts_at =
|
32
|
-
time_slot2.
|
23
|
+
time_slot2.starts_at = '2012-10-12'.to_date
|
24
|
+
expect(time_slot2).not_to be_valid
|
33
25
|
|
34
|
-
time_slot2.errors[:base].
|
26
|
+
expect(time_slot2.errors[:base]).not_to be_empty
|
35
27
|
end
|
36
28
|
|
37
|
-
it
|
38
|
-
time_slot1 = FactoryGirl.create(:time_slot, :
|
39
|
-
time_slot2 = FactoryGirl.create(:time_slot, :
|
29
|
+
it 'is valid if exists time slot which have position with same person' do
|
30
|
+
time_slot1 = FactoryGirl.create(:time_slot, starts_at: '2012-10-11'.to_date, ends_at: '2012-10-13'.to_date)
|
31
|
+
time_slot2 = FactoryGirl.create(:time_slot, starts_at: '2012-10-14'.to_date, ends_at: '2012-10-16'.to_date)
|
40
32
|
user = FactoryGirl.create(:user)
|
41
|
-
position1 = FactoryGirl.create(:position, :
|
42
|
-
position2 = FactoryGirl.build(:position, :
|
33
|
+
position1 = FactoryGirl.create(:position, time_slot: time_slot1, user: user)
|
34
|
+
position2 = FactoryGirl.build(:position, time_slot: time_slot2, user: user)
|
43
35
|
|
44
|
-
time_slot2.starts_at =
|
45
|
-
time_slot2.
|
46
|
-
time_slot2.errors[:base].
|
36
|
+
time_slot2.starts_at = '2012-10-15'.to_date
|
37
|
+
expect(time_slot2).to be_valid
|
38
|
+
expect(time_slot2.errors[:base]).to be_empty
|
47
39
|
end
|
48
|
-
|
49
40
|
end
|
50
|
-
|
51
41
|
end
|
@@ -2,37 +2,34 @@ require_relative '../../../spec_helper'
|
|
2
2
|
require_relative '../factories/user_meeting'
|
3
3
|
|
4
4
|
describe UserMeeting do
|
5
|
-
|
6
|
-
|
7
|
-
UserMeeting.delete_all
|
8
|
-
end
|
9
|
-
|
10
|
-
it "create johns meeting" do
|
11
|
-
lambda {
|
5
|
+
it 'create johns meeting' do
|
6
|
+
expect do
|
12
7
|
FactoryGirl.create(:johns_meeting)
|
13
|
-
|
8
|
+
end.to change(UserMeeting, :count).by(1)
|
14
9
|
end
|
15
10
|
|
16
|
-
context
|
11
|
+
context 'Validation with scope' do
|
12
|
+
before do
|
13
|
+
FactoryGirl.create(:johns_meeting)
|
14
|
+
end
|
17
15
|
|
18
16
|
OVERLAP_TIME_RANGES.each do |description, time_range|
|
19
17
|
it "is not valid if exists johns meeting which #{description}" do
|
20
|
-
meeting = FactoryGirl.build(:johns_meeting, :
|
21
|
-
|
22
|
-
meeting.
|
23
|
-
meeting.errors[:
|
18
|
+
meeting = FactoryGirl.build(:johns_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
19
|
+
expect(UserMeeting.count).to eq 1
|
20
|
+
expect(meeting).not_to be_valid
|
21
|
+
expect(meeting.errors[:starts_at]).not_to be_empty
|
22
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
OVERLAP_TIME_RANGES.each do |description, time_range|
|
28
27
|
it "is valid if exists johns meeting which #{description}" do
|
29
|
-
meeting = FactoryGirl.build(:peters_meeting, :
|
30
|
-
meeting.
|
31
|
-
meeting.errors[:starts_at].
|
32
|
-
meeting.errors[:ends_at].
|
28
|
+
meeting = FactoryGirl.build(:peters_meeting, starts_at: time_range.first, ends_at: time_range.last)
|
29
|
+
expect(meeting).to be_valid
|
30
|
+
expect(meeting.errors[:starts_at]).to be_empty
|
31
|
+
expect(meeting.errors[:ends_at]).to be_empty
|
33
32
|
end
|
34
33
|
end
|
35
|
-
|
36
34
|
end
|
37
|
-
|
38
35
|
end
|
@@ -2,11 +2,9 @@ require_relative '../../../spec_helper'
|
|
2
2
|
require_relative '../factories/user'
|
3
3
|
|
4
4
|
describe User do
|
5
|
-
|
6
|
-
|
7
|
-
lambda{
|
5
|
+
it 'create user' do
|
6
|
+
expect do
|
8
7
|
FactoryGirl.create(:user)
|
9
|
-
|
8
|
+
end.to change(User, :count).by(1)
|
10
9
|
end
|
11
|
-
|
12
10
|
end
|
@@ -1,24 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
context "validation message" do
|
1
|
+
require 'spec_helper'
|
5
2
|
|
6
|
-
|
7
|
-
|
3
|
+
describe OverlapValidator do
|
4
|
+
context 'validation message' do
|
5
|
+
it 'should have default message' do
|
6
|
+
subject = OverlapValidator.new(attributes: [:starts_at, :ends_at])
|
8
7
|
meeting = Meeting.new
|
9
|
-
subject.
|
8
|
+
expect(subject).to receive(:overlapped_exists?) { true }
|
10
9
|
subject.validate(meeting)
|
11
|
-
meeting.errors[:starts_at].
|
10
|
+
expect(meeting.errors[:starts_at]).to eq ['overlaps with another record']
|
12
11
|
end
|
13
12
|
|
14
|
-
it
|
15
|
-
subject = OverlapValidator.new(
|
13
|
+
it 'should be possible to configure message' do
|
14
|
+
subject = OverlapValidator.new(attributes: [:starts_at, :ends_at])
|
16
15
|
meeting = Meeting.new
|
17
|
-
subject.
|
18
|
-
subject.
|
16
|
+
expect(subject).to receive(:overlapped_exists?) { true }
|
17
|
+
allow(subject).to receive(:options) { { message_title: :optional_key, message_content: 'Message content' } }
|
19
18
|
subject.validate(meeting)
|
20
|
-
meeting.errors[:optional_key].
|
19
|
+
expect(meeting.errors[:optional_key]).to eq ['Message content']
|
21
20
|
end
|
22
|
-
|
23
21
|
end
|
24
22
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,29 +1,26 @@
|
|
1
1
|
# Configure Rails Envinronment
|
2
|
-
ENV[
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
3
3
|
|
4
|
-
require File.expand_path(
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
4
|
+
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
5
|
+
require 'rails/test_help'
|
6
|
+
require 'rspec/rails'
|
7
|
+
require 'factory_girl_rails'
|
8
|
+
require 'database_cleaner'
|
8
9
|
require 'pry'
|
9
10
|
|
10
|
-
|
11
11
|
ActionMailer::Base.delivery_method = :test
|
12
12
|
ActionMailer::Base.perform_deliveries = false
|
13
|
-
ActionMailer::Base.default_url_options[:host] =
|
13
|
+
ActionMailer::Base.default_url_options[:host] = 'test.com'
|
14
14
|
|
15
15
|
Rails.backtrace_cleaner.remove_silencers!
|
16
16
|
|
17
|
-
|
18
17
|
# Run any available migration
|
19
|
-
ActiveRecord::Migrator.migrate File.expand_path(
|
18
|
+
ActiveRecord::Migrator.migrate File.expand_path('../dummy/db/migrate/', __FILE__)
|
20
19
|
|
21
20
|
# Load support files
|
22
21
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
23
22
|
|
24
23
|
RSpec.configure do |config|
|
25
|
-
|
26
|
-
|
27
24
|
# Remove this line if you don't want RSpec's should and should_not
|
28
25
|
# methods or matchers
|
29
26
|
require 'rspec/expectations'
|
@@ -31,16 +28,28 @@ RSpec.configure do |config|
|
|
31
28
|
|
32
29
|
# == Mock Framework
|
33
30
|
config.mock_with :rspec
|
31
|
+
config.infer_spec_type_from_file_location!
|
32
|
+
|
33
|
+
config.before(:suite) do
|
34
|
+
DatabaseCleaner.strategy = :transaction
|
35
|
+
DatabaseCleaner.clean_with(:truncation)
|
36
|
+
end
|
37
|
+
|
38
|
+
config.around(:each) do |example|
|
39
|
+
DatabaseCleaner.cleaning do
|
40
|
+
example.run
|
41
|
+
end
|
42
|
+
end
|
34
43
|
end
|
35
44
|
|
36
45
|
OVERLAP_TIME_RANGES = {
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
+
'has same starts_at and ends_at' => ['2011-01-05'.to_date, '2011-01-08'.to_date],
|
47
|
+
'starts before starts_at and ends after ends_at' => ['2011-01-04'.to_date, '2011-01-09'.to_date],
|
48
|
+
'starts before starts_at and ends inside' => ['2011-01-04'.to_date, '2011-01-06'.to_date],
|
49
|
+
'starts inside and ends after ends_at' => ['2011-01-06'.to_date, '2011-01-09'.to_date],
|
50
|
+
'starts inside and ends inside' => ['2011-01-06'.to_date, '2011-01-07'.to_date],
|
51
|
+
'starts at same time and ends inside' => ['2011-01-05'.to_date, '2011-01-07'.to_date],
|
52
|
+
'starts inside and ends at same time' => ['2011-01-06'.to_date, '2011-01-08'.to_date],
|
53
|
+
'starts before and ends at time of start' => ['2011-01-03'.to_date, '2011-01-05'.to_date],
|
54
|
+
'starts at time of end and ends after' => ['2011-01-08'.to_date, '2011-01-19'.to_date]
|
46
55
|
}
|