diff --git a/app/models/form/setup/pages/location.rb b/app/models/form/setup/pages/location.rb index 2f58c9353..f61d86736 100644 --- a/app/models/form/setup/pages/location.rb +++ b/app/models/form/setup/pages/location.rb @@ -1,20 +1,24 @@ class Form::Setup::Pages::Location < ::Form::Page - def initialize(id, hsh, subsection) + def initialize(_id, hsh, subsection) super("location", hsh, subsection) @header = "" @description = "" @questions = questions # Only display if there is more than one location @depends_on = [{ - "supported_housing_schemes_enabled?" => true, - # scheme.locations.size > 1 => true - }] + "supported_housing_schemes_enabled?" => true, + "needstype" => 2, + "scheme.locations.size" => { + "operator" => ">", + "operand" => 1, + }, + }] @derived = true end def questions [ - Form::Setup::Questions::Location.new(nil, nil, self) + Form::Setup::Questions::Location.new(nil, nil, self), ] end end diff --git a/app/models/form/setup/pages/rent_type.rb b/app/models/form/setup/pages/rent_type.rb index d72502139..317fa0e0c 100644 --- a/app/models/form/setup/pages/rent_type.rb +++ b/app/models/form/setup/pages/rent_type.rb @@ -1,5 +1,5 @@ class Form::Setup::Pages::RentType < ::Form::Page - def initialize(id, hsh, subsection) + def initialize(_id, hsh, subsection) super("rent_type", hsh, subsection) @header = "" @description = "" diff --git a/app/models/form/setup/pages/scheme.rb b/app/models/form/setup/pages/scheme.rb index 7b46edc90..75e41ca14 100644 --- a/app/models/form/setup/pages/scheme.rb +++ b/app/models/form/setup/pages/scheme.rb @@ -1,17 +1,19 @@ class Form::Setup::Pages::Scheme < ::Form::Page - def initialize(id, hsh, subsection) + def initialize(_id, hsh, subsection) super("scheme", hsh, subsection) @header = "" @description = "" @questions = questions - - @depends_on = [{ "supported_housing_schemes_enabled?" => true }] + @depends_on = [{ + "supported_housing_schemes_enabled?" => true, + "needstype" => 2, + }] @derived = true end def questions [ - Form::Setup::Questions::SchemeId.new(nil, nil, self) + Form::Setup::Questions::SchemeId.new(nil, nil, self), ] end end diff --git a/app/models/form/setup/questions/location.rb b/app/models/form/setup/questions/location.rb index 6327fbceb..afcf8c90a 100644 --- a/app/models/form/setup/questions/location.rb +++ b/app/models/form/setup/questions/location.rb @@ -6,13 +6,20 @@ class Form::Setup::Questions::Location < ::Form::Question @header = "Which location used by is this log for?" @hint_text = "" @type = "radio" - @answer_options = ANSWER_OPTIONS + @answer_options = location_answers @derived = true unless FeatureToggle.supported_housing_schemes_enabled? @page = page end - ANSWER_OPTIONS = { - "1" => { "value" => "General needs" }, - "2" => { "value" => "Supported housing" }, - }.freeze + def location_answers + {} + end + + def hidden_in_check_answers?(case_log, _current_user = nil) + !supported_housing_selected?(case_log) + end + + def supported_housing_selected?(case_log) + case_log.needstype == 2 + end end diff --git a/app/models/form/setup/questions/scheme_id.rb b/app/models/form/setup/questions/scheme_id.rb index 02571b916..79caeedc9 100644 --- a/app/models/form/setup/questions/scheme_id.rb +++ b/app/models/form/setup/questions/scheme_id.rb @@ -1,5 +1,5 @@ class Form::Setup::Questions::SchemeId < ::Form::Question - def initialize(id, hsh, page) + def initialize(_id, hsh, page) super("scheme_id", hsh, page) @check_answer_label = "Scheme name" @header = "What scheme is this log for?" @@ -11,19 +11,20 @@ class Form::Setup::Questions::SchemeId < ::Form::Question def answer_options answer_opts = {} return answer_opts unless ActiveRecord::Base.connected? + Scheme.select(:id, :service_name).each_with_object(answer_opts) do |scheme, hsh| hsh[scheme.id] = scheme.service_name hsh end end - def displayed_answer_options(case_log) + def displayed_answer_options(case_log) return {} unless case_log.created_by + user_org_scheme_ids = Scheme.where("organisation_id = #{case_log.created_by.organisation_id}").map(&:id) answer_options.select { |k, _v| user_org_scheme_ids.include?(k) } end - private def selected_answer_option_is_derived?(_case_log) diff --git a/app/models/form/setup/subsections/setup.rb b/app/models/form/setup/subsections/setup.rb index 5fcf1d3e1..0f481af6b 100644 --- a/app/models/form/setup/subsections/setup.rb +++ b/app/models/form/setup/subsections/setup.rb @@ -13,6 +13,7 @@ class Form::Subsections::Setup < ::Form::Subsection Form::Setup::Pages::CreatedBy.new(nil, nil, self), Form::Setup::Pages::NeedsType.new(nil, nil, self), Form::Setup::Pages::Scheme.new(nil, nil, self), + Form::Setup::Pages::Location.new(nil, nil, self), Form::Setup::Pages::Renewal.new(nil, nil, self), Form::Setup::Pages::TenancyStartDate.new(nil, nil, self), Form::Setup::Pages::RentType.new(nil, nil, self), diff --git a/spec/models/form/setup/pages/location_spec.rb b/spec/models/form/setup/pages/location_spec.rb index 82118f236..c72effb75 100644 --- a/spec/models/form/setup/pages/location_spec.rb +++ b/spec/models/form/setup/pages/location_spec.rb @@ -30,7 +30,11 @@ RSpec.describe Form::Setup::Pages::Location, type: :model do it "has the correct depends_on" do expect(page.depends_on).to eq([{ "supported_housing_schemes_enabled?" => true, - scheme.locations.size > 1 => true + "needstype" => 2, + "scheme.locations.size" => { + "operator" => ">", + "operand" => 1, + }, }]) end end diff --git a/spec/models/form/setup/pages/scheme_spec.rb b/spec/models/form/setup/pages/scheme_spec.rb index e95caea64..841516fe5 100644 --- a/spec/models/form/setup/pages/scheme_spec.rb +++ b/spec/models/form/setup/pages/scheme_spec.rb @@ -12,7 +12,7 @@ RSpec.describe Form::Setup::Pages::Scheme, type: :model do end it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[scheme]) + expect(page.questions.map(&:id)).to eq(%w[scheme_id]) end it "has the correct id" do @@ -28,6 +28,6 @@ RSpec.describe Form::Setup::Pages::Scheme, type: :model do end it "has the correct depends_on" do - expect(page.depends_on).to eq([{ "supported_housing_schemes_enabled?" => true }]) + expect(page.depends_on).to eq([{ "needstype" => 2, "supported_housing_schemes_enabled?" => true }]) end end diff --git a/spec/models/form/setup/questions/location_spec.rb b/spec/models/form/setup/questions/location_spec.rb index 809e24049..bef7a7e49 100644 --- a/spec/models/form/setup/questions/location_spec.rb +++ b/spec/models/form/setup/questions/location_spec.rb @@ -28,13 +28,10 @@ RSpec.describe Form::Setup::Questions::Location, type: :model do end it "is marked as derived" do - expect(question.derived?).to be true + expect(question.derived?).to be_falsey end it "has the correct answer_options" do - expect(question.answer_options).to eq({ - "1" => { "value" => "General needs" }, - "2" => { "value" => "Supported housing" }, - }) + expect(question.answer_options).to eq({}) end end diff --git a/spec/models/form/setup/questions/scheme_id_spec.rb b/spec/models/form/setup/questions/scheme_id_spec.rb index f96e70680..d71d8216b 100644 --- a/spec/models/form/setup/questions/scheme_id_spec.rb +++ b/spec/models/form/setup/questions/scheme_id_spec.rb @@ -39,17 +39,19 @@ RSpec.describe Form::Setup::Questions::SchemeId, type: :model do expect(question.derived?).to be false end - context "When a user is signed in" do - let(:organisation) { FactoryBot.create(:organisation)} - let(:organisation_2) { FactoryBot.create(:organisation)} + context "when a user is signed in" do + let(:organisation) { FactoryBot.create(:organisation) } + let(:organisation_2) { FactoryBot.create(:organisation) } let(:user) { FactoryBot.create(:user, organisation_id: organisation.id) } - let(:scheme) { FactoryBot.create(:scheme, organisation_id: organisation.id ) } - let!(:scheme_2) { FactoryBot.create(:scheme, organisation_id: organisation_2.id ) } - let(:case_log) { FactoryBot.create(:case_log, created_by: user)} - - + let(:scheme) { FactoryBot.create(:scheme, organisation_id: organisation.id) } + let(:case_log) { FactoryBot.create(:case_log, created_by: user) } + + before do + FactoryBot.create(:scheme, organisation_id: organisation_2.id) + end + it "has the correct answer_options based on the schemes the user's organisation owns or manages" do - expected_answer = { scheme.id => "#{scheme.service_name}" } + expected_answer = { scheme.id => scheme.service_name } expect(question.displayed_answer_options(case_log)).to eq(expected_answer) end end diff --git a/spec/models/form/setup/subsections/setup_spec.rb b/spec/models/form/setup/subsections/setup_spec.rb index 8da7123a1..08744eadc 100644 --- a/spec/models/form/setup/subsections/setup_spec.rb +++ b/spec/models/form/setup/subsections/setup_spec.rb @@ -16,6 +16,8 @@ RSpec.describe Form::Setup::Subsections::Setup, type: :model do %w[organisation created_by needs_type + scheme + location renewal tenancy_start_date rent_type diff --git a/spec/models/form_handler_spec.rb b/spec/models/form_handler_spec.rb index b8959ca88..2222d737e 100644 --- a/spec/models/form_handler_spec.rb +++ b/spec/models/form_handler_spec.rb @@ -17,7 +17,7 @@ RSpec.describe FormHandler do form_handler = described_class.instance form = form_handler.get_form(test_form_name) expect(form).to be_a(Form) - expect(form.pages.count).to eq(42) + expect(form.pages.count).to eq(44) end end diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb index 0dd5385c2..bb4db01d2 100644 --- a/spec/requests/schemes_controller_spec.rb +++ b/spec/requests/schemes_controller_spec.rb @@ -393,7 +393,8 @@ RSpec.describe SchemesController, type: :request do end it "has correct title" do - expect(page).to have_title("#{scheme.service_name} - Submit social housing lettings and sales data (CORE) - GOV.UK") + expected_title = CGI.escapeHTML("#{scheme.service_name} - Submit social housing lettings and sales data (CORE) - GOV.UK") + expect(page).to have_title(expected_title) end context "when paginating over 20 results" do