From bd05b8e531a64255c66862af84b0a55f085f7f1f Mon Sep 17 00:00:00 2001 From: Dushan Despotovic Date: Fri, 1 Apr 2022 17:13:39 +0100 Subject: [PATCH] WIP --- app/controllers/form_controller.rb | 12 +++++- app/frontend/application.js | 10 ++++- app/frontend/styles/application.scss | 6 ++- app/views/case_logs/_tasklist.html.erb | 4 ++ app/views/form/review.html.erb | 33 +++++++++++++++ config/forms/2021_2022.json | 51 +++++++----------------- config/routes.rb | 1 + db/schema.rb | 2 +- package.json | 1 + spec/features/form/review_page_spec.rb | 34 ++++++++++++++++ spec/features/form/tasklist_page_spec.rb | 7 ++++ webpack.config.js | 2 +- yarn.lock | 22 +++++++++- 13 files changed, 141 insertions(+), 44 deletions(-) create mode 100644 app/views/form/review.html.erb create mode 100644 spec/features/form/review_page_spec.rb diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 295a82c16..1160fcf06 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -1,7 +1,7 @@ class FormController < ApplicationController before_action :authenticate_user! - before_action :find_resource, only: [:submit_form] - before_action :find_resource_by_named_id, except: [:submit_form] + before_action :find_resource, only: [:submit_form, :review] + before_action :find_resource_by_named_id, except: [:submit_form, :review] def submit_form if @case_log @@ -37,6 +37,14 @@ class FormController < ApplicationController end end + def review + if @case_log + render "form/review" + else + render_not_found + end + end + FormHandler.instance.forms.each do |_key, form| form.pages.map do |page| define_method(page.id) do |_errors = {}| diff --git a/app/frontend/application.js b/app/frontend/application.js index 98742bb09..708629ad9 100644 --- a/app/frontend/application.js +++ b/app/frontend/application.js @@ -12,9 +12,15 @@ import "custom-event-polyfill" import "intersection-observer" // +// Import GOV.UK Frontend +import GOVUKFrontend from 'govuk-frontend' + +// Import GOV.UK Prototype Components +import GOVUKPrototypeComponents from 'govuk-prototype-components' + require.context("govuk-frontend/govuk/assets") -import { initAll } from "govuk-frontend" import "./styles/application.scss" import "./controllers" -initAll() +GOVUKFrontend.initAll() +GOVUKPrototypeComponents.initAll() diff --git a/app/frontend/styles/application.scss b/app/frontend/styles/application.scss index 3d01074ec..f2251ea5d 100644 --- a/app/frontend/styles/application.scss +++ b/app/frontend/styles/application.scss @@ -10,7 +10,11 @@ $govuk-font-url-function: frontend-font-url; $govuk-image-url-function: frontend-image-url; $govuk-global-styles: true; -@import "~govuk-frontend/govuk/all"; +// Import GOV.UK Frontend +@import "govuk-frontend/govuk/all"; + +// Import GOV.UK Prototype Components +// @import "govuk-prototype-components/x-govuk/all"; @import "accessible-autocomplete"; @import "button"; diff --git a/app/views/case_logs/_tasklist.html.erb b/app/views/case_logs/_tasklist.html.erb index 42adcd340..a1ae6d2f6 100644 --- a/app/views/case_logs/_tasklist.html.erb +++ b/app/views/case_logs/_tasklist.html.erb @@ -24,3 +24,7 @@ <% end %> + +

Review and submit

+

Review your answers and submit this log to the Department of Levelling Up, Housing & Communities.

+<%= govuk_button_link_to 'Review lettings log', "/logs/#{@case_log.id}/review" %> \ No newline at end of file diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb new file mode 100644 index 000000000..b5827d854 --- /dev/null +++ b/app/views/form/review.html.erb @@ -0,0 +1,33 @@ +<% content_for :title, "Review lettings log" %> +<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { + "Logs" => "/logs", + "Log #{@case_log.id.to_s}" => "/logs/" + @case_log.id.to_s, + "Review lettings log" => "" +}) %> + +<%= turbo_frame_tag "case_log_form", target: "_top" do %> +
+
+

+ <%= content_for(:title) %> +

+ <% @case_log.form.sections.map do |section| %> +

<%= section.label %>

+ <% section.subsections.map do |subsection| %> +
+
+

<%= subsection.label %>

+
+
+
+ <% subsection.applicable_questions(@case_log).each do |question| %> + <%= render partial: 'form/check_answers_table', locals: { question: question, case_log: @case_log } %> + <% end %> +
+
+
+ <% end %> + <% end %> +
+
+<% end %> \ No newline at end of file diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index 0b92bf3b2..10efab899 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -1110,6 +1110,21 @@ } ], "pages": { + "declaration": { + "header": "", + "description": "", + "questions": { + "declaration": { + "check_answer_label": "", + "header": "Submit this lettings log ", + "hint_text": "", + "type": "checkbox", + "answer_options": { + "declaration": "The tenant has seen the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice" + } + } + } + }, "household_members": { "header": "", "description": "", @@ -5685,42 +5700,6 @@ } } } - }, - "submission": { - "label": "Submission", - "subsections": { - "declaration": { - "label": "Declaration", - "depends_on": [ - { - "setup": "completed", - "household_characteristics": "completed", - "household_situation": "completed", - "household_needs": "completed", - "tenancy_information": "completed", - "property_information": "completed", - "income_and_benefits": "completed" - } - ], - "pages": { - "declaration": { - "header": "", - "description": "", - "questions": { - "declaration": { - "check_answer_label": "", - "header": "Submit this lettings log ", - "hint_text": "", - "type": "checkbox", - "answer_options": { - "declaration": "The tenant has seen the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice" - } - } - } - } - } - } - } } } } diff --git a/config/routes.rb b/config/routes.rb index 4cb364878..3c8995519 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -77,6 +77,7 @@ Rails.application.routes.draw do member do post "form", to: "form#submit_form" + get "review", to: "form#review" end FormHandler.instance.forms.each do |_key, form| diff --git a/db/schema.rb b/db/schema.rb index 61368691c..882dde6f6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -321,9 +321,9 @@ ActiveRecord::Schema[7.0].define(version: 202202071123100) do t.integer "failed_attempts", default: 0 t.string "unlock_token" t.datetime "locked_at", precision: nil + t.string "phone" t.boolean "is_dpo", default: false t.boolean "is_key_contact", default: false - t.string "phone" t.integer "second_factor_attempts_count", default: 0 t.string "encrypted_otp_secret_key" t.string "encrypted_otp_secret_key_iv" diff --git a/package.json b/package.json index 463c20606..856c0c124 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "custom-event-polyfill": "^1.0.7", "file-loader": "^6.2.0", "govuk-frontend": "^4.0.1", + "govuk-prototype-components": "^0.1.5", "html5shiv": "^3.7.3", "intersection-observer": "^0.12.0", "mini-css-extract-plugin": "^2.6.0", diff --git a/spec/features/form/review_page_spec.rb b/spec/features/form/review_page_spec.rb new file mode 100644 index 000000000..ece35c82e --- /dev/null +++ b/spec/features/form/review_page_spec.rb @@ -0,0 +1,34 @@ +require "rails_helper" +require_relative "helpers" + +RSpec.describe "Form Review Page" do + include Helpers + let(:user) { FactoryBot.create(:user) } + let(:completed_unsubmitted_case_log) do + FactoryBot.create( + :case_log, + :completed, + status: 1, + owning_organisation: user.organisation, + managing_organisation: user.organisation, + ) + end + + before do + sign_in user + end + + context "when the user wishes to review their case log" do + it "the review page can be visited by URL" do + visit("/logs/#{completed_unsubmitted_case_log.id}/review") + expect(page).to have_content("Review lettings log") + end + + it "the review page allows the user to submit a completed case log" do + visit("/logs/#{completed_unsubmitted_case_log.id}/review") + click_button("Submit lettings log") + expect(page).to have_content("Success") + expect(page).to have_content("Log #{completed_unsubmitted_case_log.id} has been submitted") + end + end +end diff --git a/spec/features/form/tasklist_page_spec.rb b/spec/features/form/tasklist_page_spec.rb index 7f869ded4..6acb1ef6a 100644 --- a/spec/features/form/tasklist_page_spec.rb +++ b/spec/features/form/tasklist_page_spec.rb @@ -42,4 +42,11 @@ RSpec.describe "Task List" do visit("/logs/#{empty_case_log.id}") expect(page).to have_link("Skip to next incomplete section", href: /#household-characteristics/) end + + it "has a review section which has a button that allows the data inputter to review the case log" do + visit("/logs/#{case_log.id}") + expect(page).to have_content("Review your answers and submit this log to the Department of Levelling Up, Housing & Communities.") + click_link(text: "Review lettings log") + expect(page).to have_current_path("/logs/#{case_log.id}/review") + end end diff --git a/webpack.config.js b/webpack.config.js index 14ff8fd36..0f7e8f987 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -43,7 +43,7 @@ module.exports = { ], }, resolve: { - modules: ['node_modules', 'node_modules/govuk-frontend/govuk'] + modules: ['node_modules', 'node_modules/govuk-frontend/govuk', 'node_modules/govuk-prototype-components/x-govuk'] }, output: { filename: "[name].js", diff --git a/yarn.lock b/yarn.lock index 9270ef046..51118f2d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1164,7 +1164,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accessible-autocomplete@^2.0.3: +accessible-autocomplete@^2.0.3, accessible-autocomplete@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/accessible-autocomplete/-/accessible-autocomplete-2.0.4.tgz#e295256c8d268b97c5ab456a1cb084b553ed3eb0" integrity sha512-2p0txrSpvs5wXFUeQJHMheDPTZVSEmiUHWlEPb7vJnv2Dd1xPfoLnBQQMfNbTSit2pL/9sSQYESuD2Yyohd4Yw== @@ -1647,6 +1647,11 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +eventslibjs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventslibjs/-/eventslibjs-1.2.0.tgz#5d242b1d71d7376b999611448e91b7947d8cb9d0" + integrity sha512-nui7FHXHeeZjWkQ1dZ4R3RchkT+164+y1/puiOY1Zc3CPU9W8XzAzdhqvuVQ4EJt7F/W94O5U26/oVFpBOPY3w== + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -1797,6 +1802,16 @@ govuk-frontend@^4.0.1: resolved "https://registry.yarnpkg.com/govuk-frontend/-/govuk-frontend-4.0.1.tgz#bceff58ecb399272cba32bd2b357fe16198e3249" integrity sha512-X+B88mqYHoxAz0ID87Uxo3oHqdKBRnNHd3Cz8+u8nvQUAsrEzROFLK+t7sAu7e+fKqCCrJyIgx6Cmr6dIGnohQ== +govuk-prototype-components@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/govuk-prototype-components/-/govuk-prototype-components-0.1.5.tgz#e420c3200660fc6ff0f4df66474e8796ec446d37" + integrity sha512-ssUW5qcxnyJ9B+TRafRjLdeMmAK67cC5TE5TzkVhoMDzdYTQWzfp+FtFg2SFM0dO9pAc1npMVxZ8rUxEA174IQ== + dependencies: + accessible-autocomplete "^2.0.4" + eventslibjs "^1.2.0" + govuk-frontend "^4.0.1" + lodash "^4.17.21" + graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" @@ -2040,6 +2055,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"