Browse Source

Working except for selenium checkbox issues

pull/77/head
baarkerlounger 4 years ago
parent
commit
380f68211d
  1. 2
      app/controllers/case_logs_controller.rb
  2. 20
      app/controllers/soft_validations_controller.rb
  3. 30
      app/javascript/controllers/soft_validations_controller.js
  4. 14
      app/views/form/_validation_override_question.html.erb
  5. 8
      app/views/form/page.html.erb
  6. 1
      config/routes.rb
  7. 16
      spec/features/case_log_spec.rb
  8. 2
      spec/rails_helper.rb

2
app/controllers/case_logs_controller.rb

@ -105,7 +105,7 @@ private
question_params = params["case_log"][question_key]
next unless question_params
if question_info["type"] == "checkbox"
if ["checkbox", "validation_override"].include?(question_info["type"])
question_info["answer_options"].keys.reject { |x| x.match(/divider/) }.each do |option|
result[option] = question_params.include?(option)
end

20
app/controllers/soft_validations_controller.rb

@ -0,0 +1,20 @@
class SoftValidationsController < ApplicationController
def show
@case_log = CaseLog.find(params[:case_log_id])
page_key = request.env["PATH_INFO"].split("/")[-2]
form = FormHandler.instance.get_form("2021_2022")
page = form.all_pages[page_key]
if page_requires_soft_validation_override?(page)
errors = @case_log.soft_errors.values.first
render json: { show: true, label: errors.message, hint: errors.hint_text }
else
render json: { show: false }
end
end
private
def page_requires_soft_validation_override?(page)
@case_log.soft_errors.present? && @case_log.soft_errors.keys.first == page["soft_validations"]&.keys&.first
end
end

30
app/javascript/controllers/soft_validations_controller.js

@ -0,0 +1,30 @@
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
initialize() {
let url = window.location.href + "/soft_validations"
let xhr = new XMLHttpRequest()
let div = document.getElementById("soft-validations")
xhr.open("GET", url, true)
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xhr.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
let response = JSON.parse(this.response)
if(response["show"]){
div.style.display = "block"
let innerHTML = div.innerHTML
innerHTML = innerHTML.replace("soft-validations-placeholder-message", response["label"])
innerHTML = innerHTML.replace("soft-validations-placeholder-hint-text", response["hint"])
div.innerHTML = innerHTML
} else {
div.style.display = "none"
let buttons = document.getElementsByName(`case_log[override_net_income_validation][]`)
Object.entries(buttons).forEach(([idx, button]) => {
button.checked = false;
})
}
}
}
xhr.send()
}
}

14
app/views/form/_validation_override_question.html.erb

@ -1,11 +1,11 @@
<div class="govuk-form-group govuk-form-group--error">
<%= f.govuk_check_boxes_fieldset @case_log.soft_errors.keys.first,
legend: { text: @case_log.soft_errors.values.first.message, size: "l" },
hint: { text: @case_log.soft_errors.values.first.hint_text } do %>
<div id="soft-validations" class="govuk-form-group govuk-form-group--error" style='display:none;'>
<%= f.govuk_check_boxes_fieldset page_info["soft_validations"]&.keys&.first,
legend: { text: "soft-validations-placeholder-message", size: "l" },
hint: { text: "soft-validations-placeholder-hint-text" },
form_group: { "data-controller": "soft-validations" } do %>
<%= f.govuk_check_box @case_log.soft_errors.keys.first, @case_log.soft_errors.keys.first,
label: { text: "Yes" },
checked: f.object.send(@case_log.soft_errors.keys.first)
<%= f.govuk_check_box page_info["soft_validations"]&.keys&.first, page_info["soft_validations"]&.keys&.first,
label: { text: "Yes" }
%>
<% end %>
</div>

8
app/views/form/page.html.erb

@ -1,7 +1,5 @@
<meta http-equiv="Pragma" content="no-cache">
<% content_for :before_content do %>
<%= link_to 'Back', :back, class: "govuk-back-link" %>
<%= link_to 'Back', 'javascript:history.back()', class: "govuk-back-link" %>
<% end %>
<%= turbo_frame_tag "case_log_form", target: "_top" do %>
@ -19,8 +17,8 @@
</div>
<% end %>
<% if @case_log.soft_errors.present? && @case_log.soft_errors.keys.first == page_info["soft_validations"]&.keys&.first %>
<%= render partial: "form/validation_override_question", locals: { f: f } %>
<% if page_info["soft_validations"]&.keys&.first %>
<%= render partial: "form/validation_override_question", locals: { f: f, page_key: page_key, page_info: page_info } %>
<% end %>
<%= f.hidden_field :page, value: page_key %>

1
config/routes.rb

@ -11,6 +11,7 @@ Rails.application.routes.draw do
resources :case_logs do
form.all_pages.keys.map do |page|
get page.to_s, to: "case_logs##{page}"
get "#{page}/soft_validations", to: "soft_validations#show"
end
form.all_subsections.keys.map do |subsection|
get "#{subsection}/check_answers", to: "case_logs#check_answers"

16
spec/features/case_log_spec.rb

@ -216,6 +216,17 @@ RSpec.describe "Test Features" do
click_link(text: "Back")
expect(page).to have_field("case-log-tenant-code-field")
end
it "doesn't get stuck in infinite loops", js: true do
visit("/case_logs")
visit("/case_logs/#{id}/net_income")
fill_in("case-log-net-income-field", with: 740)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true)
click_button("Save and continue")
click_link(text: "Back")
click_link(text: "Back")
expect(page).to have_current_path("/case_logs")
end
end
end
@ -230,7 +241,7 @@ RSpec.describe "Test Features" do
end
end
context "when changing an answer from the check answers page" do
context "when changing an answer from the check answers page", js: true do
it "the back button routes correctly" do
visit("/case_logs/#{id}/household_characteristics/check_answers")
first("a", text: /Answer/).click
@ -388,12 +399,13 @@ RSpec.describe "Test Features" do
let(:income_over_soft_limit) { 750 }
let(:income_under_soft_limit) { 700 }
it "prompts the user to confirm the value is correct" do
it "prompts the user to confirm the value is correct", js: true do
visit("/case_logs/#{case_log.id}/net_income")
fill_in("case-log-net-income-field", with: income_over_soft_limit)
choose("case-log-net-income-frequency-weekly-field", allow_label_click: true)
click_button("Save and continue")
expect(page).to have_content("Are you sure this is correct?")
binding.pry
check("case-log-override-net-income-validation-override-net-income-validation-field", allow_label_click: true)
click_button("Save and continue")
expect(page).to have_current_path("/case_logs/#{case_log.id}/net_income_uc_proportion")

2
spec/rails_helper.rb

@ -9,7 +9,7 @@ require "capybara/rspec"
require "database_cleaner/active_record"
# Comment to run `js: true specs` with visible browser interaction
Capybara.javascript_driver = :selenium_headless
# Capybara.javascript_driver = :selenium_headless
# Add additional requires below this line. Rails is not loaded until this point!

Loading…
Cancel
Save