aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/models/referential_metadata_spec.rb99
-rw-r--r--spec/models/referential_spec.rb35
2 files changed, 93 insertions, 41 deletions
diff --git a/spec/models/referential_metadata_spec.rb b/spec/models/referential_metadata_spec.rb
index e31caf8a1..50571ad85 100644
--- a/spec/models/referential_metadata_spec.rb
+++ b/spec/models/referential_metadata_spec.rb
@@ -36,49 +36,94 @@ RSpec.describe ReferentialMetadata, :type => :model do
end
- describe "#first_period" do
+ describe "Period" do
- let(:referential_metadata) { create :referential_metadata }
+ subject { period }
- describe "begin" do
- it "should return first period begin" do
- expect(referential_metadata.first_period_begin).to eq(referential_metadata.first_period.begin)
+ def period(attributes = {})
+ return @period if attributes.empty? and @period
+ ReferentialMetadata::Period.new(attributes).tap do |period|
+ @period = period if attributes.empty?
end
end
- describe "begin=" do
- let(:date) { Date.today }
- it "should change the first period begin" do
- referential_metadata.first_period_begin = date
- expect(referential_metadata.first_period_begin).to eq(date)
- end
+ it "should support mark_for_destruction (required by cocoon)" do
+ period.mark_for_destruction
+ expect(period).to be_marked_for_destruction
end
- describe "end" do
- it "should return first period end" do
- expect(referential_metadata.first_period_end).to eq(referential_metadata.first_period.end)
- end
+ it "should support _destroy attribute (required by coocon)" do
+ period._destroy = true
+ expect(period).to be_marked_for_destruction
end
- describe "end=" do
- let(:date) { Date.today }
- it "should change the first period end" do
- referential_metadata.first_period_end = date
- expect(referential_metadata.first_period_end).to eq(date)
- end
+ it "should support new_record? (required by cocoon)" do
+ expect(ReferentialMetadata::Period.new).to be_new_record
+ expect(period(id: 42)).not_to be_new_record
end
- describe "after_validation" do
- it "should define first_period with first_period_begin and first_period_end" do
- referential_metadata.first_period_begin = Date.today
- referential_metadata.first_period_end = Date.tomorrow
+ 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
- referential_metadata.valid?
+ it { is_expected.to validate_presence_of(:begin) }
+ it { is_expected.to validate_presence_of(:end) }
- expect(referential_metadata.first_period).to eq(Range.new(referential_metadata.first_period_begin, referential_metadata.first_period_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 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 periods" 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
+
+ describe "before_validation" do
+ let(:referential_metadata) do
+ create(:referential_metadata).tap do |metadata|
+ metadata.periodes = []
end
end
+ it "shoud fill periodes with period ranges" do
+ expected_ranges = [
+ Range.new(Date.today, Date.tomorrow)
+ ]
+ expected_ranges.each_with_index do |range, index|
+ referential_metadata.periods << ReferentialMetadata::Period.from_range(index, range)
+ end
+ referential_metadata.valid?
+
+ expect(referential_metadata.periodes).to eq(expected_ranges)
+ end
end
describe "#includes_lines" do
diff --git a/spec/models/referential_spec.rb b/spec/models/referential_spec.rb
index 2086f66d5..539af4db4 100644
--- a/spec/models/referential_spec.rb
+++ b/spec/models/referential_spec.rb
@@ -52,12 +52,16 @@ describe Referential, :type => :model do
"data_format"=>"neptune",
"metadatas_attributes"=> {
"0"=> {
- "first_period_begin(3i)"=>"19",
- "first_period_begin(2i)"=>"11",
- "first_period_begin(1i)"=>"2016",
- "first_period_end(3i)"=>"19",
- "first_period_end(2i)"=>"12",
- "first_period_end(1i)"=>"2016",
+ "periods_attributes" => {
+ "0" => {
+ "begin"=>"2016-09-19",
+ "end" => "2016-10-19",
+ },
+ "15918593" => {
+ "begin"=>"2016-11-19",
+ "end" => "2016-12-19",
+ },
+ },
"lines"=> [""] + lines.map { |l| l.id.to_s }
}
},
@@ -70,21 +74,24 @@ describe Referential, :type => :model do
let(:new_referential) { Referential.new(attributes) }
let(:first_metadata) { new_referential.metadatas.first }
- it "should create a metadata" do
- expect(new_referential.metadatas.size).to eq(1)
+ let(:expected_ranges) do
+ [
+ Range.new(Date.new(2016,9,19), Date.new(2016,10,19)),
+ Range.new(Date.new(2016,11,19), Date.new(2016,12,19)),
+ ]
end
- it "should define first_period_begin" do
- expect(first_metadata.first_period_begin).to eq(Date.new(2016,11,19))
+ it "should create a metadata" do
+ expect(new_referential.metadatas.size).to eq(1)
end
- it "should define first_period_end" do
- expect(first_metadata.first_period_end).to eq(Date.new(2016,12,19))
+ it "should define metadata periods" do
+ expect(first_metadata.periods.map(&:range)).to eq(expected_ranges)
end
- it "should define period" do
+ it "should define periodes" do
new_referential.save!
- expect(first_metadata.first_period).to eq(Range.new(Date.new(2016,11,19), Date.new(2016,12,19)))
+ expect(first_metadata.periodes).to eq(expected_ranges)
end
it "should define period" do