ninoxe 0.1.1 → 0.1.2

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 (67) hide show
  1. data/app/models/chouette/time_table.rb +74 -22
  2. data/app/models/chouette/vehicle_journey.rb +2 -5
  3. data/db/migrate/20130410063411_add_shortcut_to_time_table.rb +6 -0
  4. data/db/migrate/20130410100706_set_shortcut_to_existing_time_table.rb +10 -0
  5. data/db/migrate/20130410143542_resize_chouette_columns.rb +5 -0
  6. data/lib/factories/chouette_time_table.rb +1 -0
  7. data/lib/ninoxe/version.rb +1 -1
  8. data/spec/dummy/README.rdoc +261 -0
  9. data/spec/dummy/Rakefile +6 -0
  10. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  11. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  12. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  13. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  14. data/spec/dummy/app/mailers/.gitkeep +0 -0
  15. data/spec/dummy/app/models/.gitkeep +0 -0
  16. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  17. data/spec/dummy/config/application.rb +56 -0
  18. data/spec/dummy/config/boot.rb +10 -0
  19. data/{config/database.yml.me → spec/dummy/config/database.yml} +0 -2
  20. data/spec/dummy/config/environment.rb +7 -0
  21. data/spec/dummy/config/environments/development.rb +37 -0
  22. data/spec/dummy/config/environments/production.rb +67 -0
  23. data/spec/dummy/config/environments/test.rb +37 -0
  24. data/spec/dummy/config/initializers/active_record.rb +2 -0
  25. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  26. data/spec/dummy/config/initializers/inflections.rb +15 -0
  27. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  28. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  29. data/spec/dummy/config/initializers/session_store.rb +8 -0
  30. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  31. data/spec/dummy/config/locales/en.yml +5 -0
  32. data/spec/dummy/config/routes.rb +4 -0
  33. data/spec/dummy/config.ru +4 -0
  34. data/spec/dummy/db/test.sqlite3 +0 -0
  35. data/spec/dummy/lib/assets/.gitkeep +0 -0
  36. data/spec/dummy/log/.gitkeep +0 -0
  37. data/spec/dummy/public/404.html +26 -0
  38. data/spec/dummy/public/422.html +26 -0
  39. data/spec/dummy/public/500.html +25 -0
  40. data/spec/dummy/public/favicon.ico +0 -0
  41. data/spec/dummy/script/rails +6 -0
  42. data/spec/models/chouette/access_link_spec.rb +78 -0
  43. data/spec/models/chouette/access_point_spec.rb +222 -0
  44. data/spec/models/chouette/active_record_spec.rb +121 -0
  45. data/spec/models/chouette/area_type_spec.rb +53 -0
  46. data/spec/models/chouette/company_spec.rb +51 -0
  47. data/spec/models/chouette/connection_link_spec.rb +56 -0
  48. data/spec/models/chouette/direction_spec.rb +60 -0
  49. data/spec/models/chouette/exporter_spec.rb +28 -0
  50. data/spec/models/chouette/file_validator_spec.rb +28 -0
  51. data/spec/models/chouette/group_of_line_spec.rb +31 -0
  52. data/spec/models/chouette/journey_pattern_spec.rb +62 -0
  53. data/spec/models/chouette/line_spec.rb +106 -0
  54. data/spec/models/chouette/loader_spec.rb +69 -0
  55. data/spec/models/chouette/network_spec.rb +22 -0
  56. data/spec/models/chouette/object_id_spec.rb +146 -0
  57. data/spec/models/chouette/route_spec.rb +159 -0
  58. data/spec/models/chouette/stop_area_spec.rb +382 -0
  59. data/spec/models/chouette/stop_point_spec.rb +39 -0
  60. data/spec/models/chouette/time_table_spec.rb +350 -0
  61. data/spec/models/chouette/transport_mode_spec.rb +64 -0
  62. data/spec/models/chouette/vehicle_journey_at_stop_spec.rb +46 -0
  63. data/spec/models/chouette/vehicle_journey_spec.rb +204 -0
  64. data/spec/spec_helper.rb +62 -0
  65. metadata +445 -272
  66. data/db/migrate/20130204141720_add_foreign_keys.rb~ +0 -277
  67. data/lib/ninoxe.rb~ +0 -7
@@ -0,0 +1,67 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # Code is not reloaded between requests
5
+ config.cache_classes = true
6
+
7
+ # Full error reports are disabled and caching is turned on
8
+ config.consider_all_requests_local = false
9
+ config.action_controller.perform_caching = true
10
+
11
+ # Disable Rails's static asset server (Apache or nginx will already do this)
12
+ config.serve_static_assets = false
13
+
14
+ # Compress JavaScripts and CSS
15
+ config.assets.compress = true
16
+
17
+ # Don't fallback to assets pipeline if a precompiled asset is missed
18
+ config.assets.compile = false
19
+
20
+ # Generate digests for assets URLs
21
+ config.assets.digest = true
22
+
23
+ # Defaults to Rails.root.join("public/assets")
24
+ # config.assets.manifest = YOUR_PATH
25
+
26
+ # Specifies the header that your server uses for sending files
27
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
28
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
29
+
30
+ # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
31
+ # config.force_ssl = true
32
+
33
+ # See everything in the log (default is :info)
34
+ # config.log_level = :debug
35
+
36
+ # Prepend all log lines with the following tags
37
+ # config.log_tags = [ :subdomain, :uuid ]
38
+
39
+ # Use a different logger for distributed setups
40
+ # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
41
+
42
+ # Use a different cache store in production
43
+ # config.cache_store = :mem_cache_store
44
+
45
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server
46
+ # config.action_controller.asset_host = "http://assets.example.com"
47
+
48
+ # Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added)
49
+ # config.assets.precompile += %w( search.js )
50
+
51
+ # Disable delivery errors, bad email addresses will be ignored
52
+ # config.action_mailer.raise_delivery_errors = false
53
+
54
+ # Enable threaded mode
55
+ # config.threadsafe!
56
+
57
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
58
+ # the I18n.default_locale when a translation can not be found)
59
+ config.i18n.fallbacks = true
60
+
61
+ # Send deprecation notices to registered listeners
62
+ config.active_support.deprecation = :notify
63
+
64
+ # Log the query plan for queries taking more than this (works
65
+ # with SQLite, MySQL, and PostgreSQL)
66
+ # config.active_record.auto_explain_threshold_in_seconds = 0.5
67
+ end
@@ -0,0 +1,37 @@
1
+ Dummy::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+ config.cache_classes = true
9
+
10
+ # Configure static asset server for tests with Cache-Control for performance
11
+ config.serve_static_assets = true
12
+ config.static_cache_control = "public, max-age=3600"
13
+
14
+ # Log error messages when you accidentally call methods on nil
15
+ config.whiny_nils = true
16
+
17
+ # Show full error reports and disable caching
18
+ config.consider_all_requests_local = true
19
+ config.action_controller.perform_caching = false
20
+
21
+ # Raise exceptions instead of rendering exception templates
22
+ config.action_dispatch.show_exceptions = false
23
+
24
+ # Disable request forgery protection in test environment
25
+ config.action_controller.allow_forgery_protection = false
26
+
27
+ # Tell Action Mailer not to deliver emails to the real world.
28
+ # The :test delivery method accumulates sent emails in the
29
+ # ActionMailer::Base.deliveries array.
30
+ config.action_mailer.delivery_method = :test
31
+
32
+ # Raise exception on mass assignment protection for Active Record models
33
+ #config.active_record.mass_assignment_sanitizer = :strict
34
+
35
+ # Print deprecation notices to the stderr
36
+ config.active_support.deprecation = :stderr
37
+ end
@@ -0,0 +1,2 @@
1
+ ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "bigserial primary key"
2
+
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
4
+ # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
5
+
6
+ # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
7
+ # Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,15 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new inflection rules using the following format
4
+ # (all these examples are active by default):
5
+ # ActiveSupport::Inflector.inflections do |inflect|
6
+ # inflect.plural /^(ox)$/i, '\1en'
7
+ # inflect.singular /^(ox)en/i, '\1'
8
+ # inflect.irregular 'person', 'people'
9
+ # inflect.uncountable %w( fish sheep )
10
+ # end
11
+ #
12
+ # These inflection rules are supported but not enabled by default:
13
+ # ActiveSupport::Inflector.inflections do |inflect|
14
+ # inflect.acronym 'RESTful'
15
+ # end
@@ -0,0 +1,5 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Add new mime types for use in respond_to blocks:
4
+ # Mime::Type.register "text/richtext", :rtf
5
+ # Mime::Type.register_alias "text/html", :iphone
@@ -0,0 +1,7 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ # Your secret key for verifying the integrity of signed cookies.
4
+ # If you change this key, all old signed cookies will become invalid!
5
+ # Make sure the secret is at least 30 characters and all random,
6
+ # no regular words or you'll be exposed to dictionary attacks.
7
+ Dummy::Application.config.secret_token = '1d0189a5af958cad469930557a3057cf1e8f8eec7cee5743100c1fa98901b49581c3a346745bda1e2033b00a0e62b65002e553b341b5583356eca538c31d010c'
@@ -0,0 +1,8 @@
1
+ # Be sure to restart your server when you modify this file.
2
+
3
+ Dummy::Application.config.session_store :cookie_store, :key => '_dummy_session'
4
+
5
+ # Use the database for sessions instead of the cookie-based default,
6
+ # which shouldn't be used to store highly confidential information
7
+ # (create the session table with "rails generate session_migration")
8
+ # Dummy::Application.config.session_store :active_record_store
@@ -0,0 +1,14 @@
1
+ # Be sure to restart your server when you modify this file.
2
+ #
3
+ # This file contains settings for ActionController::ParamsWrapper which
4
+ # is enabled by default.
5
+
6
+ # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
+ ActiveSupport.on_load(:action_controller) do
8
+ wrap_parameters :format => [:json]
9
+ end
10
+
11
+ # Disable root element in JSON by default.
12
+ ActiveSupport.on_load(:active_record) do
13
+ self.include_root_in_json = false
14
+ end
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
@@ -0,0 +1,4 @@
1
+ Rails.application.routes.draw do
2
+
3
+ mount Ninoxe::Engine => "/ninoxe"
4
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Dummy::Application
File without changes
File without changes
File without changes
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ </div>
24
+ </body>
25
+ </html>
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby1.8
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chouette::AccessLink do
4
+ subject { Factory(:access_link) }
5
+
6
+ it { should validate_uniqueness_of :objectid }
7
+ its(:objectid) { should be_kind_of(Chouette::ObjectId) }
8
+
9
+ it { should validate_presence_of :name }
10
+ it { should validate_presence_of :link_type }
11
+ it { should validate_presence_of :link_orientation }
12
+
13
+ describe "#access_link_type" do
14
+
15
+ def self.legacy_link_types
16
+ %w{Underground Mixed Overground}
17
+ end
18
+
19
+ legacy_link_types.each do |link_type|
20
+ context "when link_type is #{link_type}" do
21
+ access_link_type = Chouette::ConnectionLinkType.new(link_type.underscore)
22
+ it "should be #{access_link_type}" do
23
+ subject.link_type = link_type
24
+ subject.access_link_type.should == access_link_type
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "#access_link_type=" do
31
+
32
+ it "should change link_type with ConnectionLinkType#name" do
33
+ subject.access_link_type = "underground"
34
+ subject.link_type.should == "Underground"
35
+ end
36
+
37
+ end
38
+
39
+ describe "#link_orientation_type" do
40
+
41
+ def self.legacy_link_orientations
42
+ %w{AccessPointToStopArea StopAreaToAccessPoint}
43
+ end
44
+
45
+ legacy_link_orientations.each do |link_orientation|
46
+ context "when link_orientation is #{link_orientation}" do
47
+ link_orientation_type = Chouette::LinkOrientationType.new(link_orientation.underscore)
48
+ it "should be #{link_orientation_type}" do
49
+ subject.link_orientation = link_orientation
50
+ subject.link_orientation_type.should == link_orientation_type
51
+ end
52
+ end
53
+ end
54
+
55
+ end
56
+
57
+ describe "#link_orientation_type=" do
58
+
59
+ it "should change link_orientation with LinkOrientationType#name" do
60
+ subject.link_orientation_type = "access_point_to_stop_area"
61
+ subject.link_orientation.should == "AccessPointToStopArea"
62
+ end
63
+
64
+ end
65
+
66
+ describe "#link_key" do
67
+ it "should calculate link_key for access to area" do
68
+ subject.link_orientation_type = "access_point_to_stop_area"
69
+ subject.link_key.should == "A_#{subject.access_point.id}-S_#{subject.stop_area.id}"
70
+ end
71
+ it "should calculate link_key for area to access" do
72
+ subject.link_orientation_type = "stop_area_to_access_point"
73
+ subject.link_key.should == "S_#{subject.stop_area.id}-A_#{subject.access_point.id}"
74
+ end
75
+
76
+ end
77
+
78
+ end
@@ -0,0 +1,222 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chouette::AccessPoint do
4
+
5
+ its(:objectid) { should be_kind_of(Chouette::ObjectId) }
6
+
7
+ it { should validate_presence_of :name }
8
+ it { should validate_numericality_of :latitude }
9
+ it { should validate_numericality_of :longitude }
10
+ it { should validate_numericality_of :x }
11
+ it { should validate_numericality_of :y }
12
+
13
+ describe ".x_y" do
14
+ it "should accept x and y both as nil" do
15
+ subject = Factory :access_point
16
+ subject.x = nil
17
+ subject.y = nil
18
+ subject.valid?.should be_true
19
+ end
20
+ it "should accept x and y both numerical" do
21
+ subject = Factory :access_point
22
+ subject.x = 10
23
+ subject.y = 10
24
+ subject.valid?.should be_true
25
+ end
26
+ it "should reject x nil with y numerical" do
27
+ subject = Factory :access_point
28
+ subject.x = nil
29
+ subject.y = 10
30
+ subject.valid?.should be_false
31
+ end
32
+ it "should reject x numerical with y nil" do
33
+ subject = Factory :access_point
34
+ subject.x = 10
35
+ subject.y = nil
36
+ subject.valid?.should be_false
37
+ end
38
+ end
39
+
40
+ describe ".latitude" do
41
+ it "should accept -90 value" do
42
+ subject = Factory :access_point
43
+ subject.latitude = -90
44
+ subject.valid?.should be_true
45
+ end
46
+ it "should reject < -90 value" do
47
+ subject = Factory :access_point
48
+ subject.latitude = -90.0001
49
+ subject.valid?.should be_false
50
+ end
51
+ it "should accept 90 value" do
52
+ subject = Factory :access_point
53
+ subject.latitude = 90
54
+ subject.valid?.should be_true
55
+ end
56
+ it "should reject > 90 value" do
57
+ subject = Factory :access_point
58
+ subject.latitude = 90.0001
59
+ subject.valid?.should be_false
60
+ end
61
+ end
62
+
63
+ describe ".longitude" do
64
+ it "should accept -180 value" do
65
+ subject = Factory :access_point
66
+ subject.longitude = -180
67
+ subject.valid?.should be_true
68
+ end
69
+ it "should reject < -180 value" do
70
+ subject = Factory :access_point
71
+ subject.longitude = -180.0001
72
+ subject.valid?.should be_false
73
+ end
74
+ it "should accept 180 value" do
75
+ subject = Factory :access_point
76
+ subject.longitude = 180
77
+ subject.valid?.should be_true
78
+ end
79
+ it "should reject > 180 value" do
80
+ subject = Factory :access_point
81
+ subject.longitude = 180.0001
82
+ subject.valid?.should be_false
83
+ end
84
+ end
85
+
86
+ describe ".long_lat" do
87
+ it "should accept longitude and latitude both as nil" do
88
+ subject = Factory :access_point
89
+ subject.longitude = nil
90
+ subject.latitude = nil
91
+ subject.valid?.should be_true
92
+ end
93
+ it "should accept longitude and latitude both numerical" do
94
+ subject = Factory :access_point
95
+ subject.longitude = 10
96
+ subject.latitude = 10
97
+ subject.valid?.should be_true
98
+ end
99
+ it "should reject longitude nil with latitude numerical" do
100
+ subject = Factory :access_point
101
+ subject.longitude = nil
102
+ subject.latitude = 10
103
+ subject.valid?.should be_false
104
+ end
105
+ it "should reject longitude numerical with latitude nil" do
106
+ subject = Factory :access_point
107
+ subject.longitude = 10
108
+ subject.latitude = nil
109
+ subject.valid?.should be_false
110
+ end
111
+ end
112
+
113
+ describe "#access_type" do
114
+ def self.legacy_access_types
115
+ %w{In Out InOut}
116
+ end
117
+
118
+ legacy_access_types.each do |access_type|
119
+ context "when access_type is #{access_type}" do
120
+ access_point_type = Chouette::AccessPointType.new(access_type.underscore)
121
+ it "should be #{access_point_type}" do
122
+ subject.access_type = access_type
123
+ subject.access_point_type.should == access_point_type
124
+ end
125
+ end
126
+ end
127
+ end
128
+
129
+ describe "#access_point_type=" do
130
+ it "should change access_type with Chouette::AccessPointType#name" do
131
+ subject.access_point_type = "in_out"
132
+ subject.access_type.should == "InOut"
133
+ end
134
+
135
+ end
136
+
137
+ describe "#to_lat_lng" do
138
+
139
+ it "should return nil if latitude is nil" do
140
+ subject.latitude = nil
141
+ subject.to_lat_lng.should be_nil
142
+ end
143
+
144
+ it "should return nil if longitude is nil" do
145
+ subject.longitude = nil
146
+ subject.to_lat_lng.should be_nil
147
+ end
148
+
149
+ end
150
+
151
+ describe "#geometry" do
152
+
153
+ it "should be nil when to_lat_lng is nil" do
154
+ subject.stub :to_lat_lng => nil
155
+ subject.geometry.should be_nil
156
+ end
157
+
158
+ end
159
+
160
+ describe "#generic_access_link_matrix" do
161
+ it "should have 2 generic_access_links in matrix" do
162
+ stop_place = Factory :stop_area, :area_type => "StopPlace"
163
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
164
+ subject = Factory :access_point, :stop_area => stop_place
165
+ subject.generic_access_link_matrix.size.should == 2
166
+ end
167
+
168
+ it "should have new generic_access_links in matrix" do
169
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint"
170
+ subject = Factory :access_point, :stop_area => commercial_stop_point
171
+ subject.generic_access_link_matrix.each do |link|
172
+ link.id.should be_nil
173
+ end
174
+ end
175
+ it "should have only last generic_access_links as new in matrix" do
176
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint"
177
+ subject = Factory :access_point, :stop_area => commercial_stop_point
178
+ link = Factory :access_link, :access_point => subject, :stop_area => commercial_stop_point
179
+ subject.generic_access_link_matrix.each do |link|
180
+ if link.link_key.start_with?"A_"
181
+ link.id.should_not be_nil
182
+ else
183
+ link.id.should be_nil
184
+ end
185
+ end
186
+ end
187
+ end
188
+
189
+ describe "#detail_access_link_matrix" do
190
+ it "should have 4 detail_access_links in matrix" do
191
+ stop_place = Factory :stop_area, :area_type => "StopPlace"
192
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint" ,:parent => stop_place
193
+ quay1 = Factory :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
194
+ quay2 = Factory :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
195
+ subject = Factory :access_point, :stop_area => stop_place
196
+ subject.detail_access_link_matrix.size.should == 4
197
+ end
198
+
199
+ it "should have new detail_access_links in matrix" do
200
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint"
201
+ quay = Factory :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
202
+ subject = Factory :access_point, :stop_area => commercial_stop_point
203
+ subject.detail_access_link_matrix.each do |link|
204
+ link.id.should be_nil
205
+ end
206
+ end
207
+ it "should have only last detail_access_links as new in matrix" do
208
+ commercial_stop_point = Factory :stop_area, :area_type => "CommercialStopPoint"
209
+ quay = Factory :stop_area, :parent => commercial_stop_point, :area_type => "Quay"
210
+ subject = Factory :access_point, :stop_area => commercial_stop_point
211
+ link = Factory :access_link, :access_point => subject, :stop_area => quay
212
+ subject.detail_access_link_matrix.each do |link|
213
+ if link.link_key.start_with?"A_"
214
+ link.id.should_not be_nil
215
+ else
216
+ link.id.should be_nil
217
+ end
218
+ end
219
+ end
220
+ end
221
+
222
+ end