Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/models/collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,10 @@ def validate_scenario_versions
end

def validate_interpolated
# Ensure interpolated collections (AKA transition paths) have no saved scenarios
# Ensure interpolated collections (AKA transition paths) have one saved scenario
active_saved_scenarios = collection_saved_scenarios.reject(&:marked_for_destruction?)
if self.interpolated? && active_saved_scenarios.size > 1
errors.add(:scenarios, "interpolated collections cannot have more than 1 saved scenario")
if self.interpolated? && active_saved_scenarios.size != 1
errors.add(:scenarios, "interpolated collections must have exactly 1 saved scenario")
end
end

Expand Down
23 changes: 17 additions & 6 deletions spec/factories/collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,28 @@
title { 'My Collection' }
end_year { 2050 }
version { Version.find_by(tag: "latest") }
interpolation { false }

transient do
scenarios_count { 2 }
saved_scenarios_count { interpolation ? 1 : 0 }
end

after(:create) do |myc, evaluator|
create_list(
:collection_scenario,
evaluator.scenarios_count,
collection: myc
)
after(:build) do |collection, evaluator|
evaluator.scenarios_count.times do
collection.scenarios << build(
:collection_scenario,
collection: collection
)
end

evaluator.saved_scenarios_count.times do
collection.collection_saved_scenarios << build(
:collection_saved_scenario,
collection: collection,
user: collection.user
)
end
end
end

Expand Down
6 changes: 5 additions & 1 deletion spec/factories/collection_saved_scenario.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

FactoryBot.define do
factory :collection_saved_scenario do
saved_scenario
transient do
user { nil }
end

saved_scenario { create(:saved_scenario, user: user) }
collection
end
end
4 changes: 2 additions & 2 deletions spec/models/collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@

describe 'number of scenarios' do
let(:user) { create(:user) }
let(:myc) { create(:collection, user: user, scenarios_count: 7) }
let(:myc) { create(:collection, user: user, scenarios_count: 6) }

context 'with more than 6 combined scenarios' do
before do
Expand All @@ -77,7 +77,7 @@
end

it 'is not valid' do
expect(myc).not_to be_valid
expect(myc.reload).not_to be_valid
end
end
end
Expand Down
5 changes: 3 additions & 2 deletions spec/requests/api/collections_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@
end_year: 2050,
scenario_ids: [1, 2, 3],
title: 'My collection',
version: Version.default.tag
version: Version.default.tag,
interpolation: false
}
end

Expand Down Expand Up @@ -440,7 +441,7 @@
it 'does not insert a saved_scenario' do
expect { request }.not_to change { collection.reload.latest_scenario_ids }
expect(response).to have_http_status(:unprocessable_entity)
expect(JSON.parse(response.body)['scenarios']).to include('interpolated collections cannot have more than 1 saved scenario')
expect(JSON.parse(response.body)['scenarios']).to include('interpolated collections must have exactly 1 saved scenario')
end
end

Expand Down
3 changes: 2 additions & 1 deletion spec/services/api/create_collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
area_code: 'nl2019',
end_year: 2050,
scenario_ids: [10, 20],
version: Version.default.tag
version: Version.default.tag,
interpolation: false
}
end

Expand Down