diff options
| author | Zog | 2018-01-19 08:22:24 +0100 | 
|---|---|---|
| committer | Zog | 2018-02-02 14:31:32 +0100 | 
| commit | c13c94fe665fdbe2c434c8bfadd44a0988ecea60 (patch) | |
| tree | cbf70b0af9dd0bbbe4129384adcf5db39117fe33 /spec/services/referential_overview_spec.rb | |
| parent | 9f30b2debe7ece403d9e588df9763c119436d967 (diff) | |
| download | chouette-core-c13c94fe665fdbe2c434c8bfadd44a0988ecea60.tar.bz2 | |
Refs #3542 @4h; First UI
Still missing:
- Pagination
- Filters
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..39a90360a --- /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} + +  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.width).to eq ReferentialOverview::Day::WIDTH * 1 +    end +  end +end | 
