diff options
| author | Robert | 2017-05-15 16:37:30 +0200 |
|---|---|---|
| committer | Robert | 2017-05-15 16:37:30 +0200 |
| commit | 73a8df07f7e05448d1dd9969539601b128840fb2 (patch) | |
| tree | bfefbeed28175b68e96bfd28087810d0bc55ae87 /spec | |
| parent | a0eb6ea4e8f3ae56a691820a50958a4acf92bcb5 (diff) | |
| parent | 2c32ac2a3372dfaee531734d3cf94f6b522b7c1b (diff) | |
| download | chouette-core-73a8df07f7e05448d1dd9969539601b128840fb2.tar.bz2 | |
Merge branch 'master' of github.com:af83/stif-boiv
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/factories/chouette_vehicle_journey.rb | 11 | ||||
| -rw-r--r-- | spec/models/calendar_spec.rb | 16 | ||||
| -rw-r--r-- | spec/models/chouette/time_table_spec.rb | 67 | ||||
| -rw-r--r-- | spec/models/chouette/vehicle_journey_spec.rb | 59 | ||||
| -rw-r--r-- | spec/models/time_table_combination_spec.rb | 22 |
5 files changed, 130 insertions, 45 deletions
diff --git a/spec/factories/chouette_vehicle_journey.rb b/spec/factories/chouette_vehicle_journey.rb index 9ba660800..452909f23 100644 --- a/spec/factories/chouette_vehicle_journey.rb +++ b/spec/factories/chouette_vehicle_journey.rb @@ -11,13 +11,18 @@ FactoryGirl.define do end factory :vehicle_journey do - after(:create) do |vehicle_journey| + transient do + stop_arrival_time '01:00:00' + stop_departure_time '03:00:00' + end + + after(:create) do |vehicle_journey, evaluator| vehicle_journey.journey_pattern.stop_points.each_with_index do |stop_point, index| vehicle_journey.vehicle_journey_at_stops << create(:vehicle_journey_at_stop, :vehicle_journey => vehicle_journey, :stop_point => stop_point, - :arrival_time => '2000-01-01 01:00:00 UTC', - :departure_time => '2000-01-01 03:00:00 UTC') + :arrival_time => "2000-01-01 #{evaluator.stop_arrival_time} UTC", + :departure_time => "2000-01-01 #{evaluator.stop_departure_time} UTC") end end diff --git a/spec/models/calendar_spec.rb b/spec/models/calendar_spec.rb index 36981961f..33d9676cd 100644 --- a/spec/models/calendar_spec.rb +++ b/spec/models/calendar_spec.rb @@ -9,6 +9,18 @@ RSpec.describe Calendar, :type => :model do it { is_expected.to validate_presence_of(:short_name) } it { is_expected.to validate_uniqueness_of(:short_name) } + describe '#to_time_table' do + let(:calendar) { create(:calendar, date_ranges: [Date.today..(Date.today + 1.month)]) } + + it 'should convert calendar to an instance of Chouette::TimeTable' do + time_table = calendar.convert_to_time_table + expect(time_table).to be_an_instance_of(Chouette::TimeTable) + expect(time_table.periods[0].period_start).to eq(calendar.date_ranges[0].begin) + expect(time_table.periods[0].period_end).to eq(calendar.date_ranges[0].end) + expect(time_table.dates.map(&:date)).to match_array(calendar.dates) + end + end + describe 'validations' do it 'validates that dates and date_ranges do not overlap' do calendar = build(:calendar, dates: [Date.today], date_ranges: [Date.today..Date.tomorrow]) @@ -69,7 +81,6 @@ RSpec.describe Calendar, :type => :model do 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') @@ -111,7 +122,6 @@ RSpec.describe Calendar, :type => :model do end describe 'DateValue' do - subject { date_value } def date_value(attributes = {}) @@ -141,8 +151,6 @@ RSpec.describe Calendar, :type => :model do end it { is_expected.to validate_presence_of(:value) } - end - end diff --git a/spec/models/chouette/time_table_spec.rb b/spec/models/chouette/time_table_spec.rb index 1d0fa8585..505ca12be 100644 --- a/spec/models/chouette/time_table_spec.rb +++ b/spec/models/chouette/time_table_spec.rb @@ -1198,6 +1198,7 @@ end expect(subject.dates[2].date).to eq(Date.new(2014,7,20)) end end + context "timetable with dates against timetable with dates and periods all covered" do before do subject.periods.clear @@ -1218,12 +1219,15 @@ end subject.disjoin! another_tt subject.reload end + it "should have 0 result periods" do expect(subject.periods.size).to eq(0) end + it "should have no remained day_types" do subject.int_day_types == 0 end + it "should have 0 dates left" do expect(subject.dates.size).to eq(0) end @@ -1243,12 +1247,15 @@ end subject.disjoin! another_tt subject.reload end + it "should have 0 result periods" do expect(subject.periods.size).to eq(0) end + it "should have 0 day_types" do expect(subject.int_day_types).to eq(0) end + it "should have 6 dates " do expect(subject.dates.size).to eq(6) expect(subject.dates[0].date).to eq(Date.new(2014,8,11)) @@ -1274,24 +1281,26 @@ end subject.disjoin! another_tt subject.reload end - it "should have 0 result periods" do - expect(subject.periods.size).to eq(0) + + it "should have 3 result periods" do + expect(subject.periods.size).to eq(3) + [ + ['2014-08-11', '2014-08-13'], + ['2014-08-18', '2014-08-20'], + ['2014-08-25', '2014-08-27'] + ].each_with_index do |period, index| + expect(subject.periods[index].period_start.to_s).to eq(period[0]) + expect(subject.periods[index].period_end.to_s).to eq(period[1]) + end end + it "should have 0 day_types" do expect(subject.int_day_types).to eq(0) end - it "should have 10 dates " do - expect(subject.dates.size).to eq(10) - expect(subject.dates[0].date).to eq(Date.new(2014,8,6)) - expect(subject.dates[1].date).to eq(Date.new(2014,8,11)) - expect(subject.dates[2].date).to eq(Date.new(2014,8,12)) - expect(subject.dates[3].date).to eq(Date.new(2014,8,13)) - expect(subject.dates[4].date).to eq(Date.new(2014,8,18)) - expect(subject.dates[5].date).to eq(Date.new(2014,8,19)) - expect(subject.dates[6].date).to eq(Date.new(2014,8,20)) - expect(subject.dates[7].date).to eq(Date.new(2014,8,25)) - expect(subject.dates[8].date).to eq(Date.new(2014,8,26)) - expect(subject.dates[9].date).to eq(Date.new(2014,8,27)) + + it "should have 1 dates " do + expect(subject.dates.size).to eq(1) + expect(subject.dates.first.date.to_s).to eq('2014-08-06') end end @@ -1311,24 +1320,26 @@ end subject.disjoin! another_tt subject.reload end - it "should have same 0 result periods" do - expect(subject.periods.size).to eq(0) + + it "should have same 3 result periods" do + expect(subject.periods.size).to eq(3) + [ + ['2014-08-11', '2014-08-13'], + ['2014-08-18', '2014-08-20'], + ['2014-08-25', '2014-08-27'] + ].each_with_index do |period, index| + expect(subject.periods[index].period_start.to_s).to eq(period[0]) + expect(subject.periods[index].period_end.to_s).to eq(period[1]) + end end + it "should have 0 day_types" do expect(subject.int_day_types).to eq(0) end - it "should have only 10 dates " do - expect(subject.dates.size).to eq(10) - expect(subject.dates[0].date).to eq(Date.new(2014,8,6)) - expect(subject.dates[1].date).to eq(Date.new(2014,8,11)) - expect(subject.dates[2].date).to eq(Date.new(2014,8,12)) - expect(subject.dates[3].date).to eq(Date.new(2014,8,13)) - expect(subject.dates[4].date).to eq(Date.new(2014,8,18)) - expect(subject.dates[5].date).to eq(Date.new(2014,8,19)) - expect(subject.dates[6].date).to eq(Date.new(2014,8,20)) - expect(subject.dates[7].date).to eq(Date.new(2014,8,25)) - expect(subject.dates[8].date).to eq(Date.new(2014,8,26)) - expect(subject.dates[9].date).to eq(Date.new(2014,8,27)) + + it "should have only 1 dates " do + expect(subject.dates.size).to eq(1) + expect(subject.dates.first.date.to_s).to eq('2014-08-06') end end diff --git a/spec/models/chouette/vehicle_journey_spec.rb b/spec/models/chouette/vehicle_journey_spec.rb index b22183ab6..7f2305134 100644 --- a/spec/models/chouette/vehicle_journey_spec.rb +++ b/spec/models/chouette/vehicle_journey_spec.rb @@ -197,7 +197,7 @@ describe Chouette::VehicleJourney, :type => :model do expect(vehicle_journey.reload.vehicle_journey_at_stops).to be_empty at_stops = vehicle_journey.reload.vehicle_journey_at_stops_matrix - at_stops.map{|stop| expect(stop.stop_point_id).to be_nil } + at_stops.map{|stop| expect(stop.id).to be_nil } expect(at_stops.count).to eq route.stop_points.count end @@ -284,7 +284,7 @@ describe Chouette::VehicleJourney, :type => :model do first stop that they make" do journey_missing_stop = create(:vehicle_journey) journey_early = create( - :vehicle_journey, + :vehicle_journey, route: journey_missing_stop.route, journey_pattern: journey_missing_stop.journey_pattern ) @@ -310,6 +310,61 @@ describe Chouette::VehicleJourney, :type => :model do end end + describe ".departure_time_between" do + it "selects vehicle journeys whose departure times are between the + specified range" do + journey_early = create( + :vehicle_journey, + stop_departure_time: '02:00:00' + ) + + route = journey_early.route + journey_pattern = journey_early.journey_pattern + + journey_middle = create( + :vehicle_journey, + route: route, + journey_pattern: journey_pattern, + stop_departure_time: '03:00:00' + ) + journey_late = create( + :vehicle_journey, + route: route, + journey_pattern: journey_pattern, + stop_departure_time: '04:00:00' + ) + + expect(route + .vehicle_journeys + .select('DISTINCT "vehicle_journeys".*') + .joins(' + LEFT JOIN "vehicle_journey_at_stops" + ON "vehicle_journey_at_stops"."vehicle_journey_id" = + "vehicle_journeys"."id" + ') + .where_departure_time_between('02:30', '03:30') + .to_a + ).to eq([journey_middle]) + end + + it "can include vehicle journeys that have nil stops" do + journey = create(:vehicle_journey_empty) + route = journey.route + + expect(route + .vehicle_journeys + .select('DISTINCT "vehicle_journeys".*') + .joins(' + LEFT JOIN "vehicle_journey_at_stops" + ON "vehicle_journey_at_stops"."vehicle_journey_id" = + "vehicle_journeys"."id" + ') + .where_departure_time_between('02:30', '03:30', allow_empty: true) + .to_a + ).to eq([journey]) + end + end + subject { create(:vehicle_journey_odd) } describe "in_relation_to_a_journey_pattern methods" do let!(:route) { create(:route)} diff --git a/spec/models/time_table_combination_spec.rb b/spec/models/time_table_combination_spec.rb index 4c99a14fa..059fe9e81 100644 --- a/spec/models/time_table_combination_spec.rb +++ b/spec/models/time_table_combination_spec.rb @@ -54,6 +54,7 @@ describe TimeTableCombination, :type => :model do subject.combine source.reload end + it "should add combined to source" do expect(source.periods.size).to eq(1) expect(source.periods[0].period_start).to eq(Date.new(2014,8,1)) @@ -78,14 +79,17 @@ describe TimeTableCombination, :type => :model do subject.combine source.reload end + it "should intersect combined to source" do expect(source.int_day_types).to eq(0) - expect(source.periods.size).to eq(0) - expect(source.dates.size).to eq(17) - expect(source.dates[0].date).to eq(Date.new(2014,8,15)) - expect(source.dates[16].date).to eq(Date.new(2014,8,31)) + expect(source.periods.size).to eq(1) + expect(source.dates.size).to eq(0) + + expect(source.periods.first.period_start.to_s).to eq('2014-08-15') + expect(source.periods.first.period_end.to_s).to eq('2014-08-31') end end + context "when operation is disjoin" do before(:each) do source.periods.clear @@ -104,12 +108,14 @@ describe TimeTableCombination, :type => :model do subject.combine source.reload end + it "should disjoin combined to source" do expect(source.int_day_types).to eq(0) - expect(source.periods.size).to eq(0) - expect(source.dates.size).to eq(14) - expect(source.dates[0].date).to eq(Date.new(2014,8,1)) - expect(source.dates[13].date).to eq(Date.new(2014,8,14)) + expect(source.periods.size).to eq(1) + expect(source.dates.size).to eq(0) + + expect(source.periods.first.period_start.to_s).to eq('2014-08-01') + expect(source.periods.first.period_end.to_s).to eq('2014-08-14') end end end |
