ninoxe 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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