diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 77cfdeb6f..9e7bd09d6 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -10,7 +10,9 @@ class FormController < ApplicationController responses_for_page = responses_for_page(@page) mandatory_questions_with_no_response = mandatory_questions_with_no_response(responses_for_page) - if mandatory_questions_with_no_response.empty? && @log.update(responses_for_page) + if @log.not_started? && responses_for_page.values.all?(&:blank?) && mandatory_questions_with_no_response.empty? + redirect_to(successful_redirect_path) + elsif mandatory_questions_with_no_response.empty? && @log.update(responses_for_page) session[:errors] = session[:fields] = nil redirect_to(successful_redirect_path) else @@ -124,7 +126,7 @@ private @log = if params[:sales_log_id].present? current_user.sales_logs.find_by(id: params[:sales_log_id]) elsif new_log_request? - create_new_resource + create_new_resource else current_user.lettings_logs.find_by(id: params[:lettings_log_id]) end @@ -143,7 +145,7 @@ private end def new_log_request_referrer? - request.referer&.split("/").include?("new") + request.referer&.split("/")&.include?("new") end def is_referrer_check_answers? diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index eac78dfc4..245628dbe 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -97,7 +97,7 @@ private @log = LettingsLog.find_by(id: params[:id]) end - def post_create_redirect_url - new_log_lettings_logs_path + def post_create_redirect_url(log) + log.not_started? ? new_log_lettings_logs_path : lettings_log_url(log) end end diff --git a/app/controllers/logs_controller.rb b/app/controllers/logs_controller.rb index f57482e84..8e7d4289c 100644 --- a/app/controllers/logs_controller.rb +++ b/app/controllers/logs_controller.rb @@ -11,11 +11,13 @@ private def create log = yield + log.save! unless api_log_params.empty? + raise "Caller must pass a block that implements model creation" if log.blank? respond_to do |format| format.html do - redirect_to(post_create_redirect_url) + redirect_to(post_create_redirect_url(log)) end format.json do if log.save diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 5e3239158..c15382559 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -40,8 +40,8 @@ class SalesLogsController < LogsController end end - def post_create_redirect_url - new_log_sales_logs_path + def post_create_redirect_url(log) + log.not_started? ? new_log_sales_logs_path : sales_log_url(log) end def permitted_log_params diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 67f582c1c..e869b1aa6 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -32,6 +32,22 @@ module CheckAnswersHelper "#{log.class.name.underscore}_#{redirect_path.underscore.tr('/', '_')}_path" end + def log_breadcrumbs(log, subsection) + if log.not_started? + { + "Logs" => "/logs", + "New log" => send("new_log_#{@log.class.name.underscore}s_path"), + subsection.label => "", + } + else + { + "Logs" => "/logs", + "Log #{@log.id}" => send("#{@log.class.name.underscore}_path", @log), + subsection.label => "", + } + end + end + private def answered_questions_count(subsection, lettings_log, current_user) diff --git a/app/models/form.rb b/app/models/form.rb index fa83588ae..65fb7ce90 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -74,14 +74,18 @@ class Form def next_page_redirect_path(page, log, current_user) nxt_page = next_page(page, log, current_user) if nxt_page == :check_answers - "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" + log.not_started? ? "#{type}_log_new_#{subsection_for_page(page).id}_check_answers_path" : "#{type}_log_#{subsection_for_page(page).id}_check_answers_path" else - log.id ? "#{type}_log_#{nxt_page}_path" : "#{type}_log_new_#{nxt_page}_path" + log.not_started? ? "#{type}_log_new_#{nxt_page}_path" : "#{type}_log_#{nxt_page}_path" end end def cancel_path(page, log) - "#{log.class.name.underscore}_#{page.subsection.id}_check_answers_path" + if log.not_started? + "#{log.class.name.underscore}_new_#{page.subsection.id}_check_answers_path" + else + "#{log.class.name.underscore}_#{page.subsection.id}_check_answers_path" + end end def next_incomplete_section_redirect_path(subsection, log) diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 4478f63fd..291255a41 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -122,7 +122,11 @@ class Form::Question end def action_href(log, page_id) - "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" + if log.not_started? + "/#{log.model_name.param_key.dasherize}/new/#{page_id.to_s.dasherize}?referrer=check_answers" + else + "/#{log.model_name.param_key.dasherize}s/#{log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" + end end def completed?(log) diff --git a/app/views/form/check_answers.html.erb b/app/views/form/check_answers.html.erb index 46a945017..43264acb2 100644 --- a/app/views/form/check_answers.html.erb +++ b/app/views/form/check_answers.html.erb @@ -1,9 +1,5 @@ <% content_for :title, "#{subsection.id.humanize} - Check your answers" %> -<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { - "Logs" => "/logs", - "Log #{@log.id}" => send("#{@log.class.name.underscore}_path", @log), - subsection.label => "", - }) %> +<% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: log_breadcrumbs(@log, subsection)) %>
diff --git a/app/views/logs/edit.html.erb b/app/views/logs/edit.html.erb index ffceca9bc..a8082526b 100644 --- a/app/views/logs/edit.html.erb +++ b/app/views/logs/edit.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, "Log #{@log.id ? @log.id : "new"}" %> +<% content_for :title, @log.id ? "Log #{@log.id}" : "New log" %> <% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { "Logs" => @log.lettings? ? lettings_logs_path : sales_logs_path, content_for(:title) => "", diff --git a/config/routes.rb b/config/routes.rb index 6c9deedb1..6122af445 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -36,6 +36,18 @@ Rails.application.routes.draw do end end + FormHandler.instance.forms.each do |_key, form| + form.pages.map do |page| + get "/lettings-log/new/#{page.id.to_s.dasherize}", to: "form#show_page" + get "/sales-log/new/#{page.id.to_s.dasherize}", to: "form#show_page" + end + + form.subsections.map do |subsection| + get "/lettings-log/new/#{subsection.id.to_s.dasherize}/check-answers", to: "form#check_answers" + get "/sales-log/new/#{subsection.id.to_s.dasherize}/check-answers", to: "form#check_answers" + end + end + get "/accessibility-statement", to: "content#accessibility_statement" get "/privacy-notice", to: "content#privacy_notice" get "/data-sharing-agreement", to: "content#data_sharing_agreement" diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 48b964b84..ee0e61717 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -9,6 +9,9 @@ FactoryBot.define do rent_type { 1 } startdate { Time.zone.local(2022, 5, 1) } end + trait :just_started do + rent_type { 1 } + end trait :in_progress do status { 1 } tenancycode { Faker::Name.initials(number: 10) } diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb index ffa9bdd88..9f5d170f7 100644 --- a/spec/features/form/form_navigation_spec.rb +++ b/spec/features/form/form_navigation_spec.rb @@ -16,6 +16,7 @@ RSpec.describe "Form Navigation" do let(:empty_lettings_log) do FactoryBot.create( :lettings_log, + :just_started, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index 54d4f1a48..6aa7034c0 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -16,6 +16,7 @@ RSpec.describe "validations" do let(:empty_lettings_log) do FactoryBot.create( :lettings_log, + :just_started, owning_organisation: user.organisation, managing_organisation: user.organisation, ) diff --git a/spec/features/lettings_log_spec.rb b/spec/features/lettings_log_spec.rb index ec08e4082..41561c389 100644 --- a/spec/features/lettings_log_spec.rb +++ b/spec/features/lettings_log_spec.rb @@ -128,7 +128,7 @@ RSpec.describe "Lettings Log Features" do it "creates a log after answering at least 1 question" do visit("/lettings-logs") expect { click_button("Create a new lettings log") }.to change(LettingsLog, :count).by(0) - end + end end context "when returning to the list of logs via breadcrumbs link" do diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index f879985b8..323584417 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -218,6 +218,7 @@ RSpec.describe FormController, type: :request do let(:lettings_log) do FactoryBot.create( :lettings_log, + :just_started, owning_organisation: organisation, managing_organisation: organisation, ) diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 651655139..2ad10381f 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -134,7 +134,7 @@ RSpec.describe LettingsLogsController, type: :request do before do RequestHelper.stub_http_requests sign_in user - post "/lettings-logs", headers: + post "/lettings-logs", headers:, params: { lettings_log: { tenancycode: "1234" } } end it "tracks who created the record" do