ninoxe 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/README.md +1 -1
  2. data/db/migrate/20130710122648_set_accessibiliity_to_existing_stop_area.rb +4 -9
  3. data/lib/ninoxe/version.rb +1 -1
  4. metadata +87 -201
  5. data/app/models/chouette/mobility_need.rb +0 -4
  6. data/app/models/chouette/suitability.rb +0 -5
  7. data/spec/dummy/README.rdoc +0 -261
  8. data/spec/dummy/Rakefile +0 -6
  9. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  10. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  11. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  12. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  13. data/spec/dummy/app/mailers/.gitkeep +0 -0
  14. data/spec/dummy/app/models/.gitkeep +0 -0
  15. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  16. data/spec/dummy/config/application.rb +0 -56
  17. data/spec/dummy/config/boot.rb +0 -10
  18. data/spec/dummy/config/database.yml +0 -9
  19. data/spec/dummy/config/environment.rb +0 -7
  20. data/spec/dummy/config/environments/development.rb +0 -37
  21. data/spec/dummy/config/environments/production.rb +0 -67
  22. data/spec/dummy/config/environments/test.rb +0 -37
  23. data/spec/dummy/config/initializers/active_record.rb +0 -2
  24. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  25. data/spec/dummy/config/initializers/inflections.rb +0 -15
  26. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  27. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  28. data/spec/dummy/config/initializers/session_store.rb +0 -8
  29. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  30. data/spec/dummy/config/locales/en.yml +0 -5
  31. data/spec/dummy/config/routes.rb +0 -4
  32. data/spec/dummy/config.ru +0 -4
  33. data/spec/dummy/db/test.sqlite3 +0 -0
  34. data/spec/dummy/lib/assets/.gitkeep +0 -0
  35. data/spec/dummy/log/.gitkeep +0 -0
  36. data/spec/dummy/public/404.html +0 -26
  37. data/spec/dummy/public/422.html +0 -26
  38. data/spec/dummy/public/500.html +0 -25
  39. data/spec/dummy/public/favicon.ico +0 -0
  40. data/spec/dummy/script/rails +0 -6
  41. data/spec/models/chouette/access_link_spec.rb +0 -78
  42. data/spec/models/chouette/access_point_spec.rb +0 -193
  43. data/spec/models/chouette/active_record_spec.rb +0 -121
  44. data/spec/models/chouette/area_type_spec.rb +0 -53
  45. data/spec/models/chouette/company_spec.rb +0 -51
  46. data/spec/models/chouette/connection_link_spec.rb +0 -56
  47. data/spec/models/chouette/direction_spec.rb +0 -60
  48. data/spec/models/chouette/exporter_spec.rb +0 -28
  49. data/spec/models/chouette/file_validator_spec.rb +0 -28
  50. data/spec/models/chouette/group_of_line_spec.rb +0 -31
  51. data/spec/models/chouette/journey_pattern_spec.rb +0 -62
  52. data/spec/models/chouette/line_spec.rb +0 -106
  53. data/spec/models/chouette/loader_spec.rb +0 -69
  54. data/spec/models/chouette/network_spec.rb +0 -22
  55. data/spec/models/chouette/object_id_spec.rb +0 -146
  56. data/spec/models/chouette/route_spec.rb +0 -159
  57. data/spec/models/chouette/stop_area_spec.rb +0 -354
  58. data/spec/models/chouette/stop_point_spec.rb +0 -39
  59. data/spec/models/chouette/time_table_spec.rb +0 -372
  60. data/spec/models/chouette/transport_mode_spec.rb +0 -64
  61. data/spec/models/chouette/vehicle_journey_at_stop_spec.rb +0 -46
  62. data/spec/models/chouette/vehicle_journey_spec.rb +0 -204
  63. data/spec/presenters/chouette/geometry/general_presenter.rb +0 -1
  64. data/spec/presenters/chouette/geometry/line_presenter_spec.rb +0 -13
  65. data/spec/spec_helper.rb +0 -45
@@ -1,372 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chouette::TimeTable do
4
-
5
- subject { Factory(:time_table) }
6
-
7
- it { should validate_presence_of :comment }
8
- it { should validate_uniqueness_of :objectid }
9
-
10
- describe "#periods_max_date" do
11
- context "when all period extends from 04/10/2013 to 04/15/2013," do
12
- before(:each) do
13
- p1 = Chouette::TimeTablePeriod.new( :period_start => Date.strptime("04/10/2013", '%m/%d/%Y'), :period_end => Date.strptime("04/12/2013", '%m/%d/%Y'))
14
- p2 = Chouette::TimeTablePeriod.new( :period_start => Date.strptime("04/13/2013", '%m/%d/%Y'), :period_end => Date.strptime("04/15/2013", '%m/%d/%Y'))
15
- subject.periods = [ p1, p2]
16
- subject.save
17
- end
18
-
19
- it "should retreive 04/15/2013" do
20
- subject.periods_max_date.should == Date.strptime("04/15/2013", '%m/%d/%Y')
21
- end
22
- context "when day_types select only sunday and saturday," do
23
- before(:each) do
24
- # jeudi, vendredi
25
- subject.update_attributes( :int_day_types => (2**(1+6) + 2**(1+7)))
26
- end
27
- it "should retreive 04/14/2013" do
28
- subject.periods_max_date.should == Date.strptime("04/14/2013", '%m/%d/%Y')
29
- end
30
- end
31
- context "when day_types select only friday," do
32
- before(:each) do
33
- # jeudi, vendredi
34
- subject.update_attributes( :int_day_types => (2**(1+6)))
35
- end
36
- it "should retreive 04/12/2013" do
37
- subject.periods_max_date.should == Date.strptime("04/13/2013", '%m/%d/%Y')
38
- end
39
- end
40
- context "when day_types select only thursday," do
41
- before(:each) do
42
- # mardi
43
- subject.update_attributes( :int_day_types => (2**(1+2)))
44
- end
45
- it "should retreive 04/12/2013" do
46
- # 04/15/2013 is monday !
47
- subject.periods_max_date.should be_nil
48
- end
49
- end
50
- end
51
- end
52
- describe "#periods_min_date" do
53
- context "when all period extends from 04/10/2013 to 04/15/2013," do
54
- before(:each) do
55
- p1 = Chouette::TimeTablePeriod.new( :period_start => Date.strptime("04/10/2013", '%m/%d/%Y'), :period_end => Date.strptime("04/12/2013", '%m/%d/%Y'))
56
- p2 = Chouette::TimeTablePeriod.new( :period_start => Date.strptime("04/13/2013", '%m/%d/%Y'), :period_end => Date.strptime("04/15/2013", '%m/%d/%Y'))
57
- subject.periods = [ p1, p2]
58
- subject.save
59
- end
60
-
61
- it "should retreive 04/10/2013" do
62
- subject.periods_min_date.should == Date.strptime("04/10/2013", '%m/%d/%Y')
63
- end
64
- context "when day_types select only tuesday and friday," do
65
- before(:each) do
66
- # jeudi, vendredi
67
- subject.update_attributes( :int_day_types => (2**(1+4) + 2**(1+5)))
68
- end
69
- it "should retreive 04/11/2013" do
70
- subject.periods_min_date.should == Date.strptime("04/11/2013", '%m/%d/%Y')
71
- end
72
- end
73
- context "when day_types select only friday," do
74
- before(:each) do
75
- # jeudi, vendredi
76
- subject.update_attributes( :int_day_types => (2**(1+5)))
77
- end
78
- it "should retreive 04/12/2013" do
79
- subject.periods_min_date.should == Date.strptime("04/12/2013", '%m/%d/%Y')
80
- end
81
- end
82
- context "when day_types select only thursday," do
83
- before(:each) do
84
- # mardi
85
- subject.update_attributes( :int_day_types => (2**(1+2)))
86
- end
87
- it "should retreive 04/12/2013" do
88
- # 04/15/2013 is monday !
89
- subject.periods_min_date.should be_nil
90
- end
91
- end
92
- end
93
- end
94
- describe "#periods.build" do
95
- it "should add a new instance of period, and periods_max_date should not raise error" do
96
- period = subject.periods.build
97
- subject.periods_max_date
98
- period.period_start.should be_nil
99
- period.period_end.should be_nil
100
- end
101
- end
102
- describe "#periods" do
103
- context "when a period is added," do
104
- before(:each) do
105
- subject.periods << Chouette::TimeTablePeriod.new( :period_start => (subject.bounding_dates.min - 1), :period_end => (subject.bounding_dates.max + 1))
106
- subject.save
107
- end
108
- it "should update shortcut" do
109
- subject.start_date.should == subject.bounding_dates.min
110
- subject.end_date.should == subject.bounding_dates.max
111
- end
112
- end
113
- context "when a period is removed," do
114
- before(:each) do
115
- subject.dates = []
116
- subject.periods = []
117
- subject.periods << Chouette::TimeTablePeriod.new(
118
- :period_start => 4.days.since.to_date,
119
- :period_end => 6.days.since.to_date)
120
- subject.periods << Chouette::TimeTablePeriod.new(
121
- :period_start => 1.days.since.to_date,
122
- :period_end => 10.days.since.to_date)
123
- subject.save
124
- subject.periods = subject.periods - [subject.periods.last]
125
- end
126
- def read_tm
127
- Chouette::TimeTable.find subject.id
128
- end
129
- it "should update shortcut" do
130
- tm = read_tm
131
- subject.start_date.should == subject.bounding_dates.min
132
- subject.start_date.should == tm.bounding_dates.min
133
- subject.start_date.should == 4.days.since.to_date
134
- subject.end_date.should == subject.bounding_dates.max
135
- subject.end_date.should == tm.bounding_dates.max
136
- subject.end_date.should == 6.days.since.to_date
137
- end
138
- end
139
- end
140
- describe "#dates" do
141
- context "when a date is added," do
142
- before(:each) do
143
- subject.dates << Chouette::TimeTableDate.new( :date => (subject.bounding_dates.max + 1))
144
- subject.save
145
- end
146
- it "should update shortcut" do
147
- subject.start_date.should == subject.bounding_dates.min
148
- subject.end_date.should == subject.bounding_dates.max
149
- end
150
- end
151
- context "when a date is removed," do
152
- before(:each) do
153
- subject.periods = []
154
- subject.dates = subject.dates - [subject.bounding_dates.max + 1]
155
- end
156
- it "should update shortcut" do
157
- subject.start_date.should == subject.bounding_dates.min
158
- subject.end_date.should == subject.bounding_dates.max
159
- end
160
- end
161
- context "when all the dates and periods are removed," do
162
- before(:each) do
163
- subject.periods = []
164
- subject.dates = []
165
- end
166
- it "should update shortcut" do
167
- subject.start_date.should be_nil
168
- subject.end_date.should be_nil
169
- end
170
- end
171
- end
172
-
173
- describe "#valid_days" do
174
- it "should begin with position 0" do
175
- subject.int_day_types = 128
176
- subject.valid_days.should == [6]
177
- end
178
- end
179
-
180
- describe "#intersects" do
181
- it "should return day if a date equal day" do
182
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1")
183
- time_table_date = Factory(:time_table_date, :date => Date.today, :time_table_id => time_table.id)
184
- time_table.intersects([Date.today]).should == [Date.today]
185
- end
186
-
187
- it "should return [] if a period not include days" do
188
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1", :int_day_types => 12)
189
- time_table_period = Factory(:time_table_period, :period_start => Date.new(2013, 05, 27),:period_end => Date.new(2013, 05, 30), :time_table_id => time_table.id)
190
- time_table.intersects([ Date.new(2013, 05, 29), Date.new(2013, 05, 30)]).should == []
191
- end
192
-
193
- it "should return days if a period include day" do
194
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1", :int_day_types => 12) # Day type monday and tuesday
195
- time_table_period = Factory(:time_table_period, :period_start => Date.new(2013, 05, 27),:period_end => Date.new(2013, 05, 30), :time_table_id => time_table.id)
196
- time_table.intersects([ Date.new(2013, 05, 27), Date.new(2013, 05, 28)]).should == [ Date.new(2013, 05, 27), Date.new(2013, 05, 28)]
197
- end
198
-
199
-
200
- end
201
-
202
- describe "#include_day?" do
203
- it "should return true if a date equal day" do
204
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1")
205
- time_table_date = Factory(:time_table_date, :date => Date.today, :time_table_id => time_table.id)
206
- time_table.include_day?(Date.today).should == true
207
- end
208
-
209
- it "should return true if a period include day" do
210
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1", :int_day_types => 12) # Day type monday and tuesday
211
- time_table_period = Factory(:time_table_period, :period_start => Date.new(2013, 05, 27),:period_end => Date.new(2013, 05, 29), :time_table_id => time_table.id)
212
- time_table.include_day?( Date.new(2013, 05, 27)).should == true
213
- end
214
- end
215
-
216
- describe "#include_in_dates?" do
217
- it "should return true if a date equal day" do
218
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1")
219
- time_table_date = Factory(:time_table_date, :date => Date.today, :time_table_id => time_table.id)
220
- time_table.include_in_dates?(Date.today).should == true
221
- end
222
- end
223
-
224
- describe "#include_in_periods?" do
225
- it "should return true if a period include day" do
226
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1", :int_day_types => 4)
227
- time_table_period = Factory(:time_table_period, :period_start => Date.new(2012, 1, 1),:period_end => Date.new(2012, 01, 30), :time_table_id => time_table.id)
228
- time_table.include_in_periods?(Date.new(2012, 1, 2)).should == true
229
- end
230
- end
231
-
232
- describe "#include_in_overlap_dates?" do
233
- it "should return true if a day is included in overlap dates" do
234
- time_table = Chouette::TimeTable.create!(:comment => "Test", :objectid => "test:Timetable:1", :int_day_types => 4)
235
- time_table_period = Factory(:time_table_period, :period_start => Date.new(2012, 1, 1),:period_end => Date.new(2012, 01, 30), :time_table_id => time_table.id)
236
- time_table_date = Factory(:time_table_date, :date => Date.new(2012, 1, 2), :time_table_id => time_table.id)
237
- time_table.include_in_overlap_dates?(Date.new(2012, 1, 2)).should == true
238
- end
239
- end
240
-
241
- describe "#dates" do
242
- it "should have with position 0" do
243
- subject.dates.first.position.should == 0
244
- end
245
- context "when first date has been removed" do
246
- before do
247
- subject.dates.first.destroy
248
- end
249
- it "should begin with position 0" do
250
- subject.dates.first.position.should == 0
251
- end
252
- end
253
- end
254
- describe "#validity_out_between?" do
255
- let(:empty_tm) {Factory.build(:time_table)}
256
- it "should be false if empty calendar" do
257
- empty_tm.validity_out_between?( Date.today, Date.today + 7.day).should be_false
258
- end
259
- it "should be true if caldendar is out during start_date and end_date period" do
260
- start_date = subject.bounding_dates.max - 2.day
261
- end_date = subject.bounding_dates.max + 2.day
262
- subject.validity_out_between?( start_date, end_date).should be_true
263
- end
264
- it "should be false if calendar is out on start date" do
265
- start_date = subject.bounding_dates.max
266
- end_date = subject.bounding_dates.max + 2.day
267
- subject.validity_out_between?( start_date, end_date).should be_false
268
- end
269
- it "should be false if calendar is out on end date" do
270
- start_date = subject.bounding_dates.max - 2.day
271
- end_date = subject.bounding_dates.max
272
- subject.validity_out_between?( start_date, end_date).should be_true
273
- end
274
- it "should be false if calendar is out after start_date" do
275
- start_date = subject.bounding_dates.max + 2.day
276
- end_date = subject.bounding_dates.max + 4.day
277
- subject.validity_out_between?( start_date, end_date).should be_false
278
- end
279
- end
280
- describe "#validity_out_from_on?" do
281
- let(:empty_tm) {Factory.build(:time_table)}
282
- it "should be false if empty calendar" do
283
- empty_tm.validity_out_from_on?( Date.today).should be_false
284
- end
285
- it "should be true if caldendar ends on expected date" do
286
- expected_date = subject.bounding_dates.max
287
- subject.validity_out_from_on?( expected_date).should be_true
288
- end
289
- it "should be true if calendar ends before expected date" do
290
- expected_date = subject.bounding_dates.max + 30.day
291
- subject.validity_out_from_on?( expected_date).should be_true
292
- end
293
- it "should be false if calendars ends after expected date" do
294
- expected_date = subject.bounding_dates.max - 30.day
295
- subject.validity_out_from_on?( expected_date).should be_false
296
- end
297
- end
298
- describe "#bounding_dates" do
299
- context "when timetable contains only periods" do
300
- before do
301
- subject.dates = []
302
- subject.save
303
- end
304
- it "should retreive periods.period_start.min and periods.period_end.max" do
305
- subject.bounding_dates.min.should == subject.periods.map(&:period_start).min
306
- subject.bounding_dates.max.should == subject.periods.map(&:period_end).max
307
- end
308
- end
309
- context "when timetable contains only dates" do
310
- before do
311
- subject.periods = []
312
- subject.save
313
- end
314
- it "should retreive dates.min and dates.max" do
315
- subject.bounding_dates.min.should == subject.dates.map(&:date).min
316
- subject.bounding_dates.max.should == subject.dates.map(&:date).max
317
- end
318
- end
319
- it "should contains min date" do
320
- min_date = subject.bounding_dates.min
321
- subject.dates.each do |tm_date|
322
- (min_date <= tm_date.date).should be_true
323
- end
324
- subject.periods.each do |tm_period|
325
- (min_date <= tm_period.period_start).should be_true
326
- end
327
-
328
- end
329
- it "should contains max date" do
330
- max_date = subject.bounding_dates.max
331
- subject.dates.each do |tm_date|
332
- (tm_date.date <= max_date).should be_true
333
- end
334
- subject.periods.each do |tm_period|
335
- (tm_period.period_end <= max_date).should be_true
336
- end
337
-
338
- end
339
- end
340
- describe "#periods" do
341
- it "should begin with position 0" do
342
- subject.periods.first.position.should == 0
343
- end
344
- context "when first period has been removed" do
345
- before do
346
- subject.periods.first.destroy
347
- end
348
- it "should begin with position 0" do
349
- subject.periods.first.position.should == 0
350
- end
351
- end
352
- it "should have period_start before period_end" do
353
- period = Chouette::TimeTablePeriod.new
354
- period.period_start = Date.today
355
- period.period_end = Date.today + 10
356
- period.valid?.should be_true
357
- end
358
- it "should not have period_start after period_end" do
359
- period = Chouette::TimeTablePeriod.new
360
- period.period_start = Date.today
361
- period.period_end = Date.today - 10
362
- period.valid?.should be_false
363
- end
364
- it "should not have period_start equal to period_end" do
365
- period = Chouette::TimeTablePeriod.new
366
- period.period_start = Date.today
367
- period.period_end = Date.today
368
- period.valid?.should be_false
369
- end
370
- end
371
-
372
- end
@@ -1,64 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chouette::TransportMode do
4
-
5
- def mode(text_code = "test", numerical_code = nil)
6
- numerical_code ||= 1 if text_code == "test"
7
- Chouette::TransportMode.new(text_code, numerical_code)
8
- end
9
-
10
- describe "#to_i" do
11
-
12
- it "should return numerical code" do
13
- mode("test", 1).to_i.should == 1
14
- end
15
-
16
- end
17
-
18
- it "should return true to #test? when text code is 'test'" do
19
- mode("test").should be_test
20
- end
21
-
22
- it "should be equal when text codes are identical" do
23
- mode("test",1).should == mode("test", 2)
24
- end
25
-
26
- describe ".new" do
27
-
28
- it "should find numerical code from text code" do
29
- mode("unknown").to_i.should == 0
30
- end
31
-
32
- it "should find text code from numerical code" do
33
- mode(0).should be_unknown
34
- end
35
-
36
- it "should accept another mode" do
37
- Chouette::TransportMode.new(mode("test")).should == mode("test")
38
- end
39
-
40
- end
41
-
42
- describe "#public_transport?" do
43
-
44
- it "should return false for interchange" do
45
- mode("interchange").should_not be_public_transport
46
- end
47
-
48
- it "should return true for other modes" do
49
- mode("unknown").should be_public_transport
50
- end
51
-
52
- end
53
-
54
- describe ".all" do
55
-
56
- Chouette::TransportMode.definitions.each do |text_code, numerical_code|
57
- it "should include a TransportMode #{text_code}" do
58
- Chouette::TransportMode.all.should include(Chouette::TransportMode.new(text_code))
59
- end
60
- end
61
-
62
- end
63
-
64
- end
@@ -1,46 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chouette::VehicleJourneyAtStop do
4
- let!(:vehicle_journey){ Factory(:vehicle_journey_odd)}
5
- subject { vehicle_journey.vehicle_journey_at_stops.first }
6
-
7
- describe "#exceeds_gap?" do
8
- it "should return false if gap < 1.hour" do
9
- t1 = 1.minutes.ago
10
- t2 = 1.minutes.ago + 3.hour
11
- subject.exceeds_gap?(t1, t2).should be_true
12
- end
13
- it "should return false if gap > 2.hour" do
14
- t1 = 1.minutes.ago
15
- t2 = 1.minutes.ago + 3.minutes
16
- subject.exceeds_gap?(t1, t2).should be_false
17
- end
18
- end
19
-
20
- describe "#increasing_times_validate" do
21
- let(:vjas1){ vehicle_journey.vehicle_journey_at_stops[0]}
22
- let(:vjas2){ vehicle_journey.vehicle_journey_at_stops[1]}
23
- context "when vjas#arrival_time exceeds gap" do
24
- it "should add errors on arrival_time" do
25
- vjas1.arrival_time = vjas2.arrival_time - 3.hour
26
- vjas2.increasing_times_validate(vjas1).should be_false
27
- vjas2.errors.should_not be_empty
28
- vjas2.errors[:arrival_time].should_not be_blank
29
- end
30
- end
31
- context "when vjas#departure_time exceeds gap" do
32
- it "should add errors on departure_time" do
33
- vjas1.departure_time = vjas2.departure_time - 3.hour
34
- vjas2.increasing_times_validate(vjas1).should be_false
35
- vjas2.errors.should_not be_empty
36
- vjas2.errors[:departure_time].should_not be_blank
37
- end
38
- end
39
- context "when vjas does'nt exceed gap" do
40
- it "should not add errors" do
41
- vjas2.increasing_times_validate(vjas1).should be_true
42
- vjas2.errors.should be_empty
43
- end
44
- end
45
- end
46
- end
@@ -1,204 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Chouette::VehicleJourney do
4
- subject { Factory(:vehicle_journey_odd) }
5
-
6
- describe "in_relation_to_a_journey_pattern methods" do
7
- let!(:route) { Factory(:route)}
8
- let!(:journey_pattern) { Factory(:journey_pattern, :route => route)}
9
- let!(:journey_pattern_odd) { Factory(:journey_pattern_odd, :route => route)}
10
- let!(:journey_pattern_even) { Factory(:journey_pattern_even, :route => route)}
11
-
12
- context "when vehicle_journey is on odd stop whereas selected journey_pattern is on all stops" do
13
- subject { Factory(:vehicle_journey, :route => route, :journey_pattern => journey_pattern_odd)}
14
- describe "#extra_stops_in_relation_to_a_journey_pattern" do
15
- it "should be empty" do
16
- subject.extra_stops_in_relation_to_a_journey_pattern( journey_pattern).should be_empty
17
- end
18
- end
19
- describe "#extra_vjas_in_relation_to_a_journey_pattern" do
20
- it "should be empty" do
21
- subject.extra_vjas_in_relation_to_a_journey_pattern( journey_pattern).should be_empty
22
- end
23
- end
24
- describe "#missing_stops_in_relation_to_a_journey_pattern" do
25
- it "should return even stops" do
26
- result = subject.missing_stops_in_relation_to_a_journey_pattern( journey_pattern)
27
- result.should == journey_pattern_even.stop_points
28
- end
29
- end
30
- describe "#update_journey_pattern" do
31
- it "should new_record for added vjas" do
32
- subject.update_journey_pattern( journey_pattern)
33
- subject.vehicle_journey_at_stops.select{ |vjas| vjas.new_record? }.each do |vjas|
34
- journey_pattern_even.stop_points.should include( vjas.stop_point)
35
- end
36
- end
37
- it "should add vjas on each even stops" do
38
- subject.update_journey_pattern( journey_pattern)
39
- vehicle_stops = subject.vehicle_journey_at_stops.map(&:stop_point)
40
- journey_pattern_even.stop_points.each do |sp|
41
- vehicle_stops.should include(sp)
42
- end
43
- end
44
- it "should not mark any vjas as _destroy" do
45
- subject.update_journey_pattern( journey_pattern)
46
- subject.vehicle_journey_at_stops.any?{ |vjas| vjas._destroy }.should be_false
47
- end
48
- end
49
- end
50
- context "when vehicle_journey is on all stops whereas selected journey_pattern is on odd stops" do
51
- subject { Factory(:vehicle_journey, :route => route, :journey_pattern => journey_pattern)}
52
- describe "#missing_stops_in_relation_to_a_journey_pattern" do
53
- it "should be empty" do
54
- subject.missing_stops_in_relation_to_a_journey_pattern( journey_pattern_odd).should be_empty
55
- end
56
- end
57
- describe "#extra_stops_in_relation_to_a_journey_pattern" do
58
- it "should return even stops" do
59
- result = subject.extra_stops_in_relation_to_a_journey_pattern( journey_pattern_odd)
60
- result.should == journey_pattern_even.stop_points
61
- end
62
- end
63
- describe "#extra_vjas_in_relation_to_a_journey_pattern" do
64
- it "should return vjas on even stops" do
65
- result = subject.extra_vjas_in_relation_to_a_journey_pattern( journey_pattern_odd)
66
- result.map(&:stop_point).should == journey_pattern_even.stop_points
67
- end
68
- end
69
- describe "#update_journey_pattern" do
70
- it "should add no new vjas" do
71
- subject.update_journey_pattern( journey_pattern_odd)
72
- subject.vehicle_journey_at_stops.any?{ |vjas| vjas.new_record? }.should be_false
73
- end
74
- it "should mark vehicle_journey_at_stops as _destroy on even stops" do
75
- subject.update_journey_pattern( journey_pattern_odd)
76
- subject.vehicle_journey_at_stops.each { |vjas|
77
- vjas._destroy.should == journey_pattern_even.stop_points.include?(vjas.stop_point)
78
- }
79
- end
80
- end
81
- end
82
-
83
- end
84
- context "when following departure times exceeds gap" do
85
- describe "#increasing_times" do
86
- before(:each) do
87
- subject.vehicle_journey_at_stops[0].departure_time = subject.vehicle_journey_at_stops[1].departure_time - 2.hour
88
- subject.vehicle_journey_at_stops[0].arrival_time = subject.vehicle_journey_at_stops[0].departure_time
89
- subject.vehicle_journey_at_stops[1].arrival_time = subject.vehicle_journey_at_stops[1].departure_time
90
- end
91
- it "should make instance invalid" do
92
- subject.increasing_times
93
- subject.vehicle_journey_at_stops[1].errors[:departure_time].should_not be_blank
94
- subject.should_not be_valid
95
- end
96
- end
97
- describe "#update_attributes" do
98
- let!(:params){ {"vehicle_journey_at_stops_attributes" => {
99
- "0"=>{"id" => subject.vehicle_journey_at_stops[0].id ,"arrival_time" => 1.minutes.ago,"departure_time" => 1.minutes.ago},
100
- "1"=>{"id" => subject.vehicle_journey_at_stops[1].id, "arrival_time" => (1.minutes.ago + 2.hour),"departure_time" => (1.minutes.ago + 2.hour)}
101
- }}}
102
- it "should return false" do
103
- subject.update_attributes(params).should be_false
104
- end
105
- it "should make instance invalid" do
106
- subject.update_attributes(params)
107
- subject.should_not be_valid
108
- end
109
- it "should let first vjas without any errors" do
110
- subject.update_attributes(params)
111
- subject.vehicle_journey_at_stops[0].errors.should be_empty
112
- end
113
- it "should add an error on second vjas" do
114
- subject.update_attributes(params)
115
- subject.vehicle_journey_at_stops[1].errors[:departure_time].should_not be_blank
116
- end
117
- end
118
- end
119
-
120
- context "#time_table_tokens=" do
121
- let!(:tm1){Factory(:time_table, :comment => "TM1")}
122
- let!(:tm2){Factory(:time_table, :comment => "TM2")}
123
-
124
- it "should return associated time table ids" do
125
- subject.update_attributes :time_table_tokens => [tm1.id, tm2.id].join(',')
126
- subject.time_tables.should include( tm1)
127
- subject.time_tables.should include( tm2)
128
- end
129
- end
130
- describe "#bounding_dates" do
131
- before(:each) do
132
- tm1 = Factory.build(:time_table, :dates =>
133
- [ Factory.build(:time_table_date, :date => 1.days.ago.to_date),
134
- Factory.build(:time_table_date, :date => 2.days.ago.to_date)])
135
- tm2 = Factory.build(:time_table, :periods =>
136
- [ Factory.build(:time_table_period, :period_start => 4.days.ago.to_date, :period_end => 3.days.ago.to_date)])
137
- tm3 = Factory.build(:time_table)
138
- subject.time_tables = [ tm1, tm2, tm3]
139
- end
140
- it "should return min date from associated calendars" do
141
- subject.bounding_dates.min.should == 4.days.ago.to_date
142
- end
143
- it "should return max date from associated calendars" do
144
- subject.bounding_dates.max.should == 1.days.ago.to_date
145
- end
146
- end
147
- context "#vehicle_journey_at_stops" do
148
- it "should be ordered like stop_points on route" do
149
- route = subject.route
150
- vj_stop_ids = subject.vehicle_journey_at_stops.map(&:stop_point_id)
151
- expected_order = route.stop_points.map(&:id).select {|s_id| vj_stop_ids.include?(s_id)}
152
-
153
- vj_stop_ids.should == expected_order
154
- end
155
-
156
- end
157
-
158
- describe "#transport_mode_name" do
159
-
160
- def self.legacy_transport_modes
161
- %w{Air Train LongDistanceTrain LocalTrain RapidTransit Metro Tramway Coach Bus Ferry Waterborne PrivateVehicle Walk Trolleybus Bicycle Shuttle Taxi VAL Other}
162
- end
163
-
164
- legacy_transport_modes.each do |transport_mode|
165
- context "when transport_mode is #{transport_mode}" do
166
- transport_mode_name = Chouette::TransportMode.new(transport_mode.underscore)
167
- it "should be #{transport_mode_name}" do
168
- subject.transport_mode = transport_mode
169
- subject.transport_mode_name.should == transport_mode_name
170
- end
171
- end
172
- end
173
- context "when transport_mode is nil" do
174
- it "should be nil" do
175
- subject.transport_mode = nil
176
- subject.transport_mode_name.should be_nil
177
- end
178
- end
179
-
180
- end
181
-
182
- describe "#transport_mode_name=" do
183
-
184
- it "should change transport_mode with TransportMode#name" do
185
- subject.transport_mode_name = "Test"
186
- subject.transport_mode.should == "Test"
187
- end
188
-
189
- end
190
-
191
- describe ".transport_mode_names" do
192
-
193
- it "should not include unknown transport_mode_name" do
194
- Chouette::VehicleJourney.transport_mode_names.should_not include(Chouette::TransportMode.new("unknown"))
195
- end
196
-
197
- it "should not include interchange transport_mode" do
198
- Chouette::VehicleJourney.transport_mode_names.should_not include(Chouette::TransportMode.new("interchange"))
199
- end
200
-
201
- end
202
-
203
- end
204
-