ninoxe 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/app/models/chouette/command.rb +3 -2
  2. data/app/models/chouette/route.rb +12 -11
  3. data/app/models/chouette/stop_point.rb +11 -5
  4. data/app/models/chouette/time_table.rb +19 -7
  5. data/app/models/chouette/time_table_date.rb +8 -1
  6. data/app/models/chouette/time_table_period.rb +6 -1
  7. data/app/models/chouette/trident_active_record.rb +12 -0
  8. data/config/database.yml +2 -0
  9. data/{spec/dummy/config/database.yml → config/database.yml.me} +2 -0
  10. data/lib/ninoxe/version.rb +1 -1
  11. data/lib/ninoxe.rb~ +7 -0
  12. metadata +131 -209
  13. checksums.yaml +0 -7
  14. data/spec/dummy/README.rdoc +0 -261
  15. data/spec/dummy/Rakefile +0 -6
  16. data/spec/dummy/app/assets/javascripts/application.js +0 -15
  17. data/spec/dummy/app/assets/stylesheets/application.css +0 -13
  18. data/spec/dummy/app/controllers/application_controller.rb +0 -3
  19. data/spec/dummy/app/helpers/application_helper.rb +0 -2
  20. data/spec/dummy/app/mailers/.gitkeep +0 -0
  21. data/spec/dummy/app/models/.gitkeep +0 -0
  22. data/spec/dummy/app/views/layouts/application.html.erb +0 -14
  23. data/spec/dummy/config/application.rb +0 -56
  24. data/spec/dummy/config/boot.rb +0 -10
  25. data/spec/dummy/config/environment.rb +0 -7
  26. data/spec/dummy/config/environments/development.rb +0 -37
  27. data/spec/dummy/config/environments/production.rb +0 -67
  28. data/spec/dummy/config/environments/test.rb +0 -37
  29. data/spec/dummy/config/initializers/active_record.rb +0 -2
  30. data/spec/dummy/config/initializers/backtrace_silencers.rb +0 -7
  31. data/spec/dummy/config/initializers/inflections.rb +0 -15
  32. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  33. data/spec/dummy/config/initializers/secret_token.rb +0 -7
  34. data/spec/dummy/config/initializers/session_store.rb +0 -8
  35. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -14
  36. data/spec/dummy/config/locales/en.yml +0 -5
  37. data/spec/dummy/config/routes.rb +0 -4
  38. data/spec/dummy/config.ru +0 -4
  39. data/spec/dummy/db/test.sqlite3 +0 -0
  40. data/spec/dummy/lib/assets/.gitkeep +0 -0
  41. data/spec/dummy/log/.gitkeep +0 -0
  42. data/spec/dummy/public/404.html +0 -26
  43. data/spec/dummy/public/422.html +0 -26
  44. data/spec/dummy/public/500.html +0 -25
  45. data/spec/dummy/public/favicon.ico +0 -0
  46. data/spec/dummy/script/rails +0 -6
  47. data/spec/models/chouette/access_link_spec.rb +0 -78
  48. data/spec/models/chouette/access_point_spec.rb +0 -193
  49. data/spec/models/chouette/active_record_spec.rb +0 -121
  50. data/spec/models/chouette/area_type_spec.rb +0 -53
  51. data/spec/models/chouette/company_spec.rb +0 -51
  52. data/spec/models/chouette/connection_link_spec.rb +0 -56
  53. data/spec/models/chouette/direction_spec.rb +0 -60
  54. data/spec/models/chouette/exporter_spec.rb +0 -28
  55. data/spec/models/chouette/file_validator_spec.rb +0 -28
  56. data/spec/models/chouette/group_of_line_spec.rb +0 -31
  57. data/spec/models/chouette/journey_pattern_spec.rb +0 -62
  58. data/spec/models/chouette/line_spec.rb +0 -106
  59. data/spec/models/chouette/loader_spec.rb +0 -69
  60. data/spec/models/chouette/network_spec.rb +0 -22
  61. data/spec/models/chouette/object_id_spec.rb +0 -146
  62. data/spec/models/chouette/route_spec.rb +0 -159
  63. data/spec/models/chouette/stop_area_spec.rb +0 -354
  64. data/spec/models/chouette/stop_point_spec.rb +0 -39
  65. data/spec/models/chouette/time_table_spec.rb +0 -372
  66. data/spec/models/chouette/transport_mode_spec.rb +0 -64
  67. data/spec/models/chouette/vehicle_journey_at_stop_spec.rb +0 -46
  68. data/spec/models/chouette/vehicle_journey_spec.rb +0 -204
  69. data/spec/presenters/chouette/geometry/general_presenter.rb +0 -1
  70. data/spec/presenters/chouette/geometry/line_presenter_spec.rb +0 -13
  71. 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
-