diff options
Diffstat (limited to 'spec/services/referential_overview_spec.rb')
| -rw-r--r-- | spec/services/referential_overview_spec.rb | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/spec/services/referential_overview_spec.rb b/spec/services/referential_overview_spec.rb new file mode 100644 index 000000000..0ce29643c --- /dev/null +++ b/spec/services/referential_overview_spec.rb @@ -0,0 +1,154 @@ +RSpec.describe ReferentialOverview do + + subject{ described_class } + +end + +RSpec.describe ReferentialOverview::Week do + + describe "#initialize" do + it "should respect the boundary" do + week = ReferentialOverview::Week.new(Time.now.beginning_of_week, 1.week.from_now, {}) + expect(week.start_date).to eq Time.now.beginning_of_week.to_date + expect(week.end_date).to eq Time.now.end_of_week.to_date + + week = ReferentialOverview::Week.new(Time.now.beginning_of_week, Time.now, {}) + expect(week.start_date).to eq Time.now.beginning_of_week.to_date + expect(week.end_date).to eq Time.now.to_date + end + end +end + +RSpec.describe ReferentialOverview::Line do + + let(:ref_line){create(:line)} + let(:referential){create(:referential)} + let(:start){2.days.ago} + let(:period_1){(10.days.ago..8.days.ago)} + let(:period_2){(5.days.ago..1.days.ago)} + + subject(:line){ReferentialOverview::Line.new ref_line, referential, start, {}} + + before(:each) do + create(:referential_metadata, referential: referential, line_ids: [ref_line.id], periodes: [period_1, period_2].compact) + end + + describe "#width" do + it "should have the right value" do + expect(line.width).to eq ReferentialOverview::Day::WIDTH * referential.metadatas_period.count + end + end + + describe "#periods" do + context "when the periodes are split into several metadatas" do + let(:period_2){nil} + before do + create(:referential_metadata, referential: referential, line_ids: [ref_line.id], periodes: [(17.days.ago..11.days.ago)]) + end + it "should find them all" do + expect(line.periods.count).to eq 2 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[1].empty?).to be_falsy + end + + context "when the periodes overlap" do + let(:period_2){nil} + before do + create(:referential_metadata, referential: referential, line_ids: [ref_line.id], periodes: [(17.days.ago..9.days.ago)]) + end + it "should merge them" do + expect(line.periods.count).to eq 1 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[0].start).to eq 17.days.ago.to_date + expect(line.periods[0].end).to eq 8.days.ago.to_date + end + end + end + end + + describe "#fill_periods" do + it "should fill the voids" do + expect(line.periods.count).to eq 3 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[1].empty?).to be_truthy + expect(line.periods[1].accepted?).to be_truthy + expect(line.periods[2].empty?).to be_falsy + end + + context "with no void" do + let(:period_1){(10.days.ago..8.days.ago)} + let(:period_2){(7.days.ago..1.days.ago)} + + it "should find no void" do + expect(line.periods.count).to eq 2 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[1].empty?).to be_falsy + end + end + + context "with a large void" do + let(:period_1){(20.days.ago..19.days.ago)} + let(:period_2){(2.days.ago..1.days.ago)} + + it "should fill the void" do + expect(line.periods.count).to eq 3 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[1].empty?).to be_truthy + expect(line.periods[1].accepted?).to be_falsy + expect(line.periods[2].empty?).to be_falsy + end + end + + context "with a void at the end" do + before do + create(:referential_metadata, referential: referential, periodes: [(2.days.ago..1.days.ago)]) + end + let(:period_1){(20.days.ago..19.days.ago)} + let(:period_2){nil} + + it "should fill the void" do + expect(line.periods.count).to eq 2 + expect(line.periods[0].empty?).to be_falsy + expect(line.periods[1].empty?).to be_truthy + expect(line.periods[1].accepted?).to be_falsy + expect(line.periods[1].end).to eq 1.days.ago.to_date + end + end + + context "with a void at the beginning" do + before do + create(:referential_metadata, referential: referential, periodes: [(200.days.ago..199.days.ago)]) + end + let(:period_1){(20.days.ago..19.days.ago)} + let(:period_2){nil} + + it "should fill the void" do + expect(line.periods.count).to eq 2 + expect(line.periods[0].start).to eq 200.days.ago.to_date + expect(line.periods[0].empty?).to be_truthy + expect(line.periods[0].accepted?).to be_falsy + expect(line.periods[1].empty?).to be_falsy + end + end + end +end + +RSpec.describe ReferentialOverview::Line::Period do + + let(:period){(1.day.ago.to_date..Time.now.to_date)} + let(:start){2.days.ago.to_date} + + subject(:line_period){ReferentialOverview::Line::Period.new period, start, nil} + + describe "#width" do + it "should have the right value" do + expect(line_period.width).to eq ReferentialOverview::Day::WIDTH * 2 + end + end + + describe "#left" do + it "should have the right value" do + expect(line_period.left).to eq ReferentialOverview::Day::WIDTH * 1 + end + end +end |
