aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authorLuc Donnet2017-10-02 23:17:15 +0200
committerGitHub2017-10-02 23:17:15 +0200
commit6ba2b9f05961a33a6936d32e4c28d70149b48342 (patch)
tree457ebbf41a48873eb80cf4105bd993e69c8d711d /spec
parentcba31dc411ceb47f80202c1d3a32a2e031630b13 (diff)
parent88567b111cf172e7b4368ffc02cb1e5cf27b4231 (diff)
downloadchouette-core-6ba2b9f05961a33a6936d32e4c28d70149b48342.tar.bz2
Merge pull request #82 from af83/4627-compliance-fix-class-vars
4627 compliance fix class vars
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/compliance_controls_controller_spec.rb2
-rw-r--r--spec/factories/compliance_controls/generic_factories.rb20
-rw-r--r--spec/factories/compliance_controls/journey_pattern_control_factories.rb14
-rw-r--r--spec/factories/compliance_controls/line_control_factories.rb7
-rw-r--r--spec/factories/compliance_controls/route_control_factories.rb62
-rw-r--r--spec/factories/compliance_controls/routing_constraint_zone_control_factories.rb17
-rw-r--r--spec/factories/compliance_controls/vehicle_journey_control_factories.rb12
-rw-r--r--spec/models/compliance_control_class_level_defaults/generic_attribute_control/min_max_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/generic_attribute_control/parent_class_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/generic_attribute_control/pattern_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/generic_attribute_control/uniqueness_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/journey_pattern_control/duplicates_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/journey_pattern_control/vehicle_journey_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/line_control/route_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/duplicates_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/journey_pattern_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/minimum_length_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/omnibus_journey_pattern_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/opposite_route_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/opposite_route_terminus_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/speed_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/stop_points_in_journey_pattern_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/time_table_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/unactivated_stop_points_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/vehicle_journey_at_stops_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/route_control/zdl_stop_area_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/maximum_length_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/minimum_length_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/unactivated_stop_point_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/vehicle_journey_control/delta_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_class_level_defaults/vehicle_journey_control/waiting_time_cccld_spec.rb7
-rw-r--r--spec/models/compliance_control_spec.rb2
-rw-r--r--spec/support/data_modifier.rb53
-rw-r--r--spec/support/data_modifier/bool.rb18
-rw-r--r--spec/support/data_modifier/box.rb21
-rw-r--r--spec/support/data_modifier/enum.rb19
-rw-r--r--spec/support/data_modifier/hash.rb16
-rw-r--r--spec/support/random.rb30
-rw-r--r--spec/support/shared_examples/compliance_control_class_level_defaults.rb42
39 files changed, 499 insertions, 4 deletions
diff --git a/spec/controllers/compliance_controls_controller_spec.rb b/spec/controllers/compliance_controls_controller_spec.rb
index e866b037c..e12a75381 100644
--- a/spec/controllers/compliance_controls_controller_spec.rb
+++ b/spec/controllers/compliance_controls_controller_spec.rb
@@ -1,5 +1,3 @@
-require 'rails_helper'
-
RSpec.describe ComplianceControlsController, type: :controller do
login_user
diff --git a/spec/factories/compliance_controls/generic_factories.rb b/spec/factories/compliance_controls/generic_factories.rb
new file mode 100644
index 000000000..2c961a654
--- /dev/null
+++ b/spec/factories/compliance_controls/generic_factories.rb
@@ -0,0 +1,20 @@
+
+FactoryGirl.define do
+ factory :generic_attribute_control_min_max, class: 'GenericAttributeControl::MinMax' do
+ sequence(:name) { |n| "MinMax control #{n}" }
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :generic_attribute_control_pattern, class: 'GenericAttributeControl::Pattern' do
+ sequence(:name) { |n| "Pattern control #{n}" }
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :generic_attribute_control_uniqueness, class: 'GenericAttributeControl::Uniqueness' do
+ sequence(:name) { |n| "Uniqueness control #{n}" }
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+end
diff --git a/spec/factories/compliance_controls/journey_pattern_control_factories.rb b/spec/factories/compliance_controls/journey_pattern_control_factories.rb
new file mode 100644
index 000000000..f5d1e76e0
--- /dev/null
+++ b/spec/factories/compliance_controls/journey_pattern_control_factories.rb
@@ -0,0 +1,14 @@
+
+FactoryGirl.define do
+
+ factory :journey_pattern_control_duplicates, class: 'JourneyPatternControl::Duplicates' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :journey_pattern_control_vehicle_journey, class: 'JourneyPatternControl::VehicleJourney' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+end
diff --git a/spec/factories/compliance_controls/line_control_factories.rb b/spec/factories/compliance_controls/line_control_factories.rb
new file mode 100644
index 000000000..3f5422e8c
--- /dev/null
+++ b/spec/factories/compliance_controls/line_control_factories.rb
@@ -0,0 +1,7 @@
+FactoryGirl.define do
+ factory :line_control_route, class: 'LineControl::Route' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+end
diff --git a/spec/factories/compliance_controls/route_control_factories.rb b/spec/factories/compliance_controls/route_control_factories.rb
new file mode 100644
index 000000000..786565bac
--- /dev/null
+++ b/spec/factories/compliance_controls/route_control_factories.rb
@@ -0,0 +1,62 @@
+FactoryGirl.define do
+
+ factory :route_control_duplicates, class: 'RouteControl::Duplicates' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_journey_pattern, class: 'RouteControl::JourneyPattern' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_minimum_length, class: 'RouteControl::MinimumLength' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_omnibus_journey_pattern, class: 'RouteControl::OmnibusJourneyPattern' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_opposite_route, class: 'RouteControl::OppositeRoute' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_opposite_route_terminus, class: 'RouteControl::OppositeRouteTerminus' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_stop_points_in_journey_pattern, class: 'RouteControl::StopPointsInJourneyPattern' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_unactivated_stop_points, class: 'RouteControl::UnactivatedStopPoints' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_zdl_stop_area, class: 'RouteControl::ZDLStopArea' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_speed, class: 'RouteControl::Speed' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_time_table, class: 'RouteControl::TimeTable' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :route_control_control_vehicle_journey_at_stops, class: 'RouteControl::VehicleJourneyAtStops' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+end
diff --git a/spec/factories/compliance_controls/routing_constraint_zone_control_factories.rb b/spec/factories/compliance_controls/routing_constraint_zone_control_factories.rb
new file mode 100644
index 000000000..8855a9d58
--- /dev/null
+++ b/spec/factories/compliance_controls/routing_constraint_zone_control_factories.rb
@@ -0,0 +1,17 @@
+FactoryGirl.define do
+ factory :routing_constraint_zone_control_unactivated_stop_point,
+ class: 'routingConstraintZoneControl::UnactivatedStopPoint' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :routing_constraint_zone_control_minimum_length, class: 'routingConstraintZoneControl::MinimumLength' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :routing_constraint_zone_control_maximum_length, class: 'routingConstraintZoneControl::MaximumLength' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+end
diff --git a/spec/factories/compliance_controls/vehicle_journey_control_factories.rb b/spec/factories/compliance_controls/vehicle_journey_control_factories.rb
new file mode 100644
index 000000000..72233d9a0
--- /dev/null
+++ b/spec/factories/compliance_controls/vehicle_journey_control_factories.rb
@@ -0,0 +1,12 @@
+FactoryGirl.define do
+
+ factory :vehicle_journey_control_wating_time, class: 'VehicleJourneyControl::WaitingTime' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+
+ factory :vehicle_journey_control_delta, class: 'VehicleJourneyControl::Delta' do
+ association :compliance_control_set
+ association :compliance_control_block
+ end
+end
diff --git a/spec/models/compliance_control_class_level_defaults/generic_attribute_control/min_max_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/min_max_cccld_spec.rb
new file mode 100644
index 000000000..e39e5e4c0
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/min_max_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe GenericAttributeControl::MinMax, type: :model do
+ let( :default_code ){ "3-Generic-2" }
+ let( :factory ){ :generic_attribute_control_min_max }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/generic_attribute_control/parent_class_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/parent_class_cccld_spec.rb
new file mode 100644
index 000000000..f9c4373d5
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/parent_class_cccld_spec.rb
@@ -0,0 +1,7 @@
+RSpec.describe ComplianceControl do
+ context 'class attributes' do
+ it 'are correctly set' do
+ expect( described_class ).to respond_to(:default_code)
+ end
+ end
+end
diff --git a/spec/models/compliance_control_class_level_defaults/generic_attribute_control/pattern_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/pattern_cccld_spec.rb
new file mode 100644
index 000000000..850cd1d76
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/pattern_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe GenericAttributeControl::Pattern, type: :model do
+ let( :default_code ){ "3-Generic-3" }
+ let( :factory ){ :generic_attribute_control_pattern }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/generic_attribute_control/uniqueness_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/uniqueness_cccld_spec.rb
new file mode 100644
index 000000000..e4ab8d2cd
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/generic_attribute_control/uniqueness_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe GenericAttributeControl::Uniqueness, type: :model do
+ let( :default_code ){ "3-Generic-3" }
+ let( :factory ){ :generic_attribute_control_uniqueness }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/journey_pattern_control/duplicates_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/journey_pattern_control/duplicates_cccld_spec.rb
new file mode 100644
index 000000000..89544937b
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/journey_pattern_control/duplicates_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe JourneyPatternControl::Duplicates, type: :model do
+ let( :default_code ){ "3-JourneyPattern-1" }
+ let( :factory ){ :journey_pattern_control_duplicates }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/journey_pattern_control/vehicle_journey_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/journey_pattern_control/vehicle_journey_cccld_spec.rb
new file mode 100644
index 000000000..fb254ee31
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/journey_pattern_control/vehicle_journey_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe JourneyPatternControl::VehicleJourney, type: :model do
+ let( :default_code ){ "3-JourneyPattern-2" }
+ let( :factory ){ :journey_pattern_control_vehicle_journey }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/line_control/route_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/line_control/route_cccld_spec.rb
new file mode 100644
index 000000000..ab5fb1027
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/line_control/route_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe LineControl::Route, type: :model do
+ let( :default_code ){ "3-Line-1" }
+ let( :factory ){ :line_control_route }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/duplicates_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/duplicates_cccld_spec.rb
new file mode 100644
index 000000000..46531cc3b
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/duplicates_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::Duplicates, type: :model do
+ let( :default_code ){ "3-Route-4" }
+ let( :factory ){ :route_control_duplicates }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/journey_pattern_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/journey_pattern_cccld_spec.rb
new file mode 100644
index 000000000..2bdd6e591
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/journey_pattern_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::JourneyPattern, type: :model do
+ let( :default_code ){ "3-Route-3" }
+ let( :factory ){ :route_control_journey_pattern }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/minimum_length_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/minimum_length_cccld_spec.rb
new file mode 100644
index 000000000..85bab4ac6
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/minimum_length_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::MinimumLength, type: :model do
+ let( :default_code ){ "3-Route-6" }
+ let( :factory ){ :route_control_minimum_length }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/omnibus_journey_pattern_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/omnibus_journey_pattern_cccld_spec.rb
new file mode 100644
index 000000000..3fb782e85
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/omnibus_journey_pattern_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::OmnibusJourneyPattern, type: :model do
+ let( :default_code ){ "3-Route-9" }
+ let( :factory ){ :route_control_omnibus_journey_pattern }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_cccld_spec.rb
new file mode 100644
index 000000000..7013ae269
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::OppositeRoute, type: :model do
+ let( :default_code ){ "3-Route-2" }
+ let( :factory ){ :route_control_opposite_route }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_terminus_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_terminus_cccld_spec.rb
new file mode 100644
index 000000000..a3a8d290d
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/opposite_route_terminus_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::OppositeRouteTerminus, type: :model do
+ let( :default_code ){ "3-Route-5" }
+ let( :factory ){ :route_control_opposite_route_terminus }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/speed_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/speed_cccld_spec.rb
new file mode 100644
index 000000000..ad2b67960
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/speed_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::Speed, type: :model do
+ let( :default_code ){ "3-VehicleJourney-2" }
+ let( :factory ){ :route_control_speed }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/stop_points_in_journey_pattern_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/stop_points_in_journey_pattern_cccld_spec.rb
new file mode 100644
index 000000000..62249243d
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/stop_points_in_journey_pattern_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::StopPointsInJourneyPattern, type: :model do
+ let( :default_code ){ "3-Route-6" }
+ let( :factory ){ :route_control_stop_points_in_journey_pattern }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/time_table_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/time_table_cccld_spec.rb
new file mode 100644
index 000000000..cbe14e4a7
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/time_table_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::TimeTable, type: :model do
+ let( :default_code ){ "3-VehicleJourney-4" }
+ let( :factory ){ :route_control_time_table }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/unactivated_stop_points_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/unactivated_stop_points_cccld_spec.rb
new file mode 100644
index 000000000..bf725d743
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/unactivated_stop_points_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::UnactivatedStopPoints, type: :model do
+ let( :default_code ){ "3-Route-10" }
+ let( :factory ){ :route_control_unactivated_stop_points }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/vehicle_journey_at_stops_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/vehicle_journey_at_stops_cccld_spec.rb
new file mode 100644
index 000000000..1268dbc98
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/vehicle_journey_at_stops_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::VehicleJourneyAtStops, type: :model do
+ let( :default_code ){ "3-VehicleJourney-5" }
+ let( :factory ){ :route_control_control_vehicle_journey_at_stops }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/route_control/zdl_stop_area_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/route_control/zdl_stop_area_cccld_spec.rb
new file mode 100644
index 000000000..2b8a11bd1
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/route_control/zdl_stop_area_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RouteControl::ZDLStopArea, type: :model do
+ let( :default_code ){ "3-Route-1" }
+ let( :factory ){ :route_control_zdl_stop_area }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/maximum_length_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/maximum_length_cccld_spec.rb
new file mode 100644
index 000000000..61896ef5e
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/maximum_length_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RoutingConstraintZoneControl::MaximumLength, type: :model do
+ let( :default_code ){ "3-ITL-2" }
+ let( :factory ){ :routing_constraint_zone_control_maximum_length }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/minimum_length_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/minimum_length_cccld_spec.rb
new file mode 100644
index 000000000..e930c2475
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/minimum_length_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RoutingConstraintZoneControl::MinimumLength, type: :model do
+ let( :default_code ){ "3-ITL-3" }
+ let( :factory ){ :routing_constraint_zone_control_minimum_length }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/unactivated_stop_point_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/unactivated_stop_point_cccld_spec.rb
new file mode 100644
index 000000000..aba9b7fc1
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/routing_constraint_zone_control/unactivated_stop_point_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe RoutingConstraintZoneControl::UnactivatedStopPoint, type: :model do
+ let( :default_code ){ "3-ITL-1" }
+ let( :factory ){ :routing_constraint_zone_control_unactivated_stop_point }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/delta_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/delta_cccld_spec.rb
new file mode 100644
index 000000000..0d4bce7ca
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/delta_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe VehicleJourneyControl::Delta, type: :model do
+ let( :default_code ){ "3-VehicleJourney-3" }
+ let( :factory ){ :vehicle_journey_control_delta }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/waiting_time_cccld_spec.rb b/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/waiting_time_cccld_spec.rb
new file mode 100644
index 000000000..34058ef33
--- /dev/null
+++ b/spec/models/compliance_control_class_level_defaults/vehicle_journey_control/waiting_time_cccld_spec.rb
@@ -0,0 +1,7 @@
+
+RSpec.describe VehicleJourneyControl::WaitingTime, type: :model do
+ let( :default_code ){ "3-VehicleJourney-1" }
+ let( :factory ){ :vehicle_journey_control_wating_time }
+
+ it_behaves_like 'ComplianceControl Class Level Defaults'
+end
diff --git a/spec/models/compliance_control_spec.rb b/spec/models/compliance_control_spec.rb
index 0fc830021..50c2b7b8d 100644
--- a/spec/models/compliance_control_spec.rb
+++ b/spec/models/compliance_control_spec.rb
@@ -1,5 +1,3 @@
-require 'rails_helper'
-
RSpec.describe ComplianceControl, type: :model do
let(:compliance_control) { create :compliance_control }
diff --git a/spec/support/data_modifier.rb b/spec/support/data_modifier.rb
new file mode 100644
index 000000000..2b3b00ac5
--- /dev/null
+++ b/spec/support/data_modifier.rb
@@ -0,0 +1,53 @@
+require_relative 'data_modifier/enum'
+require_relative 'data_modifier/hash'
+module Support
+ module DataModifier
+ module InstanceMethods
+ CannotModify = Class.new RuntimeError
+
+ def advance_values(atts, *keys)
+ keys.inject(atts){ |h, k| h.merge( k => atts[k].next) }
+ end
+
+ # return array of atts wich each value modified, unboxing
+ # values if needed
+ def modify_atts(base_atts)
+ base_atts.keys.map do | key |
+ modify_att base_atts, key
+ end.compact
+ end
+
+ private
+ def modify_att atts, key
+ atts.merge(key => modify_value(atts[key]))
+ rescue CannotModify
+ nil
+ end
+ def modify_value value
+ case value
+ when String
+ "#{value}."
+ when Fixnum
+ value + 1
+ when TrueClass
+ false
+ when FalseClass
+ true
+ when Float
+ value * 1.1
+ when Date
+ value + 1.day
+ when Box
+ value.next.value
+ else
+ raise CannotModify
+ end
+ end
+ end
+ end
+end
+
+RSpec.configure do | c |
+ c.include Support::DataModifier::InstanceMethods, type: :checksum
+ c.include Support::DataModifier::InstanceMethods, type: :model
+end
diff --git a/spec/support/data_modifier/bool.rb b/spec/support/data_modifier/bool.rb
new file mode 100644
index 000000000..f4be9bd89
--- /dev/null
+++ b/spec/support/data_modifier/bool.rb
@@ -0,0 +1,18 @@
+require_relative 'box'
+
+module Support
+ module DataModifier
+
+ class BoolBox
+ include Box
+ attr_reader :value
+
+ def initialize value
+ @value = value
+ end
+ def next
+ self.class.new(!value)
+ end
+ end
+ end
+end
diff --git a/spec/support/data_modifier/box.rb b/spec/support/data_modifier/box.rb
new file mode 100644
index 000000000..0847b628c
--- /dev/null
+++ b/spec/support/data_modifier/box.rb
@@ -0,0 +1,21 @@
+require_relative 'hash'
+module Support
+ module DataModifier
+ module Box
+ def next
+ raise "Need to implement #{__method__} in #{self.class}"
+ end
+
+ class << self
+ def unbox atts
+ Hash.map_values(atts, method(:value_of))
+ end
+ def value_of v
+ self === v ? v.value : v
+ end
+ end
+ end
+
+ end
+end
+
diff --git a/spec/support/data_modifier/enum.rb b/spec/support/data_modifier/enum.rb
new file mode 100644
index 000000000..c8a6fe573
--- /dev/null
+++ b/spec/support/data_modifier/enum.rb
@@ -0,0 +1,19 @@
+require_relative 'box'
+
+module Support
+ module DataModifier
+
+ class EnumBox
+ include Box
+ attr_reader :value, :values
+
+ def initialize *enum_values
+ @values = enum_values
+ @value = @values.first
+ end
+ def next
+ self.class.new(*(@values[1..-1] << @values.first))
+ end
+ end
+ end
+end
diff --git a/spec/support/data_modifier/hash.rb b/spec/support/data_modifier/hash.rb
new file mode 100644
index 000000000..05da3cf4f
--- /dev/null
+++ b/spec/support/data_modifier/hash.rb
@@ -0,0 +1,16 @@
+module Support
+ module DataModifier
+ module Hash extend self
+ def map_values hashy, f=nil, &fn
+ raise ArgumentError, "need block or function arg" unless f = fn || f
+ hashy.inject({}){ |h, (k,v)| h.merge(k => f.(v)) }
+ end
+ def first_values ary_hash
+ map_values(ary_hash, &:first)
+ end
+ def last_values ary_hash
+ map_values(ary_hash, &:last)
+ end
+ end
+ end
+end
diff --git a/spec/support/random.rb b/spec/support/random.rb
new file mode 100644
index 000000000..59e1a1475
--- /dev/null
+++ b/spec/support/random.rb
@@ -0,0 +1,30 @@
+module Support
+ module Random
+
+ PRETTY_LARGE_INT = 1 << 30
+
+ def random_hex
+ SecureRandom.hex
+ end
+
+ def random_element from
+ from[random_int(from.size)]
+ end
+
+ def random_int max_plus_one=PRETTY_LARGE_INT
+ (random_number * max_plus_one).to_i
+ end
+
+ def random_number
+ SecureRandom.random_number
+ end
+
+ def random_string
+ SecureRandom.urlsafe_base64
+ end
+ end
+end
+
+RSpec.configure do | c |
+ c.include Support::Random
+end
diff --git a/spec/support/shared_examples/compliance_control_class_level_defaults.rb b/spec/support/shared_examples/compliance_control_class_level_defaults.rb
new file mode 100644
index 000000000..276ac1ca5
--- /dev/null
+++ b/spec/support/shared_examples/compliance_control_class_level_defaults.rb
@@ -0,0 +1,42 @@
+require_relative '../data_modifier'
+
+H = Support::DataModifier::Hash
+RSpec.shared_examples_for 'ComplianceControl Class Level Defaults' do
+ context 'class attributes' do
+ it 'are correctly set' do
+ expect( described_class.default_code).to eq(default_code)
+ end
+ end
+ context 'are used in instantiation' do
+ let( :record ){ create factory }
+ let( :default_att_names ){%w[ code origin_code ]}
+
+ it 'all defaults' do
+ expect( record.attributes.values_at(*default_att_names ))
+ .to eq([ default_code, default_code])
+ end
+ it 'but provided values are not overwritten by defaults' do
+ code = random_string
+ origin_code = random_string
+ # Remove each of the attributes from explicit initialisation to see
+ # its value provided by CCCWDA.
+
+ # atts :: Map(String, (explicit_value, default_value))
+ atts = {
+ 'code' => [code, default_code],
+ 'origin_code' => [origin_code, default_code],
+ }
+ atts.keys.each do |key|
+ # Replace key to be tested by default value
+ expected = H.first_values(atts).merge(key => atts[key].last)
+ expected_values = expected.values_at(*default_att_names)
+ # Remove key to be tested from atts passed to `#create`
+ construction_atts = H.first_values(atts).merge(key => nil).compact
+ explicit = create factory, construction_atts
+
+ expect( explicit.attributes.values_at(*default_att_names ))
+ .to eq(expected_values)
+ end
+ end
+ end
+ end