From 01fa6eef23dece28860420fa3436fc1e5ec3c3fd Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 27 Jun 2022 10:06:14 +0100 Subject: [PATCH] Implement changing answers (except the details one) --- app/controllers/schemes_controller.rb | 37 +++++++---- app/helpers/details_table_helper.rb | 2 +- app/views/schemes/confirm_secondary.html.erb | 5 +- .../schemes/primary_client_group.html.erb | 3 + .../schemes/secondary_client_group.html.erb | 5 +- spec/features/schemes_spec.rb | 64 +++++++++++++++++++ 6 files changed, 100 insertions(+), 16 deletions(-) diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 36bf409c6..bb132ee7a 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -36,18 +36,29 @@ class SchemesController < ApplicationController def update if @scheme.update(scheme_params) - schemes_path = case params[:scheme][:page] - when "primary-client-group" - scheme_confirm_secondary_client_group_path(@scheme) - when "confirm-secondary" - @scheme.has_other_client_group == "Yes" ? scheme_secondary_client_group_path(@scheme) : scheme_support_path(@scheme) - when "secondary-client-group" - scheme_support_path(@scheme) - when "support" - scheme_check_answers_path(@scheme) - end - - redirect_to schemes_path + if params[:scheme][:check_answers] == "true" + if params[:scheme][:page] == "confirm-secondary" && @scheme.has_other_client_group == "Yes" + redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") + else + if @scheme.has_other_client_group == "No" + @scheme.update!(secondary_client_group: nil) + end + redirect_to scheme_check_answers_path(@scheme) + end + else + schemes_path = case params[:scheme][:page] + when "primary-client-group" + scheme_confirm_secondary_client_group_path(@scheme) + when "confirm-secondary" + @scheme.has_other_client_group == "Yes" ? scheme_secondary_client_group_path(@scheme) : scheme_support_path(@scheme) + when "secondary-client-group" + scheme_support_path(@scheme) + when "support" + scheme_check_answers_path(@scheme) + end + + redirect_to schemes_path + end else render request.current_url, status: :unprocessable_entity end @@ -78,7 +89,7 @@ class SchemesController < ApplicationController private def scheme_params - params.require(:scheme).permit(:service_name, :sensitive, :organisation_id, :scheme_type, :registered_under_care_act, :total_units, :id, :confirmed, :has_other_client_group) + params.require(:scheme).permit(:service_name, :sensitive, :organisation_id, :scheme_type, :registered_under_care_act, :total_units, :id, :confirmed, :has_other_client_group, :primary_client_group, :secondary_client_group) end def search_term diff --git a/app/helpers/details_table_helper.rb b/app/helpers/details_table_helper.rb index b436cab38..c39bf75d7 100644 --- a/app/helpers/details_table_helper.rb +++ b/app/helpers/details_table_helper.rb @@ -4,7 +4,7 @@ module DetailsTableHelper list = attribute[:value].map { |value| "
  • #{value}
  • " }.join simple_format(list, { class: "govuk-list govuk-list--bullet" }, wrapper_tag: "ul") else - value = attribute[:value].is_a?(Array) ? attribute[:value].first : attribute[:value] + value = attribute[:value].is_a?(Array) ? attribute[:value].first : attribute[:value] || "None" simple_format(value.to_s, { class: "govuk-body" }, wrapper_tag: "p") end diff --git a/app/views/schemes/confirm_secondary.html.erb b/app/views/schemes/confirm_secondary.html.erb index 8f2094c4a..d27bfaac6 100644 --- a/app/views/schemes/confirm_secondary.html.erb +++ b/app/views/schemes/confirm_secondary.html.erb @@ -23,7 +23,10 @@ %> <%= f.hidden_field :page, value: "confirm-secondary" %> - + <% if request.query_parameters["check_answers"] == "true" %> + <%= f.hidden_field :check_answers, value: "true" %> + <% end %> + <%= f.govuk_submit "Save and continue" %> diff --git a/app/views/schemes/primary_client_group.html.erb b/app/views/schemes/primary_client_group.html.erb index 4ad176bd4..027e14bdc 100644 --- a/app/views/schemes/primary_client_group.html.erb +++ b/app/views/schemes/primary_client_group.html.erb @@ -26,6 +26,9 @@ legend: nil %> <%= f.hidden_field :page, value: "primary-client-group" %> + <% if request.query_parameters["check_answers"] == "true" %> + <%= f.hidden_field :check_answers, value: "true" %> + <% end %> <%= f.govuk_submit "Save and continue" %> diff --git a/app/views/schemes/secondary_client_group.html.erb b/app/views/schemes/secondary_client_group.html.erb index 7068973d4..3184fa746 100644 --- a/app/views/schemes/secondary_client_group.html.erb +++ b/app/views/schemes/secondary_client_group.html.erb @@ -25,7 +25,10 @@ legend: nil %> <%= f.hidden_field :page, value: "secondary-client-group" %> - + <% if request.query_parameters["check_answers"] == "true" %> + <%= f.hidden_field :check_answers, value: "true" %> + <% end %> + <%= f.govuk_submit "Save and continue" %> diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index 2319bc380..ffbe8ecd0 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -294,6 +294,70 @@ RSpec.describe "Schemes scheme Features" do end end end + + context "when changing answers" do + let!(:scheme) { FactoryBot.create(:scheme) } + + before do + visit "/schemes/#{scheme.id}/check-answers" + end + + it "displays change links" do + assert_selector "a", text: "Change", count: 12 + end + + it "allows changing details questions" do + end + + it "allows changing primary-client-group question" do + click_link("Change", href: "/schemes/#{scheme.id}/primary-client-group?check_answers=true") + expect(page).to have_current_path("/schemes/#{scheme.id}/primary-client-group?check_answers=true") + + choose "Older people with support needs" + click_button "Save and continue" + + expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") + expect(page).to have_content "Older people with support needs" + end + + it "allows changing secondary-client-group question" do + click_link("Change", href: "/schemes/#{scheme.id}/secondary-client-group?check_answers=true") + expect(page).to have_current_path("/schemes/#{scheme.id}/secondary-client-group?check_answers=true") + + choose "People at risk of domestic violence" + click_button "Save and continue" + + expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") + expect(page).to have_content "People at risk of domestic violence" + end + + it "allows changing confirm-secondary-client-group question to yes" do + click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true") + expect(page).to have_current_path("/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true") + + choose "Yes" + click_button "Save and continue" + + expect(page).to have_current_path("/schemes/#{scheme.id}/secondary-client-group?check_answers=true") + + choose "People at risk of domestic violence" + click_button "Save and continue" + + expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") + expect(page).to have_content "People at risk of domestic violence" + end + + it "allows changing confirm-secondary-client-group question to no" do + click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true") + expect(page).to have_current_path("/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true") + + choose "No" + click_button "Save and continue" + + expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") + expect(page).to have_content "None" + end + end end end end