aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/chouette/route.rb9
-rw-r--r--spec/models/chouette/route/route_duplication_spec.rb18
-rw-r--r--spec/support/helpers/model_compare_helpers.rb7
3 files changed, 29 insertions, 5 deletions
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index 3e20dc43e..049ee2881 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -76,11 +76,16 @@ class Chouette::Route < Chouette::TridentActiveRecord
after_commit :journey_patterns_control_route_sections
- def duplicate
+ def duplicate name: nil, published_name: nil
+ overrides = {
+ 'name' => name || self.name,
+ 'published_name' => published_name || self.published_name,
+ 'object_version' => object_version - 1
+ }
keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
atts_for_create = attributes
.slice(*keys_for_create)
- .merge('object_version' => object_version - 1)
+ .merge(overrides)
new_route = self.class.create!(atts_for_create)
duplicate_stop_points(for_route: new_route)
new_route
diff --git a/spec/models/chouette/route/route_duplication_spec.rb b/spec/models/chouette/route/route_duplication_spec.rb
index f24435cf6..74e944181 100644
--- a/spec/models/chouette/route/route_duplication_spec.rb
+++ b/spec/models/chouette/route/route_duplication_spec.rb
@@ -13,6 +13,22 @@ RSpec.describe Route do
route.duplicate
expect( values_for_create(Route.last, except: %w{objectid}) ).to eq( values_for_create( route, except: %w{objectid} ) )
end
+ it 'but some can be redefined optionally', :wip do
+ excluded_attributes = %w{objectid checksum checksum_source}
+ expected_attributes = values_for_create(
+ route,
+ name: 'new name',
+ published_name: 'new published name',
+ except: excluded_attributes )
+
+ route.duplicate name: 'new name', published_name: 'new published name'
+ expect(
+ values_for_create(Route.last, except: excluded_attributes)
+ ).to eq( expected_attributes )
+ end
+ it 'and others cannot' do
+ expect{ route.duplicate name: 'YAN', line_id: 42 }.to raise_error(ArgumentError)
+ end
it 'same associated stop_areeas' do
expect( route.duplicate.stop_areas.pluck(:id) ).to eq(route.stop_areas.pluck(:id))
end
@@ -33,7 +49,7 @@ RSpec.describe Route do
describe 'is idempotent, concerning' do
let( :first_duplicate ){ route.duplicate }
let( :second_duplicate ){ first_duplicate.reload.duplicate }
-
+
it 'the required attributes' do
expect( values_for_create(first_duplicate, except: %w{objectid}) ).to eq( values_for_create( second_duplicate, except: %w{objectid} ) )
end
diff --git a/spec/support/helpers/model_compare_helpers.rb b/spec/support/helpers/model_compare_helpers.rb
index 97e26f300..a10892af0 100644
--- a/spec/support/helpers/model_compare_helpers.rb
+++ b/spec/support/helpers/model_compare_helpers.rb
@@ -1,8 +1,11 @@
module Support::ModelCompareHelpers
- def values_for_create obj, except: []
+ def values_for_create obj, **overrides
+ except = overrides.delete(:except) || []
keys = obj.attributes.keys - except - %w{id created_at updated_at}
- obj.attributes.slice(*keys)
+ overrides.inject(obj.attributes.slice(*keys)){ |atts, (k,v)|
+ atts.merge k.to_s => v
+ }
end
end