aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert2017-06-28 15:35:37 +0200
committerRobert2017-06-28 15:35:37 +0200
commitead1b30f0c38c247e6d80a32a894bfd9af4c2566 (patch)
treef089258bb7a446a99e08db5df61c4d276ff5ae94
parentf64246b8272a35731b3edba243b8d8e1898df1de (diff)
downloadchouette-core-ead1b30f0c38c247e6d80a32a894bfd9af4c2566.tar.bz2
Small refact and simplification of calendar model spex
-rw-r--r--spec/models/calendar/date_value_spec.rb35
-rw-r--r--spec/models/calendar/period_spec.rb68
2 files changed, 103 insertions, 0 deletions
diff --git a/spec/models/calendar/date_value_spec.rb b/spec/models/calendar/date_value_spec.rb
new file mode 100644
index 000000000..70dca3cc6
--- /dev/null
+++ b/spec/models/calendar/date_value_spec.rb
@@ -0,0 +1,35 @@
+RSpec.describe Calendar::DateValue, type: :model do
+ describe 'DateValue' do
+ subject { date_value }
+
+ def date_value(attributes = {})
+ @__date_values__ ||= Hash.new
+ @__date_values__.fetch(attributes) do
+ @__date_values__[attributes] = Calendar::DateValue.new(attributes)
+ end
+ end
+
+ it 'should support mark_for_destruction (required by cocoon)' do
+ date_value.mark_for_destruction
+ expect(date_value).to be_marked_for_destruction
+ end
+
+ it 'should support _destroy attribute (required by coocon)' do
+ date_value._destroy = true
+ expect(date_value).to be_marked_for_destruction
+ end
+
+ it 'should support new_record? (required by cocoon)' do
+ expect(Calendar::DateValue.new).to be_new_record
+ expect(date_value(id: 42)).not_to be_new_record
+ end
+
+ it 'should cast value as date attribute' do
+ expect(date_value(value: '2017-01-03').value).to eq(Date.new(2017,01,03))
+ end
+
+ it 'validates presence' do
+ is_expected.to validate_presence_of(:value)
+ end
+ end
+end
diff --git a/spec/models/calendar/period_spec.rb b/spec/models/calendar/period_spec.rb
new file mode 100644
index 000000000..233733cbf
--- /dev/null
+++ b/spec/models/calendar/period_spec.rb
@@ -0,0 +1,68 @@
+RSpec.describe Calendar::Period, type: :model do
+
+
+ subject { period }
+
+ def period(attributes = {})
+ @__period__ ||= {}
+ @__period__.fetch(attributes){
+ @__period__[attributes] = Calendar::Period.new(attributes)
+ }
+ end
+
+ it 'should support mark_for_destruction (required by cocoon)' do
+ period.mark_for_destruction
+ expect(period).to be_marked_for_destruction
+ end
+
+ it 'should support _destroy attribute (required by coocon)' do
+ period._destroy = true
+ expect(period).to be_marked_for_destruction
+ end
+
+ it 'should support new_record? (required by cocoon)' do
+ expect(Calendar::Period.new).to be_new_record
+ expect(period(id: 42)).not_to be_new_record
+ end
+
+ it 'should cast begin as date attribute' do
+ expect(period(begin: '2016-11-22').begin).to eq(Date.new(2016,11,22))
+ end
+
+ it 'should cast end as date attribute' do
+ expect(period(end: '2016-11-22').end).to eq(Date.new(2016,11,22))
+ end
+
+ it { is_expected.to validate_presence_of(:begin) }
+ it { is_expected.to validate_presence_of(:end) }
+
+ it 'should validate that end is greather than or equlals to begin' do
+ expect(period(begin: '2016-11-21', end: '2016-11-22')).to be_valid
+ expect(period(begin: '2016-11-21', end: '2016-11-21')).to_not be_valid
+ expect(period(begin: '2016-11-22', end: '2016-11-21')).to_not be_valid
+ end
+
+ describe 'intersect?' do
+ it 'should detect date in common with other date_ranges' do
+ november = period(begin: '2016-11-01', end: '2016-11-30')
+ mid_november_mid_december = period(begin: '2016-11-15', end: '2016-12-15')
+ expect(november.intersect?(mid_november_mid_december)).to be(true)
+ end
+
+ it 'should not intersect when no date is in common' do
+ november = period(begin: '2016-11-01', end: '2016-11-30')
+ december = period(begin: '2016-12-01', end: '2016-12-31')
+
+ expect(november.intersect?(december)).to be(false)
+
+ january = period(begin: '2017-01-01', end: '2017-01-31')
+ expect(november.intersect?(december, january)).to be(false)
+ end
+
+ it 'should not intersect itself' do
+ period = period(id: 42, begin: '2016-11-01', end: '2016-11-30')
+ expect(period.intersect?(period)).to be(false)
+ end
+
+ end
+end