aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorRobert2017-05-15 16:37:30 +0200
committerRobert2017-05-15 16:37:30 +0200
commit73a8df07f7e05448d1dd9969539601b128840fb2 (patch)
treebfefbeed28175b68e96bfd28087810d0bc55ae87 /spec
parenta0eb6ea4e8f3ae56a691820a50958a4acf92bcb5 (diff)
parent2c32ac2a3372dfaee531734d3cf94f6b522b7c1b (diff)
downloadchouette-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.rb11
-rw-r--r--spec/models/calendar_spec.rb16
-rw-r--r--spec/models/chouette/time_table_spec.rb67
-rw-r--r--spec/models/chouette/vehicle_journey_spec.rb59
-rw-r--r--spec/models/time_table_combination_spec.rb22
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