Browse Source

Allow clearing all error questions

pull/2483/head
Kat 2 years ago
parent
commit
b6787c6ea1
  1. 8
      app/controllers/check_errors_controller.rb
  2. 8
      app/controllers/form_controller.rb
  3. 32
      app/views/check_errors/confirm_clear_all_answers.html.erb
  4. 2
      app/views/check_errors/confirm_clear_answer.html.erb
  5. 2
      app/views/form/check_errors.html.erb
  6. 134
      spec/requests/check_errors_controller_spec.rb

8
app/controllers/check_errors_controller.rb

@ -8,9 +8,15 @@ class CheckErrorsController < ApplicationController
return render_not_found unless @log return render_not_found unless @log
@related_question_ids = params[@log.model_name.param_key].keys.reject { |id| id == "page_id" } @related_question_ids = params[@log.model_name.param_key].keys.reject { |id| id == "page_id" }
@page = @log.form.get_page(params[@log.model_name.param_key]["page_id"])
if params["clear_all"]
@questions_to_clear = @related_question_ids.map { |id| @log.form.get_question(id, @log).page.questions.map(&:id) }.flatten
render :confirm_clear_all_answers
else
question_id = @related_question_ids.find { |id| !params[id].nil? } question_id = @related_question_ids.find { |id| !params[id].nil? }
@question = @log.form.get_question(question_id, @log) @question = @log.form.get_question(question_id, @log)
@page = @log.form.get_page(params[@log.model_name.param_key]["page_id"]) end
end end
private private

8
app/controllers/form_controller.rb

@ -402,11 +402,13 @@ private
end end
def render_check_errors_page def render_check_errors_page
if params[@log.model_name.param_key]["clear_question_id"] if params[@log.model_name.param_key]["clear_question_ids"].present?
question_id = params[@log.model_name.param_key]["clear_question_id"] question_ids = params[@log.model_name.param_key]["clear_question_ids"].split(" ")
question_ids.each do |question_id|
@log.form.get_question(question_id, @log).page.questions.map(&:id).each { |id| @log[id] = nil } @log.form.get_question(question_id, @log).page.questions.map(&:id).each { |id| @log[id] = nil }
end
@log.save! @log.save!
@questions = params[@log.model_name.param_key].keys.reject { |id| %w[clear_question_id page].include?(id) }.map { |id| @log.form.get_question(id, @log) } @questions = params[@log.model_name.param_key].keys.reject { |id| %w[clear_question_ids page].include?(id) }.map { |id| @log.form.get_question(id, @log) }
else else
responses_for_page = responses_for_page(@page) responses_for_page = responses_for_page(@page)
@log.assign_attributes(responses_for_page) @log.assign_attributes(responses_for_page)

32
app/views/check_errors/confirm_clear_all_answers.html.erb

@ -0,0 +1,32 @@
<% content_for :before_content do %>
<% content_for :title, "Are you sure you want to clear all?" %>
<% end %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop">
<h1 class="govuk-heading-xl">
<%= content_for(:title) %>
</h1>
<p class="govuk-body">You've selected <%= @questions_to_clear.count %> answers to clear</p>
<%= govuk_warning_text(text: "You will not be able to undo this action") %>
<%= form_with model: @log, url: send("#{@log.model_name.param_key}_#{@page.id}_path", @log), method: "post", local: true do |f| %>
<% @related_question_ids.each do |id| %>
<%= f.hidden_field id, value: @log[id] %>
<% end %>
<%= f.hidden_field :clear_question_ids, value: @questions_to_clear %>
<%= f.hidden_field :page, value: @page.id %>
<div class="govuk-button-group">
<%= f.govuk_submit "Confirm and continue", name: "check_errors" %>
<%= govuk_button_link_to(
"Cancel",
"javascript:history.back()",
secondary: true,
) %>
</div>
<% end %>
</div>
</div>

2
app/views/check_errors/confirm_clear_answer.html.erb

@ -15,7 +15,7 @@
<%= f.hidden_field id, value: @log[id] %> <%= f.hidden_field id, value: @log[id] %>
<% end %> <% end %>
<%= f.hidden_field :clear_question_id, value: @question.id %> <%= f.hidden_field :clear_question_ids, value: [@question.id] %>
<%= f.hidden_field :page, value: @page.id %> <%= f.hidden_field :page, value: @page.id %>
<div class="govuk-button-group"> <div class="govuk-button-group">

2
app/views/form/check_errors.html.erb

@ -11,7 +11,7 @@
Make sure these answers are correct: Make sure these answers are correct:
</span> </span>
<span class="govuk-body govuk-!-text-align-right govuk-grid-column-one-third"> <span class="govuk-body govuk-!-text-align-right govuk-grid-column-one-third">
<%= govuk_link_to "Clear all", send("#{@log.model_name.param_key}_confirm_clear_all_answers_path", @log) %> <input type="submit" value="Clear all" class="govuk-body govuk-link submit-button-link" name="clear_all">
</span> </span>
</div> </div>
</h1> </h1>

134
spec/requests/check_errors_controller_spec.rb

@ -59,7 +59,7 @@ RSpec.describe CheckErrorsController, type: :request do
it "displays correct clear links" do it "displays correct clear links" do
expect(page).to have_selector("input[type=submit][value='Clear']", count: 3) expect(page).to have_selector("input[type=submit][value='Clear']", count: 3)
expect(page).to have_link("Clear all", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-all-answers") expect(page).to have_button("Clear all")
end end
end end
@ -84,8 +84,8 @@ RSpec.describe CheckErrorsController, type: :request do
end end
it "displays correct clear links" do it "displays correct clear links" do
expect(page).to have_button("Clear", count: 3) expect(page.all(:button, value: "Clear").count).to eq(3)
expect(page).to have_link("Clear all", href: "/sales-logs/#{sales_log.id}/confirm-clear-all-answers") expect(page).to have_button("Clear all")
end end
end end
end end
@ -179,6 +179,66 @@ RSpec.describe CheckErrorsController, type: :request do
end end
end end
describe "confirm clear all answers" do
context "when user is signed in" do
context "and clearing all lettings questions" do
let(:params) do
{
id: lettings_log.id,
clear_all: "Clear all",
lettings_log: {
earnings: "100000",
incfreq: "1",
hhmemb: "2",
page_id: "income_amount",
},
}
end
before do
sign_in user
post "/lettings-logs/#{lettings_log.id}/confirm-clear-answer", params:
end
it "displays correct clear links" do
expect(page).to have_content("Are you sure you want to clear all")
expect(page).to have_content("You've selected 5 answers to clear")
expect(page).to have_content("You will not be able to undo this action")
expect(page).to have_link("Cancel")
expect(page).to have_button("Confirm and continue")
end
end
context "and clearing all sales question" do
let(:params) do
{
id: sales_log.id,
clear_all: "Clear all",
sales_log: {
income1: "100000",
la: "E09000001",
ownershipsch: "1",
page_id: "buyer_1_income",
},
}
end
before do
sign_in user
post "/sales-logs/#{sales_log.id}/confirm-clear-answer", params:
end
it "displays correct clear links" do
expect(page).to have_content("Are you sure you want to clear all")
expect(page).to have_content("You've selected 4 answers to clear")
expect(page).to have_content("You will not be able to undo this action")
expect(page).to have_link("Cancel")
expect(page).to have_button("Confirm and continue")
end
end
end
end
describe "clear answer" do describe "clear answer" do
context "when user is not signed in" do context "when user is not signed in" do
it "redirects to sign in page for lettings" do it "redirects to sign in page for lettings" do
@ -219,7 +279,7 @@ RSpec.describe CheckErrorsController, type: :request do
earnings: "100000", earnings: "100000",
incfreq: "1", incfreq: "1",
hhmemb: "2", hhmemb: "2",
clear_question_id: "hhmemb", clear_question_ids: "hhmemb",
page: "income_amount", page: "income_amount",
}, },
check_errors: "", check_errors: "",
@ -247,7 +307,7 @@ RSpec.describe CheckErrorsController, type: :request do
income1: "100000", income1: "100000",
la: "E09000001", la: "E09000001",
ownershipsch: "1", ownershipsch: "1",
clear_question_id: "income1", clear_question_ids: "income1",
page: "buyer_1_income", page: "buyer_1_income",
}, },
check_errors: "", check_errors: "",
@ -327,4 +387,68 @@ RSpec.describe CheckErrorsController, type: :request do
end end
end end
end end
describe "clear all answers" do
context "when user is signed in" do
context "and clearing all lettings question" do
let(:params) do
{
id: lettings_log.id,
lettings_log: {
earnings: "100000",
incfreq: "1",
hhmemb: "2",
clear_question_ids: "earnings incfreq hhmemb",
page: "income_amount",
},
check_errors: "",
}
end
before do
sign_in user
post "/lettings-logs/#{lettings_log.id}/income-amount", params:
end
it "correctly clears the values" do
expect(page).to have_content("Make sure these answers are correct")
expect(page).to have_content("You didn’t answer this question")
expect(page.all(:button, value: "Clear").count).to eq(0)
expect(lettings_log.reload.earnings).to eq(nil)
expect(lettings_log.reload.incfreq).to eq(nil)
expect(lettings_log.reload.hhmemb).to eq(nil)
end
end
context "and clearing all sales question" do
let(:params) do
{
id: sales_log.id,
sales_log: {
income1: "100000",
la: "E09000001",
ownershipsch: "1",
clear_question_ids: "income1 la ownershipsch",
page: "buyer_1_income",
},
check_errors: "",
}
end
before do
sign_in user
post "/sales-logs/#{sales_log.id}/buyer-1-income", params:
end
it "displays correct clear links" do
expect(page).to have_content("Make sure these answers are correct")
expect(page).to have_content("You didn’t answer this question")
expect(page.all(:button, value: "Clear").count).to eq(0)
expect(sales_log.reload.income1).to eq(nil)
expect(sales_log.reload.la).to eq(nil)
expect(sales_log.reload.ownershipsch).to eq(nil)
end
end
end
end
end end

Loading…
Cancel
Save