diff --git a/app/components/check_answers_summary_list_card_component.html.erb b/app/components/check_answers_summary_list_card_component.html.erb index c2e3c8ee5..adf1364c8 100644 --- a/app/components/check_answers_summary_list_card_component.html.erb +++ b/app/components/check_answers_summary_list_card_component.html.erb @@ -16,18 +16,18 @@ <% row.key { question.check_answer_label.to_s.presence || question.header.to_s } %> <% row.value do %> <%= get_answer_label(question) %> - <% extra_value = question.get_extra_check_answer_value(case_log) %> + <% extra_value = question.get_extra_check_answer_value(lettings_log) %> <% if extra_value %> <%= extra_value %> <% end %>
- <% question.get_inferred_answers(case_log).each do |inferred_answer| %> + <% question.get_inferred_answers(lettings_log).each do |inferred_answer| %> <%= inferred_answer %> <% end %> <% end %> <% row.action( - text: question.action_text(case_log), - href: question.action_href(case_log, question.page.id), + text: question.action_text(lettings_log), + href: question.action_href(lettings_log, question.page.id), visually_hidden_text: question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/app/components/check_answers_summary_list_card_component.rb b/app/components/check_answers_summary_list_card_component.rb index 0ae6afcac..bc7d8cdb9 100644 --- a/app/components/check_answers_summary_list_card_component.rb +++ b/app/components/check_answers_summary_list_card_component.rb @@ -1,18 +1,18 @@ class CheckAnswersSummaryListCardComponent < ViewComponent::Base - attr_reader :questions, :case_log, :user + attr_reader :questions, :lettings_log, :user - def initialize(questions:, case_log:, user:) + def initialize(questions:, lettings_log:, user:) @questions = questions - @case_log = case_log + @lettings_log = lettings_log @user = user super end def applicable_questions - questions.reject { |q| q.hidden_in_check_answers?(case_log, user) } + questions.reject { |q| q.hidden_in_check_answers?(lettings_log, user) } end def get_answer_label(question) - question.answer_label(case_log).presence || "You didn’t answer this question".html_safe + question.answer_label(lettings_log).presence || "You didn’t answer this question".html_safe end end diff --git a/app/components/log_summary_component.html.erb b/app/components/log_summary_component.html.erb index 612f920bd..07203b26b 100644 --- a/app/components/log_summary_component.html.erb +++ b/app/components/log_summary_component.html.erb @@ -3,7 +3,7 @@

- <%= govuk_link_to case_log_path(log) do %> + <%= govuk_link_to lettings_log_path(log) do %> Log <%= log.id %> <% end %>

diff --git a/app/components/search_component.rb b/app/components/search_component.rb index 0568d5c96..035500b54 100644 --- a/app/components/search_component.rb +++ b/app/components/search_component.rb @@ -20,7 +20,7 @@ class SearchComponent < ViewComponent::Base elsif request.path.include?("organisations") organisations_path elsif request.path.include?("logs") - case_logs_path + lettings_logs_path end end diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb index 1180a51de..307e79f15 100644 --- a/app/controllers/auth/sessions_controller.rb +++ b/app/controllers/auth/sessions_controller.rb @@ -24,7 +24,7 @@ private if resource.need_two_factor_authentication?(request) user_two_factor_authentication_path else - params.dig("user", "start").present? ? case_logs_path : super + params.dig("user", "start").present? ? lettings_logs_path : super end end end diff --git a/app/controllers/bulk_upload_controller.rb b/app/controllers/bulk_upload_controller.rb index 28fe7bbae..ffc22d028 100644 --- a/app/controllers/bulk_upload_controller.rb +++ b/app/controllers/bulk_upload_controller.rb @@ -3,7 +3,7 @@ class BulkUploadController < ApplicationController def show @bulk_upload = BulkUpload.new(nil, nil) - render "case_logs/bulk_upload" + render "lettings_logs/bulk_upload" end def bulk_upload @@ -12,15 +12,15 @@ class BulkUploadController < ApplicationController @bulk_upload = BulkUpload.new(file, content_type) @bulk_upload.process(current_user) if @bulk_upload.errors.present? - render "case_logs/bulk_upload", status: :unprocessable_entity + render "lettings_logs/bulk_upload", status: :unprocessable_entity else - redirect_to(case_logs_path) + redirect_to(lettings_logs_path) end end private def upload_params - params.require("bulk_upload")["case_log_bulk_upload"] + params.require("bulk_upload")["lettings_log_bulk_upload"] end end diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 52e3bc3a7..a7ee469b8 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -4,22 +4,22 @@ class FormController < ApplicationController before_action :find_resource_by_named_id, except: %i[submit_form review] def submit_form - if @case_log - @page = @case_log.form.get_page(params[:case_log][:page]) + if @lettings_log + @page = @lettings_log.form.get_page(params[:lettings_log][:page]) 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? && @case_log.update(responses_for_page) + if mandatory_questions_with_no_response.empty? && @lettings_log.update(responses_for_page) session[:errors] = session[:fields] = nil redirect_to(successful_redirect_path) else - redirect_path = "case_log_#{@page.id}_path" + redirect_path = "lettings_log_#{@page.id}_path" mandatory_questions_with_no_response.map do |question| - @case_log.errors.add question.id.to_sym, question.unanswered_error_message + @lettings_log.errors.add question.id.to_sym, question.unanswered_error_message end - session[:errors] = @case_log.errors.to_json - Rails.logger.info "User triggered validation(s) on: #{@case_log.errors.map(&:attribute).join(', ')}" - redirect_to(send(redirect_path, @case_log)) + session[:errors] = @lettings_log.errors.to_json + Rails.logger.info "User triggered validation(s) on: #{@lettings_log.errors.map(&:attribute).join(', ')}" + redirect_to(send(redirect_path, @lettings_log)) end else render_not_found @@ -27,9 +27,9 @@ class FormController < ApplicationController end def check_answers - if @case_log + if @lettings_log current_url = request.env["PATH_INFO"] - subsection = @case_log.form.get_subsection(current_url.split("/")[-2]) + subsection = @lettings_log.form.get_subsection(current_url.split("/")[-2]) render "form/check_answers", locals: { subsection:, current_user: } else render_not_found @@ -37,7 +37,7 @@ class FormController < ApplicationController end def review - if @case_log + if @lettings_log render "form/review" else render_not_found @@ -47,14 +47,14 @@ class FormController < ApplicationController FormHandler.instance.forms.each do |_key, form| form.pages.map do |page| define_method(page.id) do |_errors = {}| - if @case_log + if @lettings_log restore_error_field_values - @subsection = @case_log.form.subsection_for_page(page) - @page = @case_log.form.get_page(page.id) - if @page.routed_to?(@case_log, current_user) + @subsection = @lettings_log.form.subsection_for_page(page) + @page = @lettings_log.form.get_page(page.id) + if @page.routed_to?(@lettings_log, current_user) render "form/page" else - redirect_to case_log_path(@case_log) + redirect_to lettings_log_path(@lettings_log) end else render_not_found @@ -68,13 +68,13 @@ private def restore_error_field_values if session["errors"] JSON(session["errors"]).each do |field, messages| - messages.each { |message| @case_log.errors.add field.to_sym, message } + messages.each { |message| @lettings_log.errors.add field.to_sym, message } end end if session["fields"] session["fields"].each do |field, value| - unless @case_log.form.get_question(field, @case_log)&.type == "date" - @case_log[field] = value + unless @lettings_log.form.get_question(field, @lettings_log)&.type == "date" + @lettings_log[field] = value end end end @@ -82,11 +82,11 @@ private def responses_for_page(page) page.questions.each_with_object({}) do |question, result| - question_params = params["case_log"][question.id] + question_params = params["lettings_log"][question.id] if question.type == "date" - day = params["case_log"]["#{question.id}(3i)"] - month = params["case_log"]["#{question.id}(2i)"] - year = params["case_log"]["#{question.id}(1i)"] + day = params["lettings_log"]["#{question.id}(3i)"] + month = params["lettings_log"]["#{question.id}(2i)"] + year = params["lettings_log"]["#{question.id}(1i)"] next unless [day, month, year].any?(&:present?) result[question.id] = if Date.valid_date?(year.to_i, month.to_i, day.to_i) && year.to_i.between?(2000, 2200) @@ -109,11 +109,11 @@ private end def find_resource - @case_log = current_user.case_logs.find_by(id: params[:id]) + @lettings_log = current_user.lettings_logs.find_by(id: params[:id]) end def find_resource_by_named_id - @case_log = current_user.case_logs.find_by(id: params[:case_log_id]) + @lettings_log = current_user.lettings_logs.find_by(id: params[:lettings_log_id]) end def is_referrer_check_answers? @@ -123,18 +123,18 @@ private def successful_redirect_path if is_referrer_check_answers? - page_ids = @case_log.form.subsection_for_page(@page).pages.map(&:id) + page_ids = @lettings_log.form.subsection_for_page(@page).pages.map(&:id) page_index = page_ids.index(@page.id) - next_page = @case_log.form.next_page(@page, @case_log, current_user) - previous_page = @case_log.form.previous_page(page_ids, page_index, @case_log, current_user) + next_page = @lettings_log.form.next_page(@page, @lettings_log, current_user) + previous_page = @lettings_log.form.previous_page(page_ids, page_index, @lettings_log, current_user) if next_page.to_s.include?("value_check") || next_page == previous_page - return "/logs/#{@case_log.id}/#{next_page.dasherize}?referrer=check_answers" + return "/logs/#{@lettings_log.id}/#{next_page.dasherize}?referrer=check_answers" else - return send("case_log_#{@case_log.form.subsection_for_page(@page).id}_check_answers_path", @case_log) + return send("lettings_log_#{@lettings_log.form.subsection_for_page(@page).id}_check_answers_path", @lettings_log) end end - redirect_path = @case_log.form.next_page_redirect_path(@page, @case_log, current_user) - send(redirect_path, @case_log) + redirect_path = @lettings_log.form.next_page_redirect_path(@page, @lettings_log, current_user) + send(redirect_path, @lettings_log) end def mandatory_questions_with_no_response(responses_for_page) @@ -148,12 +148,12 @@ private end def question_is_required?(question) - CaseLog::OPTIONAL_FIELDS.exclude?(question.id) && required_questions.include?(question.id) + LettingsLog::OPTIONAL_FIELDS.exclude?(question.id) && required_questions.include?(question.id) end def required_questions @required_questions ||= begin - log = @case_log + log = @lettings_log log.assign_attributes(responses_for_page(@page)) @page.subsection.applicable_questions(log).select { |q| q.enabled?(log) }.map(&:id) end @@ -162,12 +162,12 @@ private def question_missing_response?(responses_for_page, question) if %w[checkbox validation_override].include?(question.type) answered = question.answer_options.keys.reject { |x| x.match(/divider/) }.map do |option| - session["fields"][option] = @case_log[option] = params["case_log"][question.id].include?(option) ? 1 : 0 - params["case_log"][question.id].exclude?(option) + session["fields"][option] = @lettings_log[option] = params["lettings_log"][question.id].include?(option) ? 1 : 0 + params["lettings_log"][question.id].exclude?(option) end answered.all? else - session["fields"][question.id] = @case_log[question.id] = responses_for_page[question.id] + session["fields"][question.id] = @lettings_log[question.id] = responses_for_page[question.id] responses_for_page[question.id].nil? || responses_for_page[question.id].blank? end end diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/lettings_logs_controller.rb similarity index 59% rename from app/controllers/case_logs_controller.rb rename to app/controllers/lettings_logs_controller.rb index a9b927725..a19fdbe6d 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -1,6 +1,6 @@ -class CaseLogsController < ApplicationController +class LettingsLogsController < ApplicationController include Pagy::Backend - include Modules::CaseLogsFilter + include Modules::LettingsLogsFilter include Modules::SearchFilter skip_before_action :verify_authenticity_token, if: :json_api_request? @@ -11,12 +11,12 @@ class CaseLogsController < ApplicationController def index set_session_filters - all_logs = current_user.case_logs - unpaginated_filtered_logs = filtered_case_logs(filtered_collection(all_logs, search_term)) + all_logs = current_user.lettings_logs + unpaginated_filtered_logs = filtered_lettings_logs(filtered_collection(all_logs, search_term)) respond_to do |format| format.html do - @pagy, @case_logs = pagy(unpaginated_filtered_logs) + @pagy, @lettings_logs = pagy(unpaginated_filtered_logs) @searched = search_term.presence @total_count = all_logs.size end @@ -28,28 +28,28 @@ class CaseLogsController < ApplicationController end def create - case_log = CaseLog.new(case_log_params) + lettings_log = LettingsLog.new(lettings_log_params) respond_to do |format| format.html do - case_log.save! - redirect_to case_log + lettings_log.save! + redirect_to lettings_log_url(lettings_log) end format.json do - if case_log.save - render json: case_log, status: :created + if lettings_log.save + render json: lettings_log, status: :created else - render json: { errors: case_log.errors.messages }, status: :unprocessable_entity + render json: { errors: lettings_log.errors.messages }, status: :unprocessable_entity end end end end def update - if @case_log - if @case_log.update(api_case_log_params) - render json: @case_log, status: :ok + if @lettings_log + if @lettings_log.update(api_lettings_log_params) + render json: @lettings_log, status: :ok else - render json: { errors: @case_log.errors.messages }, status: :unprocessable_entity + render json: { errors: @lettings_log.errors.messages }, status: :unprocessable_entity end else render_not_found_json("Log", params[:id]) @@ -61,8 +61,8 @@ class CaseLogsController < ApplicationController # We don't have a dedicated non-editable show view format.html { edit } format.json do - if @case_log - render json: @case_log, status: :ok + if @lettings_log + render json: @lettings_log, status: :ok else render_not_found_json("Log", params[:id]) end @@ -71,8 +71,8 @@ class CaseLogsController < ApplicationController end def edit - @case_log = current_user.case_logs.find_by(id: params[:id]) - if @case_log + @lettings_log = current_user.lettings_logs.find_by(id: params[:id]) + if @lettings_log render :edit, locals: { current_user: } else render_not_found @@ -80,11 +80,11 @@ class CaseLogsController < ApplicationController end def destroy - if @case_log - if @case_log.delete + if @lettings_log + if @lettings_log.delete head :no_content else - render json: { errors: @case_log.errors.messages }, status: :unprocessable_entity + render json: { errors: @lettings_log.errors.messages }, status: :unprocessable_entity end else render_not_found_json("Log", params[:id]) @@ -107,11 +107,11 @@ private http_basic_authenticate_or_request_with name: ENV["API_USER"], password: ENV["API_KEY"] end - def case_log_params + def lettings_log_params if current_user && !current_user.support? - org_params.merge(api_case_log_params) + org_params.merge(api_lettings_log_params) else - api_case_log_params + api_lettings_log_params end end @@ -123,16 +123,16 @@ private } end - def api_case_log_params - return {} unless params[:case_log] + def api_lettings_log_params + return {} unless params[:lettings_log] - permitted = params.require(:case_log).permit(CaseLog.editable_fields) + permitted = params.require(:lettings_log).permit(LettingsLog.editable_fields) owning_id = permitted["owning_organisation_id"] permitted["owning_organisation"] = Organisation.find(owning_id) if owning_id permitted end def find_resource - @case_log = CaseLog.find_by(id: params[:id]) + @lettings_log = LettingsLog.find_by(id: params[:id]) end end diff --git a/app/controllers/modules/case_logs_filter.rb b/app/controllers/modules/lettings_logs_filter.rb similarity index 54% rename from app/controllers/modules/case_logs_filter.rb rename to app/controllers/modules/lettings_logs_filter.rb index 52a79bac9..c074e48bb 100644 --- a/app/controllers/modules/case_logs_filter.rb +++ b/app/controllers/modules/lettings_logs_filter.rb @@ -1,7 +1,7 @@ -module Modules::CaseLogsFilter - def filtered_case_logs(logs) - if session[:case_logs_filters].present? - filters = JSON.parse(session[:case_logs_filters]) +module Modules::LettingsLogsFilter + def filtered_lettings_logs(logs) + if session[:lettings_logs_filters].present? + filters = JSON.parse(session[:lettings_logs_filters]) filters.each do |category, values| next if Array(values).reject(&:empty?).blank? next if category == "organisation" && params["organisation_select"] == "all" @@ -14,10 +14,10 @@ module Modules::CaseLogsFilter end def set_session_filters(specific_org: false) - new_filters = session[:case_logs_filters].present? ? JSON.parse(session[:case_logs_filters]) : {} - current_user.case_logs_filters(specific_org:).each { |filter| new_filters[filter] = params[filter] if params[filter].present? } + new_filters = session[:lettings_logs_filters].present? ? JSON.parse(session[:lettings_logs_filters]) : {} + current_user.lettings_logs_filters(specific_org:).each { |filter| new_filters[filter] = params[filter] if params[filter].present? } new_filters = new_filters.except("organisation") if params["organisation_select"] == "all" - session[:case_logs_filters] = new_filters.to_json + session[:lettings_logs_filters] = new_filters.to_json end end diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index 81ba4f737..1cf181788 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -1,6 +1,6 @@ class OrganisationsController < ApplicationController include Pagy::Backend - include Modules::CaseLogsFilter + include Modules::LettingsLogsFilter include Modules::SearchFilter before_action :authenticate_user! @@ -91,12 +91,12 @@ class OrganisationsController < ApplicationController if current_user.support? set_session_filters(specific_org: true) - organisation_logs = CaseLog.all.where(owning_organisation_id: @organisation.id) - unpaginated_filtered_logs = filtered_case_logs(filtered_collection(organisation_logs, search_term)) + organisation_logs = LettingsLog.all.where(owning_organisation_id: @organisation.id) + unpaginated_filtered_logs = filtered_lettings_logs(filtered_collection(organisation_logs, search_term)) respond_to do |format| format.html do - @pagy, @case_logs = pagy(unpaginated_filtered_logs) + @pagy, @lettings_logs = pagy(unpaginated_filtered_logs) @searched = search_term.presence @total_count = organisation_logs.size render "logs", layout: "application" @@ -107,7 +107,7 @@ class OrganisationsController < ApplicationController end end else - redirect_to(case_logs_path) + redirect_to(lettings_logs_path) end end diff --git a/app/controllers/start_controller.rb b/app/controllers/start_controller.rb index 8f380805b..d09934cbc 100644 --- a/app/controllers/start_controller.rb +++ b/app/controllers/start_controller.rb @@ -1,7 +1,7 @@ class StartController < ApplicationController def index if current_user - redirect_to(case_logs_path) + redirect_to(lettings_logs_path) end end end diff --git a/app/frontend/controllers/conditional_question_controller.js b/app/frontend/controllers/conditional_question_controller.js index c3913ceb9..974deeb2e 100644 --- a/app/frontend/controllers/conditional_question_controller.js +++ b/app/frontend/controllers/conditional_question_controller.js @@ -12,10 +12,10 @@ export default class extends Controller { Object.entries(conditionalFor).forEach(([targetQuestion, conditions]) => { if (!conditions.map(String).includes(String(selectedValue))) { - const textNumericInput = document.getElementById(`case-log-${targetQuestion.replaceAll('_', '-')}-field`) + const textNumericInput = document.getElementById(`lettings-log-${targetQuestion.replaceAll('_', '-')}-field`) if (textNumericInput == null) { const dateInputs = [1, 2, 3].map((idx) => { - return document.getElementById(`case_log_${targetQuestion}_${idx}i`) + return document.getElementById(`lettings_log_${targetQuestion}_${idx}i`) }) this.clearDateInputs(dateInputs) } else { diff --git a/app/frontend/controllers/numeric_question_controller.js b/app/frontend/controllers/numeric_question_controller.js index 4dad07436..56c76f636 100644 --- a/app/frontend/controllers/numeric_question_controller.js +++ b/app/frontend/controllers/numeric_question_controller.js @@ -3,14 +3,14 @@ import { Controller } from '@hotwired/stimulus' export default class extends Controller { connect () { const affectedField = this.element.dataset.target - const targetQuestion = affectedField.split('case-log-')[1].split('-field')[0] + const targetQuestion = affectedField.split('lettings-log-')[1].split('-field')[0] const div = document.getElementById(targetQuestion + '_div') div.style.display = 'block' } calculateFields () { const affectedField = this.element.dataset.target - const fieldsToAdd = JSON.parse(this.element.dataset.calculated).map(x => `case-log-${x.replaceAll('_', '-')}-field`) + const fieldsToAdd = JSON.parse(this.element.dataset.calculated).map(x => `lettings-log-${x.replaceAll('_', '-')}-field`) const valuesToAdd = fieldsToAdd.map(x => getFieldValue(x)).filter(x => x) const newValue = valuesToAdd.map(x => parseFloat(x)).reduce((a, b) => a + b, 0).toFixed(2) const elementToUpdate = document.getElementById(affectedField) diff --git a/app/helpers/check_answers_helper.rb b/app/helpers/check_answers_helper.rb index 9c0401f79..ebb4bb034 100644 --- a/app/helpers/check_answers_helper.rb +++ b/app/helpers/check_answers_helper.rb @@ -1,9 +1,9 @@ module CheckAnswersHelper include GovukLinkHelper - def display_answered_questions_summary(subsection, case_log, current_user) - total = total_count(subsection, case_log, current_user) - answered = answered_questions_count(subsection, case_log, current_user) + def display_answered_questions_summary(subsection, lettings_log, current_user) + total = total_count(subsection, lettings_log, current_user) + answered = answered_questions_count(subsection, lettings_log, current_user) if total == answered '

You answered all the questions.

'.html_safe else @@ -24,29 +24,29 @@ module CheckAnswersHelper end end - def any_questions_have_summary_card_number?(subsection, case_log) - subsection.applicable_questions(case_log).map(&:check_answers_card_number).compact.length.positive? + def any_questions_have_summary_card_number?(subsection, lettings_log) + subsection.applicable_questions(lettings_log).map(&:check_answers_card_number).compact.length.positive? end private - def answered_questions_count(subsection, case_log, current_user) - answered_questions(subsection, case_log, current_user).count + def answered_questions_count(subsection, lettings_log, current_user) + answered_questions(subsection, lettings_log, current_user).count end - def answered_questions(subsection, case_log, current_user) - total_applicable_questions(subsection, case_log, current_user).select { |q| q.completed?(case_log) } + def answered_questions(subsection, lettings_log, current_user) + total_applicable_questions(subsection, lettings_log, current_user).select { |q| q.completed?(lettings_log) } end - def total_count(subsection, case_log, current_user) - total_applicable_questions(subsection, case_log, current_user).count + def total_count(subsection, lettings_log, current_user) + total_applicable_questions(subsection, lettings_log, current_user).count end - def total_applicable_questions(subsection, case_log, current_user) - subsection.applicable_questions(case_log).reject { |q| q.hidden_in_check_answers?(case_log, current_user) } + def total_applicable_questions(subsection, lettings_log, current_user) + subsection.applicable_questions(lettings_log).reject { |q| q.hidden_in_check_answers?(lettings_log, current_user) } end - def get_answer_label(question, case_log) - question.answer_label(case_log).presence || "You didn’t answer this question".html_safe + def get_answer_label(question, lettings_log) + question.answer_label(lettings_log).presence || "You didn’t answer this question".html_safe end end diff --git a/app/helpers/filters_helper.rb b/app/helpers/filters_helper.rb index b5d661c94..a8f5582a7 100644 --- a/app/helpers/filters_helper.rb +++ b/app/helpers/filters_helper.rb @@ -1,8 +1,8 @@ module FiltersHelper def filter_selected?(filter, value) - return false unless session[:case_logs_filters] + return false unless session[:lettings_logs_filters] - selected_filters = JSON.parse(session[:case_logs_filters]) + selected_filters = JSON.parse(session[:lettings_logs_filters]) return true if selected_filters.blank? && filter == "user" && value == :all return true if !selected_filters.key?("organisation") && filter == "organisation_select" && value == :all return true if selected_filters["organisation"].present? && filter == "organisation_select" && value == :specific_org @@ -13,13 +13,13 @@ module FiltersHelper def status_filters statuses = {} - CaseLog.statuses.keys.map { |status| statuses[status] = status.humanize } + LettingsLog.statuses.keys.map { |status| statuses[status] = status.humanize } statuses end def selected_option(filter) - return false unless session[:case_logs_filters] + return false unless session[:lettings_logs_filters] - JSON.parse(session[:case_logs_filters])[filter] || "" + JSON.parse(session[:lettings_logs_filters])[filter] || "" end end diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb index f03c53694..4bfda9eee 100644 --- a/app/helpers/form_page_error_helper.rb +++ b/app/helpers/form_page_error_helper.rb @@ -1,6 +1,6 @@ module FormPageErrorHelper - def remove_other_page_errors(case_log, page) - other_page_error_ids = case_log.errors.map(&:attribute) - page.questions.map { |q| q.id.to_sym }.concat([:base]) - other_page_error_ids.each { |id| case_log.errors.delete(id) } + def remove_other_page_errors(lettings_log, page) + other_page_error_ids = lettings_log.errors.map(&:attribute) - page.questions.map { |q| q.id.to_sym }.concat([:base]) + other_page_error_ids.each { |id| lettings_log.errors.delete(id) } end end diff --git a/app/helpers/interruption_screen_helper.rb b/app/helpers/interruption_screen_helper.rb index 4f18a6938..6aee9d600 100644 --- a/app/helpers/interruption_screen_helper.rb +++ b/app/helpers/interruption_screen_helper.rb @@ -1,13 +1,13 @@ module InterruptionScreenHelper - def display_informative_text(informative_text, case_log) + def display_informative_text(informative_text, lettings_log) return "" unless informative_text["arguments"] translation_params = {} informative_text["arguments"].each do |argument| value = if argument["label"] - case_log.form.get_question(argument["key"], case_log).answer_label(case_log).downcase + lettings_log.form.get_question(argument["key"], lettings_log).answer_label(lettings_log).downcase else - case_log.public_send(argument["key"]) + lettings_log.public_send(argument["key"]) end translation_params[argument["i18n_template"].to_sym] = value end @@ -21,16 +21,16 @@ module InterruptionScreenHelper end end - def display_title_text(title_text, case_log) + def display_title_text(title_text, lettings_log) return "" if title_text.nil? translation_params = {} arguments = title_text["arguments"] || {} arguments.each do |argument| value = if argument["label"] - case_log.form.get_question(argument["key"], case_log).answer_label(case_log).downcase + lettings_log.form.get_question(argument["key"], lettings_log).answer_label(lettings_log).downcase else - case_log.public_send(argument["key"]) + lettings_log.public_send(argument["key"]) end translation_params[argument["i18n_template"].to_sym] = value end diff --git a/app/helpers/navigation_items_helper.rb b/app/helpers/navigation_items_helper.rb index e55aeeb77..244aaf1ab 100644 --- a/app/helpers/navigation_items_helper.rb +++ b/app/helpers/navigation_items_helper.rb @@ -6,19 +6,19 @@ module NavigationItemsHelper [ NavigationItem.new("Organisations", organisations_path, organisations_current?(path)), NavigationItem.new("Users", "/users", users_current?(path)), - NavigationItem.new("Logs", case_logs_path, logs_current?(path)), + NavigationItem.new("Logs", lettings_logs_path, logs_current?(path)), NavigationItem.new("Schemes", "/schemes", supported_housing_schemes_current?(path)), ] elsif current_user.data_coordinator? && current_user.organisation.holds_own_stock? [ - NavigationItem.new("Logs", case_logs_path, logs_current?(path)), + NavigationItem.new("Logs", lettings_logs_path, logs_current?(path)), NavigationItem.new("Schemes", "/schemes", subnav_supported_housing_schemes_path?(path)), NavigationItem.new("Users", users_organisation_path(current_user.organisation), subnav_users_path?(path)), NavigationItem.new("About your organisation", "/organisations/#{current_user.organisation.id}", subnav_details_path?(path)), ] else [ - NavigationItem.new("Logs", case_logs_path, logs_current?(path)), + NavigationItem.new("Logs", lettings_logs_path, logs_current?(path)), NavigationItem.new("Users", users_organisation_path(current_user.organisation), subnav_users_path?(path)), NavigationItem.new("About your organisation", "/organisations/#{current_user.organisation.id}", subnav_details_path?(path)), ] diff --git a/app/helpers/question_attribute_helper.rb b/app/helpers/question_attribute_helper.rb index a7c04d9be..f2f148568 100644 --- a/app/helpers/question_attribute_helper.rb +++ b/app/helpers/question_attribute_helper.rb @@ -16,7 +16,7 @@ private { "data-controller": "numeric-question", "data-action": "input->numeric-question#calculateFields", - "data-target": "case-log-#{question.result_field.to_s.dasherize}-field", + "data-target": "lettings-log-#{question.result_field.to_s.dasherize}-field", "data-calculated": question.fields_to_add.to_json, } end diff --git a/app/helpers/tasklist_helper.rb b/app/helpers/tasklist_helper.rb index d9b402221..e4308d97e 100644 --- a/app/helpers/tasklist_helper.rb +++ b/app/helpers/tasklist_helper.rb @@ -1,36 +1,36 @@ module TasklistHelper include GovukLinkHelper - def get_next_incomplete_section(case_log) - case_log.form.subsections.find { |subsection| subsection.is_incomplete?(case_log) } + def get_next_incomplete_section(lettings_log) + lettings_log.form.subsections.find { |subsection| subsection.is_incomplete?(lettings_log) } end - def get_subsections_count(case_log, status = :all) - return case_log.form.subsections.count { |subsection| subsection.applicable_questions(case_log).count.positive? } if status == :all + def get_subsections_count(lettings_log, status = :all) + return lettings_log.form.subsections.count { |subsection| subsection.applicable_questions(lettings_log).count.positive? } if status == :all - case_log.form.subsections.count { |subsection| subsection.status(case_log) == status && subsection.applicable_questions(case_log).count.positive? } + lettings_log.form.subsections.count { |subsection| subsection.status(lettings_log) == status && subsection.applicable_questions(lettings_log).count.positive? } end - def next_page_or_check_answers(subsection, case_log, current_user) - path = if subsection.is_started?(case_log) - "case_log_#{subsection.id}_check_answers_path" + def next_page_or_check_answers(subsection, lettings_log, current_user) + path = if subsection.is_started?(lettings_log) + "lettings_log_#{subsection.id}_check_answers_path" else - "case_log_#{next_question_page(subsection, case_log, current_user)}_path" + "lettings_log_#{next_question_page(subsection, lettings_log, current_user)}_path" end - send(path, case_log) + send(path, lettings_log) end - def next_question_page(subsection, case_log, current_user) - if subsection.pages.first.routed_to?(case_log, current_user) + def next_question_page(subsection, lettings_log, current_user) + if subsection.pages.first.routed_to?(lettings_log, current_user) subsection.pages.first.id else - case_log.form.next_page(subsection.pages.first, case_log, current_user) + lettings_log.form.next_page(subsection.pages.first, lettings_log, current_user) end end - def subsection_link(subsection, case_log, current_user) - if subsection.status(case_log) != :cannot_start_yet - next_page_path = next_page_or_check_answers(subsection, case_log, current_user).to_s + def subsection_link(subsection, lettings_log, current_user) + if subsection.status(lettings_log) != :cannot_start_yet + next_page_path = next_page_or_check_answers(subsection, lettings_log, current_user).to_s govuk_link_to(subsection.label, next_page_path.dasherize, aria: { describedby: subsection.id.dasherize }) else subsection.label diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index 6fdbd9c5a..edafadbfa 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -22,20 +22,20 @@ class BulkUpload sheet = xlsx.sheet(0) last_row = sheet.last_row if last_row < FIRST_DATA_ROW - errors.add(:case_log_bulk_upload, "No data found") + errors.add(:lettings_log_bulk_upload, "No data found") else data_range = FIRST_DATA_ROW..last_row data_range.map do |row_num| row = sheet.row(row_num) # owning_organisation = Organisation.find(row[111]) # managing_organisation = Organisation.find(row[113]) - case_log = CaseLog.create!( + lettings_log = LettingsLog.create!( owning_organisation: current_user.organisation, managing_organisation: current_user.organisation, created_by: current_user, ) map_row(row).each do |attr_key, attr_val| - update = case_log.update(attr_key => attr_val) + update = lettings_log.update(attr_key => attr_val) unless update # TODO: determine what to do when a bulk upload contains field values that don't pass validations end @@ -50,7 +50,7 @@ class BulkUpload if SPREADSHEET_CONTENT_TYPES.include?(@content_type) true else - errors.add(:case_log_bulk_upload, "Invalid file type") + errors.add(:lettings_log_bulk_upload, "Invalid file type") false end end diff --git a/app/models/derived_variables/case_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb similarity index 87% rename from app/models/derived_variables/case_log_variables.rb rename to app/models/derived_variables/lettings_log_variables.rb index 3bf227b6f..112ab420f 100644 --- a/app/models/derived_variables/case_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -1,4 +1,4 @@ -module DerivedVariables::CaseLogVariables +module DerivedVariables::LettingsLogVariables RENT_TYPE_MAPPING = { 0 => 1, 1 => 2, 2 => 2, 3 => 3, 4 => 3, 5 => 3 }.freeze def scheme_has_multiple_locations? @@ -43,10 +43,8 @@ module DerivedVariables::CaseLogVariables self.has_benefits = get_has_benefits self.tshortfall_known = 0 if tshortfall self.nocharge = household_charge&.zero? ? 1 : 0 - self.housingneeds = get_housingneeds if is_renewal? self.underoccupation_benefitcap = 2 if collection_start_year == 2021 - self.homeless = 1 self.referral = 0 self.waityear = 2 if is_general_needs? @@ -70,6 +68,8 @@ module DerivedVariables::CaseLogVariables self.voiddate = startdate end end + + set_housingneeds_fields if housingneeds? end private @@ -186,4 +186,23 @@ private self.location = scheme.locations.first end end + + def set_housingneeds_fields + self.housingneeds_a = fully_wheelchair_accessible? ? 1 : 0 + self.housingneeds_b = essential_wheelchair_access? ? 1 : 0 + self.housingneeds_c = level_access_housing? ? 1 : 0 + self.housingneeds_f = other_housingneeds? ? 1 : 0 + set_housingneeds_values_to_zero unless has_housingneeds? + self.housingneeds_g = no_housingneeds? ? 1 : 0 + self.housingneeds_h = unknown_housingneeds? ? 1 : 0 + end + + def set_housingneeds_values_to_zero + self.housingneeds_a = 0 + self.housingneeds_b = 0 + self.housingneeds_c = 0 + self.housingneeds_f = 0 + self.housingneeds_g = 0 + self.housingneeds_h = 0 + end end diff --git a/app/models/form.rb b/app/models/form.rb index b493c25c2..6fa92bba0 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -29,9 +29,9 @@ class Form pages.find { |p| p.id == id.to_s.underscore } end - def get_question(id, case_log, current_user = nil) + def get_question(id, lettings_log, current_user = nil) all_questions = questions.select { |q| q.id == id.to_s.underscore } - routed_question = all_questions.find { |q| q.page.routed_to?(case_log, current_user) } if case_log + routed_question = all_questions.find { |q| q.page.routed_to?(lettings_log, current_user) } if lettings_log routed_question || all_questions[0] end @@ -39,47 +39,47 @@ class Form subsections.find { |s| s.pages.find { |p| p.id == page.id } } end - def next_page(page, case_log, current_user) + def next_page(page, lettings_log, current_user) page_ids = subsection_for_page(page).pages.map(&:id) page_index = page_ids.index(page.id) - page_id = if page.id.include?("value_check") && case_log[page.questions[0].id] == 1 && page.routed_to?(case_log, current_user) - previous_page(page_ids, page_index, case_log, current_user) + page_id = if page.id.include?("value_check") && lettings_log[page.questions[0].id] == 1 && page.routed_to?(lettings_log, current_user) + previous_page(page_ids, page_index, lettings_log, current_user) else page_ids[page_index + 1] end nxt_page = get_page(page_id) return :check_answers if nxt_page.nil? - return nxt_page.id if nxt_page.routed_to?(case_log, current_user) + return nxt_page.id if nxt_page.routed_to?(lettings_log, current_user) - next_page(nxt_page, case_log, current_user) + next_page(nxt_page, lettings_log, current_user) end - def next_page_redirect_path(page, case_log, current_user) - nxt_page = next_page(page, case_log, current_user) + def next_page_redirect_path(page, lettings_log, current_user) + nxt_page = next_page(page, lettings_log, current_user) if nxt_page == :check_answers - "case_log_#{subsection_for_page(page).id}_check_answers_path" + "lettings_log_#{subsection_for_page(page).id}_check_answers_path" else - "case_log_#{nxt_page}_path" + "lettings_log_#{nxt_page}_path" end end - def next_incomplete_section_redirect_path(subsection, case_log) + def next_incomplete_section_redirect_path(subsection, lettings_log) subsection_ids = subsections.map(&:id) - if case_log.status == "completed" + if lettings_log.status == "completed" return first_question_in_last_subsection(subsection_ids) end - next_subsection = next_subsection(subsection, case_log, subsection_ids) + next_subsection = next_subsection(subsection, lettings_log, subsection_ids) - case next_subsection.status(case_log) + case next_subsection.status(lettings_log) when :completed - next_incomplete_section_redirect_path(next_subsection, case_log) + next_incomplete_section_redirect_path(next_subsection, lettings_log) when :in_progress "#{next_subsection.id}/check_answers".dasherize when :not_started - first_question_in_subsection = next_subsection.pages.find { |page| page.routed_to?(case_log, nil) }.id + first_question_in_subsection = next_subsection.pages.find { |page| page.routed_to?(lettings_log, nil) }.id first_question_in_subsection.to_s.dasherize else "error" @@ -92,21 +92,21 @@ class Form first_question_in_subsection.to_s.dasherize end - def next_subsection(subsection, case_log, subsection_ids) + def next_subsection(subsection, lettings_log, subsection_ids) next_subsection_id_index = subsection_ids.index(subsection.id) + 1 next_subsection = get_subsection(subsection_ids[next_subsection_id_index]) - if subsection_ids[subsection_ids.length - 1] == subsection.id && case_log.status != "completed" + if subsection_ids[subsection_ids.length - 1] == subsection.id && lettings_log.status != "completed" next_subsection = get_subsection(subsection_ids[0]) end next_subsection end - def all_subsections_except_declaration_completed?(case_log) + def all_subsections_except_declaration_completed?(lettings_log) subsection_ids = subsections.map(&:id) subsection_ids.delete_at(subsection_ids.length - 1) - return true if subsection_ids.all? { |subsection_id| get_subsection(subsection_id).status(case_log) == :completed } + return true if subsection_ids.all? { |subsection_id| get_subsection(subsection_id).status(lettings_log) == :completed } false end @@ -118,26 +118,26 @@ class Form }.flatten end - def invalidated_pages(case_log, current_user = nil) - pages.reject { |p| p.routed_to?(case_log, current_user) } + def invalidated_pages(lettings_log, current_user = nil) + pages.reject { |p| p.routed_to?(lettings_log, current_user) } end - def invalidated_questions(case_log) - invalidated_page_questions(case_log) + invalidated_conditional_questions(case_log) + def invalidated_questions(lettings_log) + invalidated_page_questions(lettings_log) + invalidated_conditional_questions(lettings_log) end - def invalidated_page_questions(case_log, current_user = nil) - # we're already treating these fields as a special case and reset their values upon saving a case_log + def invalidated_page_questions(lettings_log, current_user = nil) + # we're already treating these fields as a special case and reset their values upon saving a lettings_log callback_questions = %w[postcode_known la ppcodenk previous_la_known prevloc postcode_full ppostcode_full location_id] - questions.reject { |q| q.page.routed_to?(case_log, current_user) || q.derived? || callback_questions.include?(q.id) } || [] + questions.reject { |q| q.page.routed_to?(lettings_log, current_user) || q.derived? || callback_questions.include?(q.id) } || [] end - def enabled_page_questions(case_log) - questions - invalidated_page_questions(case_log) + def enabled_page_questions(lettings_log) + questions - invalidated_page_questions(lettings_log) end - def invalidated_conditional_questions(case_log) - questions.reject { |q| q.enabled?(case_log) } || [] + def invalidated_conditional_questions(lettings_log) + questions.reject { |q| q.enabled?(lettings_log) } || [] end def readonly_questions @@ -148,18 +148,18 @@ class Form questions.select { |q| q.type == "numeric" } end - def previous_page(page_ids, page_index, case_log, current_user) + def previous_page(page_ids, page_index, lettings_log, current_user) prev_page = get_page(page_ids[page_index - 1]) - return prev_page.id if prev_page.routed_to?(case_log, current_user) + return prev_page.id if prev_page.routed_to?(lettings_log, current_user) - previous_page(page_ids, page_index - 1, case_log, current_user) + previous_page(page_ids, page_index - 1, lettings_log, current_user) end - def send_chain(arr, case_log) - Array(arr).inject(case_log) { |o, a| o.public_send(*a) } + def send_chain(arr, lettings_log) + Array(arr).inject(lettings_log) { |o, a| o.public_send(*a) } end - def depends_on_met(depends_on, case_log) + def depends_on_met(depends_on, lettings_log) return true unless depends_on depends_on.any? do |conditions_set| @@ -169,12 +169,12 @@ class Form if value.is_a?(Hash) && value.key?("operator") operator = value["operator"] operand = value["operand"] - case_log[question]&.send(operator, operand) + lettings_log[question]&.send(operator, operand) else parts = question.split(".") - case_log_value = send_chain(parts, case_log) + lettings_log_value = send_chain(parts, lettings_log) - value.nil? ? case_log_value == value : !case_log_value.nil? && case_log_value == value + value.nil? ? lettings_log_value == value : !lettings_log_value.nil? && lettings_log_value == value end end end diff --git a/app/models/form/page.rb b/app/models/form/page.rb index 601063557..031b812a6 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -18,10 +18,10 @@ class Form::Page delegate :form, to: :subsection - def routed_to?(case_log, _current_user) + def routed_to?(lettings_log, _current_user) return true unless depends_on || subsection.depends_on - subsection.enabled?(case_log) && form.depends_on_met(depends_on, case_log) + subsection.enabled?(lettings_log) && form.depends_on_met(depends_on, lettings_log) end def non_conditional_questions diff --git a/app/models/form/question.rb b/app/models/form/question.rb index 11fa40c0b..70248ece8 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -44,31 +44,31 @@ class Form::Question delegate :subsection, to: :page delegate :form, to: :subsection - def answer_label(case_log) - return checkbox_answer_label(case_log) if type == "checkbox" - return case_log[id]&.to_formatted_s(:govuk_date).to_s if type == "date" + def answer_label(lettings_log) + return checkbox_answer_label(lettings_log) if type == "checkbox" + return lettings_log[id]&.to_formatted_s(:govuk_date).to_s if type == "date" - answer = label_from_value(case_log[id]) if case_log[id].present? - answer_label = [prefix, format_value(answer), suffix_label(case_log)].join("") if answer + answer = label_from_value(lettings_log[id]) if lettings_log[id].present? + answer_label = [prefix, format_value(answer), suffix_label(lettings_log)].join("") if answer return answer_label if answer_label - has_inferred_check_answers_value?(case_log) ? inferred_check_answers_value["value"] : "" + has_inferred_check_answers_value?(lettings_log) ? inferred_check_answers_value["value"] : "" end - def get_inferred_answers(case_log) + def get_inferred_answers(lettings_log) return [] unless inferred_answers - enabled_inferred_answers(inferred_answers, case_log).keys.map do |question_id| - question = form.get_question(question_id, case_log) + enabled_inferred_answers(inferred_answers, lettings_log).keys.map do |question_id| + question = form.get_question(question_id, lettings_log) if question.present? - question.label_from_value(case_log[question_id]) + question.label_from_value(lettings_log[question_id]) else - Array(question_id.to_s.split(".")).inject(case_log) { |log, method| log.present? ? log.public_send(*method) : "" } + Array(question_id.to_s.split(".")).inject(lettings_log) { |log, method| log.present? ? log.public_send(*method) : "" } end end end - def get_extra_check_answer_value(_case_log) + def get_extra_check_answer_value(_lettings_log) nil end @@ -76,59 +76,59 @@ class Form::Question !!readonly end - def enabled?(case_log) + def enabled?(lettings_log) return true if conditional_on.blank? - conditional_on.all? { |condition| evaluate_condition(condition, case_log) } + conditional_on.all? { |condition| evaluate_condition(condition, lettings_log) } end - def hidden_in_check_answers?(case_log, _current_user = nil) + def hidden_in_check_answers?(lettings_log, _current_user = nil) if hidden_in_check_answers.is_a?(Hash) - form.depends_on_met(hidden_in_check_answers["depends_on"], case_log) + form.depends_on_met(hidden_in_check_answers["depends_on"], lettings_log) else hidden_in_check_answers end end - def displayed_to_user?(case_log) - page.routed_to?(case_log, nil) && enabled?(case_log) + def displayed_to_user?(lettings_log) + page.routed_to?(lettings_log, nil) && enabled?(lettings_log) end def derived? !!derived end - def has_inferred_check_answers_value?(case_log) - return true if selected_answer_option_is_derived?(case_log) - return inferred_check_answers_value["condition"].values[0] == case_log[inferred_check_answers_value["condition"].keys[0]] if inferred_check_answers_value.present? + def has_inferred_check_answers_value?(lettings_log) + return true if selected_answer_option_is_derived?(lettings_log) + return inferred_check_answers_value["condition"].values[0] == lettings_log[inferred_check_answers_value["condition"].keys[0]] if inferred_check_answers_value.present? false end - def displayed_answer_options(case_log) + def displayed_answer_options(lettings_log) answer_options.select do |_key, val| - !val.is_a?(Hash) || !val["depends_on"] || form.depends_on_met(val["depends_on"], case_log) + !val.is_a?(Hash) || !val["depends_on"] || form.depends_on_met(val["depends_on"], lettings_log) end end - def action_text(case_log) - if has_inferred_check_answers_value?(case_log) + def action_text(lettings_log) + if has_inferred_check_answers_value?(lettings_log) "Change" elsif type == "checkbox" - answer_options.keys.any? { |key| value_is_yes?(case_log[key]) } ? "Change" : "Answer" + answer_options.keys.any? { |key| value_is_yes?(lettings_log[key]) } ? "Change" : "Answer" else - case_log[id].blank? ? "Answer" : "Change" + lettings_log[id].blank? ? "Answer" : "Change" end end - def action_href(case_log, page_id) - "/logs/#{case_log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" + def action_href(lettings_log, page_id) + "/logs/#{lettings_log.id}/#{page_id.to_s.dasherize}?referrer=check_answers" end - def completed?(case_log) - return answer_options.keys.any? { |key| value_is_yes?(case_log[key]) } if type == "checkbox" + def completed?(lettings_log) + return answer_options.keys.any? { |key| value_is_yes?(lettings_log[key]) } if type == "checkbox" - case_log[id].present? || !case_log.respond_to?(id.to_sym) || has_inferred_display_value?(case_log) + lettings_log[id].present? || !lettings_log.respond_to?(id.to_sym) || has_inferred_display_value?(lettings_log) end def value_from_label(label) @@ -203,7 +203,7 @@ class Form::Question I18n.t("validations.not_answered", question: display_label.downcase) end - def suffix_label(case_log) + def suffix_label(lettings_log) return "" unless suffix return suffix if suffix.is_a?(String) @@ -213,7 +213,7 @@ class Form::Question condition = s["depends_on"] next unless condition - answer = case_log.send(condition.keys.first) + answer = lettings_log.send(condition.keys.first) if answer == condition.values.first label = s["label"] end @@ -239,10 +239,10 @@ class Form::Question resource.hint end - def answer_selected?(case_log, answer) + def answer_selected?(lettings_log, answer) return false unless type == "select" - case_log[id].to_s == answer.id.to_s + lettings_log[id].to_s == answer.id.to_s end def top_guidance? @@ -255,20 +255,20 @@ class Form::Question private - def selected_answer_option_is_derived?(case_log) - selected_option = answer_options&.dig(case_log[id].to_s.presence) - selected_option.is_a?(Hash) && selected_option["depends_on"] && form.depends_on_met(selected_option["depends_on"], case_log) + def selected_answer_option_is_derived?(lettings_log) + selected_option = answer_options&.dig(lettings_log[id].to_s.presence) + selected_option.is_a?(Hash) && selected_option["depends_on"] && form.depends_on_met(selected_option["depends_on"], lettings_log) end - def has_inferred_display_value?(case_log) - inferred_check_answers_value.present? && case_log[inferred_check_answers_value["condition"].keys.first] == inferred_check_answers_value["condition"].values.first + def has_inferred_display_value?(lettings_log) + inferred_check_answers_value.present? && lettings_log[inferred_check_answers_value["condition"].keys.first] == inferred_check_answers_value["condition"].values.first end - def checkbox_answer_label(case_log) + def checkbox_answer_label(lettings_log) answer = [] - return "Yes" if id == "declaration" && value_is_yes?(case_log["declaration"]) + return "Yes" if id == "declaration" && value_is_yes?(lettings_log["declaration"]) - answer_options.each { |key, options| value_is_yes?(case_log[key]) ? answer << options["value"] : nil } + answer_options.each { |key, options| value_is_yes?(lettings_log[key]) ? answer << options["value"] : nil } answer.join(", ") end @@ -282,21 +282,21 @@ private end end - def evaluate_condition(condition, case_log) + def evaluate_condition(condition, lettings_log) case page.questions.find { |q| q.id == condition[:from] }.type when "numeric" operator = condition[:cond][/[<>=]+/].to_sym operand = condition[:cond][/\d+/].to_i - case_log[condition[:from]].present? && case_log[condition[:from]].send(operator, operand) + lettings_log[condition[:from]].present? && lettings_log[condition[:from]].send(operator, operand) when "text", "radio", "select" - case_log[condition[:from]].present? && condition[:cond].include?(case_log[condition[:from]]) + lettings_log[condition[:from]].present? && condition[:cond].include?(lettings_log[condition[:from]]) else raise "Not implemented yet" end end - def enabled_inferred_answers(inferred_answers, case_log) - inferred_answers.filter { |_key, value| value.all? { |condition_key, condition_value| case_log[condition_key] == condition_value } } + def enabled_inferred_answers(inferred_answers, lettings_log) + inferred_answers.filter { |_key, value| value.all? { |condition_key, condition_value| lettings_log[condition_key] == condition_value } } end RADIO_YES_VALUE = { diff --git a/app/models/form/setup/pages/created_by.rb b/app/models/form/setup/pages/created_by.rb index edaa43fff..8878e9b75 100644 --- a/app/models/form/setup/pages/created_by.rb +++ b/app/models/form/setup/pages/created_by.rb @@ -13,7 +13,7 @@ class Form::Setup::Pages::CreatedBy < ::Form::Page ] end - def routed_to?(_case_log, current_user) + def routed_to?(_lettings_log, current_user) !!current_user&.support? end end diff --git a/app/models/form/setup/pages/organisation.rb b/app/models/form/setup/pages/organisation.rb index 166bc2181..2b0c56d12 100644 --- a/app/models/form/setup/pages/organisation.rb +++ b/app/models/form/setup/pages/organisation.rb @@ -13,7 +13,7 @@ class Form::Setup::Pages::Organisation < ::Form::Page ] end - def routed_to?(_case_log, current_user) + def routed_to?(_lettings_log, current_user) !!current_user&.support? end end diff --git a/app/models/form/setup/questions/created_by_id.rb b/app/models/form/setup/questions/created_by_id.rb index eee7d9485..85567f882 100644 --- a/app/models/form/setup/questions/created_by_id.rb +++ b/app/models/form/setup/questions/created_by_id.rb @@ -19,10 +19,10 @@ class Form::Setup::Questions::CreatedById < ::Form::Question end end - def displayed_answer_options(case_log) - return answer_options unless case_log.owning_organisation + def displayed_answer_options(lettings_log) + return answer_options unless lettings_log.owning_organisation - user_ids = case_log.owning_organisation.users.pluck(:id) + [""] + user_ids = lettings_log.owning_organisation.users.pluck(:id) + [""] answer_options.select { |k, _v| user_ids.include?(k) } end @@ -32,7 +32,7 @@ class Form::Setup::Questions::CreatedById < ::Form::Question answer_options[value] end - def hidden_in_check_answers?(_case_log, current_user) + def hidden_in_check_answers?(_lettings_log, current_user) !current_user.support? end @@ -42,7 +42,7 @@ class Form::Setup::Questions::CreatedById < ::Form::Question private - def selected_answer_option_is_derived?(_case_log) + def selected_answer_option_is_derived?(_lettings_log) false end end diff --git a/app/models/form/setup/questions/location_id.rb b/app/models/form/setup/questions/location_id.rb index cc8e1daf6..58afbe011 100644 --- a/app/models/form/setup/questions/location_id.rb +++ b/app/models/form/setup/questions/location_id.rb @@ -23,28 +23,28 @@ class Form::Setup::Questions::LocationId < ::Form::Question end end - def displayed_answer_options(case_log) - return {} unless case_log.scheme + def displayed_answer_options(lettings_log) + return {} unless lettings_log.scheme - scheme_location_ids = case_log.scheme.locations.pluck(:id) + scheme_location_ids = lettings_log.scheme.locations.pluck(:id) answer_options.select { |k, _v| scheme_location_ids.include?(k.to_i) } end - def hidden_in_check_answers?(case_log, _current_user = nil) - !supported_housing_selected?(case_log) + def hidden_in_check_answers?(lettings_log, _current_user = nil) + !supported_housing_selected?(lettings_log) end - def get_extra_check_answer_value(case_log) - case_log.form.get_question("la", nil).label_from_value(case_log.la) + def get_extra_check_answer_value(lettings_log) + lettings_log.form.get_question("la", nil).label_from_value(lettings_log.la) end private - def supported_housing_selected?(case_log) - case_log.needstype == 2 + def supported_housing_selected?(lettings_log) + lettings_log.needstype == 2 end - def selected_answer_option_is_derived?(_case_log) + def selected_answer_option_is_derived?(_lettings_log) false end end diff --git a/app/models/form/setup/questions/owning_organisation_id.rb b/app/models/form/setup/questions/owning_organisation_id.rb index 109ccf5b4..a8fd15e50 100644 --- a/app/models/form/setup/questions/owning_organisation_id.rb +++ b/app/models/form/setup/questions/owning_organisation_id.rb @@ -19,7 +19,7 @@ class Form::Setup::Questions::OwningOrganisationId < ::Form::Question end end - def displayed_answer_options(_case_log) + def displayed_answer_options(_lettings_log) answer_options end @@ -29,7 +29,7 @@ class Form::Setup::Questions::OwningOrganisationId < ::Form::Question answer_options[value] end - def hidden_in_check_answers?(_case_log, current_user) + def hidden_in_check_answers?(_lettings_log, current_user) !current_user.support? end @@ -39,7 +39,7 @@ class Form::Setup::Questions::OwningOrganisationId < ::Form::Question private - def selected_answer_option_is_derived?(_case_log) + def selected_answer_option_is_derived?(_lettings_log) false end end diff --git a/app/models/form/setup/questions/scheme_id.rb b/app/models/form/setup/questions/scheme_id.rb index 4686878da..9a71e1559 100644 --- a/app/models/form/setup/questions/scheme_id.rb +++ b/app/models/form/setup/questions/scheme_id.rb @@ -20,8 +20,8 @@ class Form::Setup::Questions::SchemeId < ::Form::Question end end - def displayed_answer_options(case_log) - organisation = case_log.owning_organisation || case_log.created_by&.organisation + def displayed_answer_options(lettings_log) + organisation = lettings_log.owning_organisation || lettings_log.created_by&.organisation schemes = organisation ? Scheme.select(:id).where(owning_organisation_id: organisation.id, confirmed: true) : Scheme.select(:id).where(confirmed: true) filtered_scheme_ids = schemes.joins(:locations).merge(Location.where("startdate <= ? or startdate IS NULL", Time.zone.today)).map(&:id) answer_options.select do |k, _v| @@ -29,21 +29,21 @@ class Form::Setup::Questions::SchemeId < ::Form::Question end end - def hidden_in_check_answers?(case_log, _current_user = nil) - !supported_housing_selected?(case_log) + def hidden_in_check_answers?(lettings_log, _current_user = nil) + !supported_housing_selected?(lettings_log) end - def answer_selected?(case_log, answer) - case_log[id] == answer.name || case_log[id] == answer.resource + def answer_selected?(lettings_log, answer) + lettings_log[id] == answer.name || lettings_log[id] == answer.resource end private - def supported_housing_selected?(case_log) - case_log.needstype == 2 + def supported_housing_selected?(lettings_log) + lettings_log.needstype == 2 end - def selected_answer_option_is_derived?(_case_log) + def selected_answer_option_is_derived?(_lettings_log) false end end diff --git a/app/models/form/setup/subsections/setup.rb b/app/models/form/setup/subsections/setup.rb index 1db76986d..7bc4a079d 100644 --- a/app/models/form/setup/subsections/setup.rb +++ b/app/models/form/setup/subsections/setup.rb @@ -21,11 +21,11 @@ class Form::Subsections::Setup < ::Form::Subsection ] end - def applicable_questions(case_log) + def applicable_questions(lettings_log) questions.select { |q| support_only_questions.include?(q.id) } + super end - def enabled?(_case_log) + def enabled?(_lettings_log) true end diff --git a/app/models/form/subsection.rb b/app/models/form/subsection.rb index 80a4db102..d42f8dadb 100644 --- a/app/models/form/subsection.rb +++ b/app/models/form/subsection.rb @@ -17,40 +17,40 @@ class Form::Subsection @questions ||= pages.flat_map(&:questions) end - def enabled?(case_log) + def enabled?(lettings_log) return true unless depends_on depends_on.any? do |conditions_set| conditions_set.all? do |subsection_id, dependent_status| - form.get_subsection(subsection_id).status(case_log) == dependent_status.to_sym + form.get_subsection(subsection_id).status(lettings_log) == dependent_status.to_sym end end end - def status(case_log) - unless enabled?(case_log) + def status(lettings_log) + unless enabled?(lettings_log) return :cannot_start_yet end - qs = applicable_questions(case_log) - qs_optional_removed = qs.reject { |q| case_log.optional_fields.include?(q.id) } - return :not_started if qs.count.positive? && qs.all? { |question| case_log[question.id].blank? || question.read_only? || question.derived? } - return :completed if qs_optional_removed.all? { |question| question.completed?(case_log) } + qs = applicable_questions(lettings_log) + qs_optional_removed = qs.reject { |q| lettings_log.optional_fields.include?(q.id) } + return :not_started if qs.count.positive? && qs.all? { |question| lettings_log[question.id].blank? || question.read_only? || question.derived? } + return :completed if qs_optional_removed.all? { |question| question.completed?(lettings_log) } :in_progress end - def is_incomplete?(case_log) - %i[not_started in_progress].include?(status(case_log)) + def is_incomplete?(lettings_log) + %i[not_started in_progress].include?(status(lettings_log)) end - def is_started?(case_log) - %i[in_progress completed].include?(status(case_log)) + def is_started?(lettings_log) + %i[in_progress completed].include?(status(lettings_log)) end - def applicable_questions(case_log) + def applicable_questions(lettings_log) questions.select do |q| - (q.displayed_to_user?(case_log) && !q.derived?) || q.has_inferred_check_answers_value?(case_log) + (q.displayed_to_user?(lettings_log) && !q.derived?) || q.has_inferred_check_answers_value?(lettings_log) end end end diff --git a/app/models/case_log.rb b/app/models/lettings_log.rb similarity index 97% rename from app/models/case_log.rb rename to app/models/lettings_log.rb index 57eab3c0e..aa854f420 100644 --- a/app/models/case_log.rb +++ b/app/models/lettings_log.rb @@ -1,4 +1,4 @@ -class CaseLogValidator < ActiveModel::Validator +class LettingsLogValidator < ActiveModel::Validator # Validations methods need to be called 'validate_' to run on model save # or form page submission include Validations::SetupValidations @@ -14,13 +14,13 @@ class CaseLogValidator < ActiveModel::Validator end end -class CaseLog < ApplicationRecord +class LettingsLog < ApplicationRecord include Validations::SoftValidations - include DerivedVariables::CaseLogVariables + include DerivedVariables::LettingsLogVariables has_paper_trail - validates_with CaseLogValidator + validates_with LettingsLogValidator before_validation :recalculate_start_year!, if: :startdate_changed? before_validation :reset_scheme_location!, if: :scheme_changed?, unless: :location_changed? before_validation :process_postcode_changes!, if: :postcode_full_changed? @@ -474,7 +474,7 @@ class CaseLog < ApplicationRecord end def self.to_csv(user = nil) - Csv::CaseLogCsvService.new(user).to_csv + Csv::LettingsLogCsvService.new(user).to_csv end def soft_min_for_period @@ -575,7 +575,6 @@ private def reset_derived_questions dependent_questions = { waityear: [{ key: :renewal, value: 0 }], - homeless: [{ key: :renewal, value: 0 }], referral: [{ key: :renewal, value: 0 }], underoccupation_benefitcap: [{ key: :renewal, value: 0 }], wchair: [{ key: :needstype, value: 1 }], @@ -701,30 +700,6 @@ private end end - def get_housingneeds - return 1 if has_housingneeds? - return 2 if no_housingneeds? - return 3 if unknown_housingneeds? - end - - def has_housingneeds? - if [housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f].any?(1) - 1 - end - end - - def no_housingneeds? - if housingneeds_g == 1 - 1 - end - end - - def unknown_housingneeds? - if housingneeds_h == 1 - 1 - end - end - def all_fields_completed? subsection_statuses = form.subsections.map { |subsection| subsection.status(self) }.uniq subsection_statuses == [:completed] @@ -762,4 +737,32 @@ private def upcase_and_remove_whitespace(string) string.present? ? string.upcase.gsub(/\s+/, "") : string end + + def fully_wheelchair_accessible? + housingneeds_type.present? && housingneeds_type.zero? + end + + def essential_wheelchair_access? + housingneeds_type == 1 + end + + def level_access_housing? + housingneeds_type == 2 + end + + def other_housingneeds? + housingneeds_other == 1 + end + + def has_housingneeds? + housingneeds == 1 + end + + def no_housingneeds? + housingneeds == 2 + end + + def unknown_housingneeds? + housingneeds == 3 + end end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 57cf0a5a2..afaf6de35 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -1,7 +1,7 @@ class Organisation < ApplicationRecord has_many :users, dependent: :delete_all - has_many :owned_case_logs, class_name: "CaseLog", foreign_key: "owning_organisation_id", dependent: :delete_all - has_many :managed_case_logs, class_name: "CaseLog", foreign_key: "managing_organisation_id" + has_many :owned_lettings_logs, class_name: "LettingsLog", foreign_key: "owning_organisation_id", dependent: :delete_all + has_many :managed_lettings_logs, class_name: "LettingsLog", foreign_key: "managing_organisation_id" has_many :data_protection_confirmations has_many :organisation_rent_periods has_many :owned_schemes, class_name: "Scheme", foreign_key: "owning_organisation_id", dependent: :delete_all @@ -28,16 +28,16 @@ class Organisation < ApplicationRecord validates :name, presence: { message: I18n.t("validations.organisation.name_missing") } validates :provider_type, presence: { message: I18n.t("validations.organisation.provider_type_missing") } - def case_logs - CaseLog.filter_by_organisation(self) + def lettings_logs + LettingsLog.filter_by_organisation(self) end - def completed_case_logs - case_logs.completed + def completed_lettings_logs + lettings_logs.completed end - def not_completed_case_logs - case_logs.not_completed + def not_completed_lettings_logs + lettings_logs.not_completed end def address_string diff --git a/app/models/scheme.rb b/app/models/scheme.rb index b52f7539c..83899f494 100644 --- a/app/models/scheme.rb +++ b/app/models/scheme.rb @@ -2,7 +2,7 @@ class Scheme < ApplicationRecord belongs_to :owning_organisation, class_name: "Organisation" belongs_to :managing_organisation, optional: true, class_name: "Organisation" has_many :locations, dependent: :delete_all - has_many :case_logs, dependent: :delete_all + has_many :lettings_logs, class_name: "LettingsLog", dependent: :delete_all has_paper_trail diff --git a/app/models/user.rb b/app/models/user.rb index f3233bff6..22cc14b77 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -7,8 +7,8 @@ class User < ApplicationRecord # Marked as optional because we validate organisation_id below instead so that # the error message is linked to the right field on the form belongs_to :organisation, optional: true - has_many :owned_case_logs, through: :organisation, dependent: :delete_all - has_many :managed_case_logs, through: :organisation + has_many :owned_lettings_logs, through: :organisation, dependent: :delete_all + has_many :managed_lettings_logs, through: :organisation validates :name, presence: true validates :email, presence: true @@ -50,20 +50,20 @@ class User < ApplicationRecord scope :search_by, ->(param) { search_by_name(param).or(search_by_email(param)) } scope :sorted_by_organisation_and_role, -> { joins(:organisation).order("organisations.name", role: :desc, name: :asc) } - def case_logs + def lettings_logs if support? - CaseLog.all + LettingsLog.all else - CaseLog.filter_by_organisation(organisation) + LettingsLog.filter_by_organisation(organisation) end end - def completed_case_logs - case_logs.completed + def completed_lettings_logs + lettings_logs.completed end - def not_completed_case_logs - case_logs.not_completed + def not_completed_lettings_logs + lettings_logs.not_completed end def is_key_contact? @@ -131,7 +131,7 @@ class User < ApplicationRecord ROLES.except(:support) end - def case_logs_filters(specific_org: false) + def lettings_logs_filters(specific_org: false) if support? && !specific_org %w[status years user organisation] else diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index 48b862ab3..7053d3571 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -54,16 +54,6 @@ module Validations::HouseholdValidations validate_person_age_matches_economic_status(record, 1) end - def validate_accessibility_requirements(record) - all_options = [record.housingneeds_a, record.housingneeds_b, record.housingneeds_c, record.housingneeds_f, record.housingneeds_g, record.housingneeds_h] - if all_options.count(1) > 1 - mobility_accessibility_options = [record.housingneeds_a, record.housingneeds_b, record.housingneeds_c] - unless all_options.count(1) == 2 && record.housingneeds_f == 1 && mobility_accessibility_options.any? { |x| x == 1 } - record.errors.add :accessibility_requirements, I18n.t("validations.household.housingneeds_a.one_or_two_choices") - end - end - end - def validate_condition_effects(record) all_options = [record.illness_type_1, record.illness_type_2, record.illness_type_3, record.illness_type_4, record.illness_type_5, record.illness_type_6, record.illness_type_7, record.illness_type_8, record.illness_type_9, record.illness_type_10] if all_options.count(1) >= 1 && household_no_illness?(record) diff --git a/app/services/csv/case_log_csv_service.rb b/app/services/csv/lettings_log_csv_service.rb similarity index 86% rename from app/services/csv/case_log_csv_service.rb rename to app/services/csv/lettings_log_csv_service.rb index c0e86e4a0..c0a660c76 100644 --- a/app/services/csv/case_log_csv_service.rb +++ b/app/services/csv/lettings_log_csv_service.rb @@ -1,6 +1,6 @@ module Csv - class CaseLogCsvService - CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check sale_or_letting first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays scheme_id location_id la prevloc].freeze + class LettingsLogCsvService + CSV_FIELDS_TO_OMIT = %w[hhmemb net_income_value_check sale_or_letting first_time_property_let_as_social_housing renttype needstype postcode_known is_la_inferred totchild totelder totadult net_income_known is_carehome previous_la_known is_previous_la_inferred age1_known age2_known age3_known age4_known age5_known age6_known age7_known age8_known letting_allocation_unknown details_known_2 details_known_3 details_known_4 details_known_5 details_known_6 details_known_7 details_known_8 rent_type wrent wscharge wpschrge wsupchrg wtcharge wtshortfall rent_value_check old_form_id old_id retirement_value_check tshortfall_known pregnancy_value_check hhtype new_old vacdays].freeze def initialize(user) @user = user @@ -11,7 +11,7 @@ module Csv CSV.generate(headers: true) do |csv| csv << @attributes - CaseLog.all.find_each do |record| + LettingsLog.all.find_each do |record| csv << @attributes.map do |att| if %w[la prevloc].include? att label_from_value(record.send(att)) @@ -38,20 +38,19 @@ module Csv metadata_fields = %w[id status created_at updated_at created_by_name is_dpo owning_organisation_name managing_organisation_name] metadata_id_fields = %w[managing_organisation_id owning_organisation_id created_by_id] scheme_and_location_ids = %w[scheme_id location_id] - intersecting_attributes = ordered_form_questions & CaseLog.attribute_names - scheme_and_location_ids - remaining_attributes = CaseLog.attribute_names - intersecting_attributes - scheme_and_location_ids scheme_attributes = %w[scheme_code scheme_service_name scheme_sensitive scheme_type scheme_registered_under_care_act scheme_owning_organisation_name scheme_managing_organisation_name scheme_primary_client_group scheme_has_other_client_group scheme_secondary_client_group scheme_support_type scheme_intended_stay scheme_created_at] location_attributes = %w[location_code location_postcode location_name location_units location_type_of_unit location_mobility_type location_admin_district location_startdate] - la_fields = %w[la_label prevloc_label] + intersecting_attributes = ordered_form_questions & LettingsLog.attribute_names - scheme_and_location_ids + remaining_attributes = LettingsLog.attribute_names - intersecting_attributes - scheme_and_location_ids - @attributes = (metadata_fields + intersecting_attributes + remaining_attributes - metadata_id_fields + %w[unittype_sh] + scheme_and_location_ids + scheme_attributes + location_attributes + la_fields).uniq - move_la_fields + @attributes = (metadata_fields + intersecting_attributes + remaining_attributes - metadata_id_fields + %w[unittype_sh] + scheme_attributes + location_attributes).uniq + move_is_inferred_fields @attributes -= CSV_FIELDS_TO_OMIT if @user.present? && !@user.support? end def ordered_form_questions - downloaded_form_years = CaseLog.all.map(&:collection_start_year).uniq.compact + downloaded_form_years = LettingsLog.all.map(&:collection_start_year).uniq.compact downloaded_form_fields = downloaded_form_years.count == 1 && downloaded_form_years[0].present? ? FormHandler.instance.get_form("#{downloaded_form_years[0]}_#{downloaded_form_years[0] + 1}").questions : FormHandler.instance.forms.first.second.questions move_checkbox_answer_options(downloaded_form_fields) end diff --git a/app/services/exports/case_log_export_constants.rb b/app/services/exports/lettings_log_export_constants.rb similarity index 98% rename from app/services/exports/case_log_export_constants.rb rename to app/services/exports/lettings_log_export_constants.rb index 9a698d58d..9184efb25 100644 --- a/app/services/exports/case_log_export_constants.rb +++ b/app/services/exports/lettings_log_export_constants.rb @@ -1,4 +1,4 @@ -module Exports::CaseLogExportConstants +module Exports::LettingsLogExportConstants MAX_XML_RECORDS = 10_000 LOG_ID_OFFSET = 300_000_000_000 diff --git a/app/services/exports/case_log_export_service.rb b/app/services/exports/lettings_log_export_service.rb similarity index 67% rename from app/services/exports/case_log_export_service.rb rename to app/services/exports/lettings_log_export_service.rb index 7a6918831..a7fff1d53 100644 --- a/app/services/exports/case_log_export_service.rb +++ b/app/services/exports/lettings_log_export_service.rb @@ -1,25 +1,25 @@ module Exports - class CaseLogExportService - include Exports::CaseLogExportConstants + class LettingsLogExportService + include Exports::LettingsLogExportConstants def initialize(storage_service, logger = Rails.logger) @storage_service = storage_service @logger = logger end - def export_csv_case_logs + def export_csv_lettings_logs time_str = Time.zone.now.strftime("%F").underscore - case_logs = retrieve_case_logs(Time.zone.now, true) - csv_io = build_export_csv(case_logs) + lettings_logs = retrieve_lettings_logs(Time.zone.now, true) + csv_io = build_export_csv(lettings_logs) @storage_service.write_file("export_#{time_str}.csv", csv_io) end - def export_xml_case_logs(full_update: false) + def export_xml_lettings_logs(full_update: false) start_time = Time.zone.now - case_logs = retrieve_case_logs(start_time, full_update) + lettings_logs = retrieve_lettings_logs(start_time, full_update) export = build_export_run(start_time, full_update) daily_run = get_daily_run_number - archive_datetimes = write_export_archive(export, case_logs) + archive_datetimes = write_export_archive(export, lettings_logs) export.empty_export = archive_datetimes.empty? write_master_manifest(daily_run, archive_datetimes) export.save! @@ -62,41 +62,41 @@ module Exports @storage_service.write_file(file_path, string_io) end - def get_archive_name(case_log, base_number, increment) - return unless case_log.startdate + def get_archive_name(lettings_log, base_number, increment) + return unless lettings_log.startdate - collection_start = case_log.collection_start_year - month = case_log.startdate.month + collection_start = lettings_log.collection_start_year + month = lettings_log.startdate.month quarter = QUARTERS[(month - 1) / 3] base_number_str = "f#{base_number.to_s.rjust(4, '0')}" increment_str = "inc#{increment.to_s.rjust(4, '0')}" "core_#{collection_start}_#{collection_start + 1}_#{quarter}_#{base_number_str}_#{increment_str}" end - def write_export_archive(export, case_logs) - # Order case logs per archive - case_logs_per_archive = {} - case_logs.each do |case_log| - archive = get_archive_name(case_log, export.base_number, export.increment_number) + def write_export_archive(export, lettings_logs) + # Order lettings logs per archive + lettings_logs_per_archive = {} + lettings_logs.each do |lettings_log| + archive = get_archive_name(lettings_log, export.base_number, export.increment_number) next unless archive - if case_logs_per_archive.key?(archive) - case_logs_per_archive[archive] << case_log + if lettings_logs_per_archive.key?(archive) + lettings_logs_per_archive[archive] << lettings_log else - case_logs_per_archive[archive] = [case_log] + lettings_logs_per_archive[archive] = [lettings_log] end end # Write all archives archive_datetimes = {} - case_logs_per_archive.each do |archive, case_logs_to_export| - manifest_xml = build_manifest_xml(case_logs_to_export.count) + lettings_logs_per_archive.each do |archive, lettings_logs_to_export| + manifest_xml = build_manifest_xml(lettings_logs_to_export.count) zip_file = Zip::File.open_buffer(StringIO.new) zip_file.add("manifest.xml", manifest_xml) part_number = 1 - case_logs_to_export.each_slice(MAX_XML_RECORDS) do |case_logs_slice| - data_xml = build_export_xml(case_logs_slice) + lettings_logs_to_export.each_slice(MAX_XML_RECORDS) do |lettings_logs_slice| + data_xml = build_export_xml(lettings_logs_slice) part_number_str = "pt#{part_number.to_s.rjust(3, '0')}" zip_file.add("#{archive}_#{part_number_str}.xml", data_xml) part_number += 1 @@ -112,14 +112,14 @@ module Exports archive_datetimes end - def retrieve_case_logs(start_time, full_update) + def retrieve_lettings_logs(start_time, full_update) recent_export = LogsExport.order("started_at").last if !full_update && recent_export params = { from: recent_export.started_at, to: start_time } - CaseLog.where("updated_at >= :from and updated_at <= :to", params) + LettingsLog.where("updated_at >= :from and updated_at <= :to", params) else params = { to: start_time } - CaseLog.where("updated_at <= :to", params) + LettingsLog.where("updated_at <= :to", params) end end @@ -150,13 +150,13 @@ module Exports xml_doc_to_temp_file(doc) end - def apply_cds_transformation(case_log, export_mode) - attribute_hash = case_log.attributes_before_type_cast + def apply_cds_transformation(lettings_log, export_mode) + attribute_hash = lettings_log.attributes_before_type_cast attribute_hash["form"] = attribute_hash["old_form_id"] || (attribute_hash["id"] + LOG_ID_OFFSET) # We can't have a variable number of columns in CSV unless export_mode == EXPORT_MODE[:csv] - case case_log.collection_start_year + case lettings_log.collection_start_year when 2021 attribute_hash.delete("joint") when 2022 @@ -165,15 +165,15 @@ module Exports end # Organisation fields - if case_log.owning_organisation - attribute_hash["owningorgid"] = case_log.owning_organisation.old_visible_id || (case_log.owning_organisation.id + LOG_ID_OFFSET) - attribute_hash["owningorgname"] = case_log.owning_organisation.name - attribute_hash["hcnum"] = case_log.owning_organisation.housing_registration_no + if lettings_log.owning_organisation + attribute_hash["owningorgid"] = lettings_log.owning_organisation.old_visible_id || (lettings_log.owning_organisation.id + LOG_ID_OFFSET) + attribute_hash["owningorgname"] = lettings_log.owning_organisation.name + attribute_hash["hcnum"] = lettings_log.owning_organisation.housing_registration_no end - if case_log.managing_organisation - attribute_hash["maningorgid"] = case_log.managing_organisation.old_visible_id || (case_log.managing_organisation.id + LOG_ID_OFFSET) - attribute_hash["maningorgname"] = case_log.managing_organisation.name - attribute_hash["manhcnum"] = case_log.managing_organisation.housing_registration_no + if lettings_log.managing_organisation + attribute_hash["maningorgid"] = lettings_log.managing_organisation.old_visible_id || (lettings_log.managing_organisation.id + LOG_ID_OFFSET) + attribute_hash["maningorgname"] = lettings_log.managing_organisation.name + attribute_hash["manhcnum"] = lettings_log.managing_organisation.housing_registration_no end # Mapping which would require a change in our data model @@ -190,13 +190,13 @@ module Exports end # Supported housing fields - if case_log.is_supported_housing? - attribute_hash["unittype_sh"] = case_log.unittype_sh - attribute_hash["sheltered"] = case_log.sheltered - attribute_hash["nocharge"] = case_log.household_charge == 1 ? 1 : nil - attribute_hash["chcharge"] = case_log.chcharge - add_scheme_fields!(case_log.scheme, attribute_hash) - add_location_fields!(case_log.location, attribute_hash) + if lettings_log.is_supported_housing? + attribute_hash["unittype_sh"] = lettings_log.unittype_sh + attribute_hash["sheltered"] = lettings_log.sheltered + attribute_hash["nocharge"] = lettings_log.household_charge == 1 ? 1 : nil + attribute_hash["chcharge"] = lettings_log.chcharge + add_scheme_fields!(lettings_log.scheme, attribute_hash) + add_location_fields!(lettings_log.location, attribute_hash) attribute_hash.delete("unittype_gn") end attribute_hash @@ -232,11 +232,11 @@ module Exports !EXPORT_FIELDS.include?(field_name) end - def build_export_csv(case_logs) + def build_export_csv(lettings_logs) csv_io = CSV.generate do |csv| attribute_keys = nil - case_logs.each do |case_log| - attribute_hash = apply_cds_transformation(case_log, EXPORT_MODE[:csv]) + lettings_logs.each do |lettings_log| + attribute_hash = apply_cds_transformation(lettings_log, EXPORT_MODE[:csv]) if attribute_keys.nil? attribute_keys = attribute_hash.keys filter_keys!(attribute_keys) @@ -249,11 +249,11 @@ module Exports StringIO.new(csv_io) end - def build_export_xml(case_logs) + def build_export_xml(lettings_logs) doc = Nokogiri::XML("") - case_logs.each do |case_log| - attribute_hash = apply_cds_transformation(case_log, EXPORT_MODE[:xml]) + lettings_logs.each do |lettings_log| + attribute_hash = apply_cds_transformation(lettings_log, EXPORT_MODE[:xml]) form = doc.create_element("form") doc.at("forms") << form attribute_hash.each do |key, value| @@ -263,7 +263,7 @@ module Exports form << doc.create_element(key, value) end end - form << doc.create_element("providertype", case_log.owning_organisation.read_attribute_before_type_cast(:provider_type)) + form << doc.create_element("providertype", lettings_log.owning_organisation.read_attribute_before_type_cast(:provider_type)) end xml_doc_to_temp_file(doc) diff --git a/app/services/imports/case_logs_field_import_service.rb b/app/services/imports/lettings_logs_field_import_service.rb similarity index 80% rename from app/services/imports/case_logs_field_import_service.rb rename to app/services/imports/lettings_logs_field_import_service.rb index 3f26c74cf..218decb7a 100644 --- a/app/services/imports/case_logs_field_import_service.rb +++ b/app/services/imports/lettings_logs_field_import_service.rb @@ -1,5 +1,5 @@ module Imports - class CaseLogsFieldImportService < ImportService + class LettingsLogsFieldImportService < ImportService def update_field(field, folder) case field when "tenancycode" @@ -18,7 +18,7 @@ module Imports def update_lettings_allocation(xml_doc) old_id = field_value(xml_doc, "meta", "document-id") previous_status = field_value(xml_doc, "meta", "status") - record = CaseLog.find_by(old_id:) + record = LettingsLog.find_by(old_id:) if record.present? && previous_status.include?("submitted") cbl = unsafe_string_as_integer(xml_doc, "Q15CBL") @@ -26,19 +26,19 @@ module Imports cap = unsafe_string_as_integer(xml_doc, "Q15CAP") if cbl == 2 && record.cbl == 1 record.update!(cbl: 0) - @logger.info("Case Log #{record.id}'s cbl value has been updated'") + @logger.info("lettings log #{record.id}'s cbl value has been updated'") end if chr == 2 && record.chr == 1 record.update!(chr: 0) - @logger.info("Case Log #{record.id}'s chr value has been updated'") + @logger.info("lettings log #{record.id}'s chr value has been updated'") end if cap == 2 && record.cap == 1 record.update!(cap: 0) - @logger.info("Case Log #{record.id}'s cap value has been updated'") + @logger.info("lettings log #{record.id}'s cap value has been updated'") end if cbl == 2 && chr == 2 && cap == 2 && record.letting_allocation_unknown.nil? record.update!(letting_allocation_unknown: 1) - @logger.info("Case Log #{record.id}'s letting_allocation_unknown value has been updated'") + @logger.info("lettings log #{record.id}'s letting_allocation_unknown value has been updated'") end else @logger.warn("Could not find record matching legacy ID #{old_id}") @@ -47,7 +47,7 @@ module Imports def update_major_repairs(xml_doc) old_id = field_value(xml_doc, "meta", "document-id") - record = CaseLog.find_by(old_id:) + record = LettingsLog.find_by(old_id:) if record.present? previous_status = field_value(xml_doc, "meta", "status") @@ -59,9 +59,9 @@ module Imports end if major_repairs.present? && record.majorrepairs.nil? && record.status != "completed" record.update!(mrcdate: major_repairs_date, majorrepairs: major_repairs) - @logger.info("Case Log #{record.id}'s major repair value has been updated'") + @logger.info("lettings log #{record.id}'s major repair value has been updated'") elsif record.majorrepairs.present? - @logger.info("Case Log #{record.id} has a value for major repairs, skipping update") + @logger.info("lettings log #{record.id} has a value for major repairs, skipping update") end else @logger.warn("Could not find record matching legacy ID #{old_id}") @@ -70,14 +70,14 @@ module Imports def update_tenant_code(xml_doc) old_id = field_value(xml_doc, "meta", "document-id") - record = CaseLog.find_by(old_id:) + record = LettingsLog.find_by(old_id:) if record.present? tenant_code = string_or_nil(xml_doc, "_2bTenCode") if tenant_code.present? && record.tenancycode.blank? record.update!(tenancycode: tenant_code) else - @logger.info("Case Log #{record.id} has a value for tenancycode, skipping update") + @logger.info("lettings log #{record.id} has a value for tenancycode, skipping update") end else @logger.warn("Could not find record matching legacy ID #{old_id}") diff --git a/app/services/imports/case_logs_import_service.rb b/app/services/imports/lettings_logs_import_service.rb similarity index 87% rename from app/services/imports/case_logs_import_service.rb rename to app/services/imports/lettings_logs_import_service.rb index a0d75c0bb..972f15f26 100644 --- a/app/services/imports/case_logs_import_service.rb +++ b/app/services/imports/lettings_logs_import_service.rb @@ -1,5 +1,5 @@ module Imports - class CaseLogsImportService < ImportService + class LettingsLogsImportService < ImportService def initialize(storage_service, logger = Rails.logger) @logs_with_discrepancies = Set.new @logs_overridden = Set.new @@ -9,7 +9,7 @@ module Imports def create_logs(folder) import_from(folder, :create_log) if @logs_with_discrepancies.count.positive? - @logger.warn("The following case logs had status discrepancies: [#{@logs_with_discrepancies.join(', ')}]") + @logger.warn("The following lettings logs had status discrepancies: [#{@logs_with_discrepancies.join(', ')}]") end end @@ -107,6 +107,13 @@ module Imports %w[a b c f g h].each do |letter| attributes["housingneeds_#{letter}"] = housing_needs(xml_doc, letter) end + attributes["housingneeds"] = 1 if [attributes["housingneeds_a"], attributes["housingneeds_b"], attributes["housingneeds_c"], attributes["housingneeds_f"]].any? { |housingneed| housingneed == 1 } + attributes["housingneeds"] = 2 if attributes["housingneeds_g"] == 1 + attributes["housingneeds"] = 3 if attributes["housingneeds_h"] == 1 + attributes["housingneeds_type"] = 0 if attributes["housingneeds_a"] == 1 + attributes["housingneeds_type"] = 1 if attributes["housingneeds_b"] == 1 + attributes["housingneeds_type"] = 2 if attributes["housingneeds_c"] == 1 + attributes["housingneeds_other"] = attributes["housingneeds_f"] == 1 ? 1 : 0 attributes["illness"] = unsafe_string_as_integer(xml_doc, "Q10ia") (1..10).each do |index| @@ -224,65 +231,65 @@ module Imports apply_date_consistency!(attributes) apply_household_consistency!(attributes) - case_log = save_case_log(attributes) - compute_differences(case_log, attributes) - check_status_completed(case_log, previous_status) unless @logs_overridden.include?(case_log.old_id) + lettings_log = save_lettings_log(attributes) + compute_differences(lettings_log, attributes) + check_status_completed(lettings_log, previous_status) unless @logs_overridden.include?(lettings_log.old_id) end - def save_case_log(attributes) - case_log = CaseLog.new(attributes) + def save_lettings_log(attributes) + lettings_log = LettingsLog.new(attributes) begin - case_log.save! - case_log + lettings_log.save! + lettings_log rescue ActiveRecord::RecordNotUnique legacy_id = attributes["old_id"] - record = CaseLog.find_by(old_id: legacy_id) - @logger.info "Updating case log #{record.id} with legacy ID #{legacy_id}" + record = LettingsLog.find_by(old_id: legacy_id) + @logger.info "Updating lettings log #{record.id} with legacy ID #{legacy_id}" record.update!(attributes) record rescue ActiveRecord::RecordInvalid => e - rescue_validation_or_raise(case_log, attributes, e) + rescue_validation_or_raise(lettings_log, attributes, e) end end - def rescue_validation_or_raise(case_log, attributes, exception) - if case_log.errors.of_kind?(:referral, :internal_transfer_non_social_housing) - @logger.warn("Log #{case_log.old_id}: Removing internal transfer referral since previous tenancy is a non social housing") - @logs_overridden << case_log.old_id + def rescue_validation_or_raise(lettings_log, attributes, exception) + if lettings_log.errors.of_kind?(:referral, :internal_transfer_non_social_housing) + @logger.warn("Log #{lettings_log.old_id}: Removing internal transfer referral since previous tenancy is a non social housing") + @logs_overridden << lettings_log.old_id attributes.delete("referral") - save_case_log(attributes) - elsif case_log.errors.of_kind?(:referral, :internal_transfer_fixed_or_lifetime) - @logger.warn("Log #{case_log.old_id}: Removing internal transfer referral since previous tenancy is fixed terms or lifetime") - @logs_overridden << case_log.old_id + save_lettings_log(attributes) + elsif lettings_log.errors.of_kind?(:referral, :internal_transfer_fixed_or_lifetime) + @logger.warn("Log #{lettings_log.old_id}: Removing internal transfer referral since previous tenancy is fixed terms or lifetime") + @logs_overridden << lettings_log.old_id attributes.delete("referral") - save_case_log(attributes) + save_lettings_log(attributes) else raise exception end end - def compute_differences(case_log, attributes) + def compute_differences(lettings_log, attributes) differences = [] attributes.each do |key, value| - case_log_value = case_log.send(key.to_sym) + lettings_log_value = lettings_log.send(key.to_sym) next if fields_not_present_in_softwire_data.include?(key) - if value != case_log_value - differences.push("#{key} #{value.inspect} #{case_log_value.inspect}") + if value != lettings_log_value + differences.push("#{key} #{value.inspect} #{lettings_log_value.inspect}") end end - @logger.warn "Differences found when saving log #{case_log.old_id}: #{differences}" unless differences.empty? + @logger.warn "Differences found when saving log #{lettings_log.old_id}: #{differences}" unless differences.empty? end def fields_not_present_in_softwire_data - %w[majorrepairs illness_type_0 tshortfall_known pregnancy_value_check retirement_value_check rent_value_check net_income_value_check major_repairs_date_value_check void_date_value_check] + %w[majorrepairs illness_type_0 tshortfall_known pregnancy_value_check retirement_value_check rent_value_check net_income_value_check major_repairs_date_value_check void_date_value_check housingneeds_type housingneeds_other] end - def check_status_completed(case_log, previous_status) - if previous_status.include?("submitted") && case_log.status != "completed" - @logger.warn "Case log #{case_log.id} is not completed" - @logger.warn "Case log with old id:#{case_log.old_id} is incomplete but status should be complete" - @logs_with_discrepancies << case_log.old_id + def check_status_completed(lettings_log, previous_status) + if previous_status.include?("submitted") && lettings_log.status != "completed" + @logger.warn "lettings log #{lettings_log.id} is not completed" + @logger.warn "lettings log with old id:#{lettings_log.old_id} is incomplete but status should be complete" + @logs_with_discrepancies << lettings_log.old_id end end @@ -341,7 +348,7 @@ module Imports end end - # This does not match renttype (CDS) which is derived by case log logic + # This does not match renttype (CDS) which is derived by lettings log logic def rent_type(xml_doc, lar, irproduct) sr_ar_ir = get_form_name_component(xml_doc, FORM_NAME_INDEX[:rent_type]) diff --git a/app/views/form/_check_answers_summary_list.html.erb b/app/views/form/_check_answers_summary_list.html.erb index d04dfa031..85c29beca 100644 --- a/app/views/form/_check_answers_summary_list.html.erb +++ b/app/views/form/_check_answers_summary_list.html.erb @@ -1,21 +1,21 @@ <%= govuk_summary_list do |summary_list| %> - <% total_applicable_questions(subsection, @case_log, current_user).each do |question| %> + <% total_applicable_questions(subsection, @lettings_log, current_user).each do |question| %> <% summary_list.row do |row| %> <% row.key { question.check_answer_label.to_s.presence || question.header.to_s } %> <% row.value do %> - <%= get_answer_label(question, @case_log) %> - <% extra_value = question.get_extra_check_answer_value(@case_log) %> + <%= get_answer_label(question, @lettings_log) %> + <% extra_value = question.get_extra_check_answer_value(@lettings_log) %> <% if extra_value %> <%= extra_value %> <% end %>
- <% question.get_inferred_answers(@case_log).each do |inferred_answer| %> + <% question.get_inferred_answers(@lettings_log).each do |inferred_answer| %> <%= inferred_answer %> <% end %> <% end %> <% row.action( - text: question.action_text(@case_log), - href: question.action_href(@case_log, question.page.id), + text: question.action_text(@lettings_log), + href: question.action_href(@lettings_log, question.page.id), visually_hidden_text: question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/app/views/form/_checkbox_question.html.erb b/app/views/form/_checkbox_question.html.erb index 41bd3cc6d..245056c39 100644 --- a/app/views/form/_checkbox_question.html.erb +++ b/app/views/form/_checkbox_question.html.erb @@ -6,7 +6,7 @@ hint: { text: question.hint_text&.html_safe } do %> <% after_divider = false %> - <% question.displayed_answer_options(@case_log).map do |key, options| %> + <% question.displayed_answer_options(@lettings_log).map do |key, options| %> <% if key.starts_with?("divider") %> <% after_divider = true %> <%= f.govuk_check_box_divider %> @@ -14,7 +14,7 @@ <%= f.govuk_check_box question.id, key, label: { text: options["value"] }, hint: { text: options["hint"] }, - checked: @case_log[key] == 1, + checked: @lettings_log[key] == 1, exclusive: after_divider, **stimulus_html_attributes(question) %> <% end %> diff --git a/app/views/form/_interruption_screen_question.html.erb b/app/views/form/_interruption_screen_question.html.erb index c17c7bd84..c5da48a92 100644 --- a/app/views/form/_interruption_screen_question.html.erb +++ b/app/views/form/_interruption_screen_question.html.erb @@ -1,8 +1,8 @@ <%= govuk_panel( - title_text: display_title_text(title_text, case_log), + title_text: display_title_text(title_text, lettings_log), classes: "app-panel--interruption", ) do %> -

<%= display_informative_text(informative_text, case_log) %>

+

<%= display_informative_text(informative_text, lettings_log) %>

<%= f.govuk_radio_buttons_fieldset question.id.to_sym, legend: { text: question.header }, hint: { text: question.hint_text&.html_safe } do %> diff --git a/app/views/form/_numeric_output_question.html.erb b/app/views/form/_numeric_output_question.html.erb index 7f3f73719..b96e7b53d 100644 --- a/app/views/form/_numeric_output_question.html.erb +++ b/app/views/form/_numeric_output_question.html.erb @@ -1,7 +1,7 @@ <%= render partial: "form/guidance/#{question.guidance_partial}" if question.top_guidance? %>
-
diff --git a/app/views/form/_numeric_question.html.erb b/app/views/form/_numeric_question.html.erb index d40067194..fc6aa274a 100644 --- a/app/views/form/_numeric_question.html.erb +++ b/app/views/form/_numeric_question.html.erb @@ -8,7 +8,7 @@ width: question.width, readonly: question.read_only?, prefix_text: question.prefix.to_s, - suffix_text: question.suffix_label(@case_log), + suffix_text: question.suffix_label(@lettings_log), **stimulus_html_attributes(question) %> <%= render partial: "form/guidance/#{question.guidance_partial}" if question.bottom_guidance? %> diff --git a/app/views/form/_radio_question.html.erb b/app/views/form/_radio_question.html.erb index d7bcc0381..f153a838b 100644 --- a/app/views/form/_radio_question.html.erb +++ b/app/views/form/_radio_question.html.erb @@ -5,7 +5,7 @@ legend: legend(question, page_header, conditional), hint: { text: question.hint_text&.html_safe } do %> - <% question.displayed_answer_options(@case_log).map do |key, options| %> + <% question.displayed_answer_options(@lettings_log).map do |key, options| %> <% if key.starts_with?("divider") %> <%= f.govuk_radio_divider %> <% else %> diff --git a/app/views/form/_select_question.html.erb b/app/views/form/_select_question.html.erb index ff4dd5f2e..fbdb20e9a 100644 --- a/app/views/form/_select_question.html.erb +++ b/app/views/form/_select_question.html.erb @@ -1,7 +1,7 @@ <%= render partial: "form/guidance/#{question.guidance_partial}" if question.top_guidance? %> -<% selected = @case_log.public_send(question.id) || "" %> -<% answers = question.displayed_answer_options(@case_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } %> +<% selected = @lettings_log.public_send(question.id) || "" %> +<% answers = question.displayed_answer_options(@lettings_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } %> <%= f.govuk_select(question.id.to_sym, label: legend(question, page_header, conditional), "data-controller": "accessible-autocomplete", @@ -12,7 +12,7 @@ data-synonyms="<%= question.answer_option_synonyms(answer.resource) %>" data-append="<%= question.answer_option_append(answer.resource) %>" data-hint="<%= question.answer_option_hint(answer.resource) %>" - <%= question.answer_selected?(@case_log, answer) ? "selected" : "" %> + <%= question.answer_selected?(@lettings_log, answer) ? "selected" : "" %> <%= answer.id == "" ? "disabled" : "" %>><%= answer.name || answer.resource %> <% end %> <% end %> diff --git a/app/views/form/check_answers.html.erb b/app/views/form/check_answers.html.erb index 44b4f89d4..a2bcb09bc 100644 --- a/app/views/form/check_answers.html.erb +++ b/app/views/form/check_answers.html.erb @@ -1,7 +1,7 @@ <% content_for :title, "#{subsection.id.humanize} - Check your answers" %> <% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { "Logs" => "/logs", - "Log #{@case_log.id}" => "/logs/#{@case_log.id}", + "Log #{@lettings_log.id}" => "/logs/#{@lettings_log.id}", subsection.label => "", }) %> @@ -12,27 +12,27 @@ Check your answers - <% if subsection.id == "setup" && subsection.status(@case_log) == :completed %> + <% if subsection.id == "setup" && subsection.status(@lettings_log) == :completed %> <%= govuk_inset_text(text: "Changing these answers might remove answers you’ve already given in other sections.") %> <% end %> - <%= display_answered_questions_summary(subsection, @case_log, current_user) %> + <%= display_answered_questions_summary(subsection, @lettings_log, current_user) %> - <% if any_questions_have_summary_card_number?(subsection, @case_log) %> - <% subsection.applicable_questions(@case_log).group_by(&:check_answers_card_number).values.each do |question_group| %> - <%= render CheckAnswersSummaryListCardComponent.new(questions: question_group, case_log: @case_log, user: current_user) %> + <% if any_questions_have_summary_card_number?(subsection, @lettings_log) %> + <% subsection.applicable_questions(@lettings_log).group_by(&:check_answers_card_number).values.each do |question_group| %> + <%= render CheckAnswersSummaryListCardComponent.new(questions: question_group, lettings_log: @lettings_log, user: current_user) %> <% end %> <% else %> <%= render partial: "form/check_answers_summary_list", locals: { subsection:, - case_log: @case_log, + lettings_log: @lettings_log, } %> <% end %> - <%= form_with model: @case_log, method: "get" do |f| %> + <%= form_with model: @lettings_log, method: "get" do |f| %> <%= f.govuk_submit "Save and return to log" do %> - <% next_incomplete_section_redirect_path = @case_log.form.next_incomplete_section_redirect_path(subsection, @case_log) %> - <% if @case_log.status == "in_progress" && next_incomplete_section_redirect_path != "error" %> - <%= govuk_button_link_to "Save and go to next incomplete section", "/logs/#{@case_log.id}/#{next_incomplete_section_redirect_path}", secondary: true %> + <% next_incomplete_section_redirect_path = @lettings_log.form.next_incomplete_section_redirect_path(subsection, @lettings_log) %> + <% if @lettings_log.status == "in_progress" && next_incomplete_section_redirect_path != "error" %> + <%= govuk_button_link_to "Save and go to next incomplete section", "/logs/#{@lettings_log.id}/#{next_incomplete_section_redirect_path}", secondary: true %> <% end %> <% end %> <% end %> diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index f0edd1afb..0fe72f647 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -5,10 +5,10 @@ <% end %>
-<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post", local: true do |f| %> +<%= form_with model: @lettings_log, url: form_lettings_log_path(@lettings_log), method: "post", local: true do |f| %>
"> - <% remove_other_page_errors(@case_log, @page) %> + <% remove_other_page_errors(@lettings_log, @page) %> <%= f.govuk_error_summary %> <% if @page.header.present? %> @@ -30,9 +30,9 @@ <%= govuk_section_break(visible: true, size: "m") %> <% end %> <% if question.type == "interruption_screen" %> - <%= render partial: "form/#{question.type}_question", locals: { question:, caption_text: @subsection.label, page_header: @page.header, case_log: @case_log, title_text: @page.title_text, informative_text: @page.informative_text, form: @form, f:, conditional: false } %> + <%= render partial: "form/#{question.type}_question", locals: { question:, caption_text: @subsection.label, page_header: @page.header, lettings_log: @lettings_log, title_text: @page.title_text, informative_text: @page.informative_text, form: @form, f:, conditional: false } %> <% else %> - <%= render partial: "form/#{question.type}_question", locals: { question:, caption_text: @subsection.label, page_header: @page.header, case_log: @case_log, f:, conditional: false } %> + <%= render partial: "form/#{question.type}_question", locals: { question:, caption_text: @subsection.label, page_header: @page.header, lettings_log: @lettings_log, f:, conditional: false } %> <% end %>
<% end %> @@ -42,10 +42,10 @@
<% if !@page.id.include?("value_check") && if request.query_parameters["referrer"] != "check_answers" %> <%= f.govuk_submit "Save and continue" %> - <%= govuk_link_to "Skip for now", send(@case_log.form.next_page_redirect_path(@page, @case_log, current_user), @case_log) %> + <%= govuk_link_to "Skip for now", send(@lettings_log.form.next_page_redirect_path(@page, @lettings_log, current_user), @lettings_log) %> <% else %> <%= f.govuk_submit "Save changes" %> - <%= govuk_link_to "Cancel", "/logs/#{@case_log.id}/setup/check-answers" %> + <%= govuk_link_to "Cancel", "/logs/#{@lettings_log.id}/setup/check-answers" %> <% end %> <% end %>
diff --git a/app/views/form/review.html.erb b/app/views/form/review.html.erb index 3c8777359..55a693913 100644 --- a/app/views/form/review.html.erb +++ b/app/views/form/review.html.erb @@ -1,7 +1,7 @@ <% content_for :title, "Review lettings log" %> <% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { "Logs" => "/logs", - "Log #{@case_log.id}" => "/logs/#{@case_log.id}", + "Log #{@lettings_log.id}" => "/logs/#{@lettings_log.id}", "Review lettings log" => "", }) %> @@ -11,9 +11,9 @@ <%= content_for(:title) %>

- You can review and make changes to this log until 2nd June <%= @case_log.collection_start_year.present? ? @case_log.collection_start_year + 1 : "" %>. + You can review and make changes to this log until 2nd June <%= @lettings_log.collection_start_year.present? ? @lettings_log.collection_start_year + 1 : "" %>.

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

<%= section.label %>

<% section.subsections.map do |subsection| %>
@@ -23,7 +23,7 @@
<%= render partial: "form/check_answers_summary_list", locals: { subsection:, - case_log: @case_log, + lettings_log: @lettings_log, } %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 0774567c3..5dc643e4e 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -1,7 +1,7 @@ - <%= browser_title(yield(:title), @pagy, @admin_user, @user, @organisation, @case_log, @resource) %> + <%= browser_title(yield(:title), @pagy, @admin_user, @user, @organisation, @lettings_log, @resource) %> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= tag.meta name: "viewport", content: "width=device-width, initial-scale=1" %> diff --git a/app/views/case_logs/_log_filters.erb b/app/views/lettings_logs/_log_filters.erb similarity index 100% rename from app/views/case_logs/_log_filters.erb rename to app/views/lettings_logs/_log_filters.erb diff --git a/app/views/case_logs/_log_list.html.erb b/app/views/lettings_logs/_log_list.html.erb similarity index 90% rename from app/views/case_logs/_log_list.html.erb rename to app/views/lettings_logs/_log_list.html.erb index 6dab48bbc..93d365c40 100644 --- a/app/views/case_logs/_log_list.html.erb +++ b/app/views/lettings_logs/_log_list.html.erb @@ -3,6 +3,6 @@ <%= govuk_link_to "Download (CSV)", "#{request.path}.csv", type: "text/csv" %> -<% case_logs.map do |log| %> +<% lettings_logs.map do |log| %> <%= render(LogSummaryComponent.new(current_user:, log:)) %> <% end %> diff --git a/app/views/case_logs/_tasklist.html.erb b/app/views/lettings_logs/_tasklist.html.erb similarity index 68% rename from app/views/case_logs/_tasklist.html.erb rename to app/views/lettings_logs/_tasklist.html.erb index ff64d5b74..03e712889 100644 --- a/app/views/case_logs/_tasklist.html.erb +++ b/app/views/lettings_logs/_tasklist.html.erb @@ -1,5 +1,5 @@
    - <% @case_log.form.sections.map do |section| %> + <% @lettings_log.form.sections.map do |section| %>
  1. <%= section.label %> @@ -9,11 +9,11 @@ <% end %>
      <% section.subsections.map do |subsection| %> - <% if subsection.applicable_questions(@case_log).count > 0 || !subsection.enabled?(@case_log) %> - <% subsection_status = subsection.status(@case_log) %> + <% if subsection.applicable_questions(@lettings_log).count > 0 || !subsection.enabled?(@lettings_log) %> + <% subsection_status = subsection.status(@lettings_log) %>
    • - <%= subsection_link(subsection, @case_log, current_user) %> + <%= subsection_link(subsection, @lettings_log, current_user) %> <%= status_tag(subsection_status, "app-task-list__tag") %>
    • diff --git a/app/views/case_logs/bulk_upload.html.erb b/app/views/lettings_logs/bulk_upload.html.erb similarity index 62% rename from app/views/case_logs/bulk_upload.html.erb rename to app/views/lettings_logs/bulk_upload.html.erb index 1d6017972..0f1b544f7 100644 --- a/app/views/case_logs/bulk_upload.html.erb +++ b/app/views/lettings_logs/bulk_upload.html.erb @@ -1,9 +1,9 @@ <% content_for :title, "Bulk upload" %> -<%= form_for @bulk_upload, url: bulk_upload_case_logs_path, method: "post" do |f| %> +<%= form_for @bulk_upload, url: bulk_upload_lettings_logs_path, method: "post" do |f| %> <%= f.govuk_error_summary %> - <%= f.govuk_file_field :case_log_bulk_upload, + <%= f.govuk_file_field :lettings_log_bulk_upload, label: { text: content_for(:title), size: "l" }, hint: { text: "Upload a spreadsheet using the template" } %> diff --git a/app/views/case_logs/edit.html.erb b/app/views/lettings_logs/edit.html.erb similarity index 64% rename from app/views/case_logs/edit.html.erb rename to app/views/lettings_logs/edit.html.erb index 90ba5cd1b..acfbba053 100644 --- a/app/views/case_logs/edit.html.erb +++ b/app/views/lettings_logs/edit.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, "Log #{@case_log.id}" %> +<% content_for :title, "Log #{@lettings_log.id}" %> <% content_for :breadcrumbs, govuk_breadcrumbs(breadcrumbs: { "Logs" => "/logs", content_for(:title) => "", @@ -10,10 +10,10 @@ <%= content_for(:title) %>

    - <% if @case_log.status == "in_progress" %> -

    <%= get_subsections_count(@case_log, :completed) %> of <%= get_subsections_count(@case_log, :all) %> sections completed.

    + <% if @lettings_log.status == "in_progress" %> +

    <%= get_subsections_count(@lettings_log, :completed) %> of <%= get_subsections_count(@lettings_log, :all) %> sections completed.

    - <% next_incomplete_section = get_next_incomplete_section(@case_log) %> + <% next_incomplete_section = get_next_incomplete_section(@lettings_log) %>

    <% if next_incomplete_section.present? %> @@ -22,14 +22,14 @@ <% end %>

    - <% elsif @case_log.status == "not_started" %> + <% elsif @lettings_log.status == "not_started" %>

    This log has not been started.

    - <% elsif @case_log.status == "completed" %> + <% elsif @lettings_log.status == "completed" %>

    - <%= status_tag(@case_log.status) %> + <%= status_tag(@lettings_log.status) %>

    - You can <%= govuk_link_to "review and make changes to this log", "/logs/#{@case_log.id}/review" %> until 2nd June <%= @case_log.collection_start_year.present? ? @case_log.collection_start_year + 1 : "" %>. + You can <%= govuk_link_to "review and make changes to this log", "/logs/#{@lettings_log.id}/review" %> until 2nd June <%= @lettings_log.collection_start_year.present? ? @lettings_log.collection_start_year + 1 : "" %>.

    <% end %> <%= render "tasklist" %> diff --git a/app/views/case_logs/index.html.erb b/app/views/lettings_logs/index.html.erb similarity index 72% rename from app/views/case_logs/index.html.erb rename to app/views/lettings_logs/index.html.erb index 6d52d0060..9378aee09 100644 --- a/app/views/case_logs/index.html.erb +++ b/app/views/lettings_logs/index.html.erb @@ -7,15 +7,15 @@
    - <%= govuk_button_to "Create a new lettings log", case_logs_path %> - <%#= govuk_link_to "Upload logs", bulk_upload_case_logs_path %> + <%= govuk_button_to "Create a new lettings log", lettings_logs_path %> + <%#= govuk_link_to "Upload logs", bulk_upload_lettings_logs_path %>
    <%= render partial: "log_filters" %>
    <%= render SearchComponent.new(current_user:, search_label: "Search by log ID, tenant code, property reference or postcode", value: @searched) %> <%= govuk_section_break(visible: true, size: "m") %> - <%= render partial: "log_list", locals: { case_logs: @case_logs, title: "Logs", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> + <%= render partial: "log_list", locals: { lettings_logs: @lettings_logs, title: "Logs", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "logs" } %>
    diff --git a/app/views/organisations/logs.html.erb b/app/views/organisations/logs.html.erb index 10b686f56..916ac65ae 100644 --- a/app/views/organisations/logs.html.erb +++ b/app/views/organisations/logs.html.erb @@ -14,14 +14,14 @@
    - <%= govuk_button_to "Create a new lettings log for this organisation", case_logs_path(case_log: { owning_organisation_id: @organisation.id }, method: :post) %> + <%= govuk_button_to "Create a new lettings log for this organisation", lettings_logs_path(lettings_log: { owning_organisation_id: @organisation.id }, method: :post) %>
    - <%= render partial: "case_logs/log_filters" %> + <%= render partial: "lettings_logs/log_filters" %>
    <%= render SearchComponent.new(current_user:, search_label: "Search by log ID, tenant code, property reference or postcode", value: @searched) %> <%= govuk_section_break(visible: true, size: "m") %> - <%= render partial: "case_logs/log_list", locals: { case_logs: @case_logs, title: "Logs", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> + <%= render partial: "lettings_logs/log_list", locals: { lettings_logs: @lettings_logs, title: "Logs", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "logs" } %>
    diff --git a/app/views/start/index.html.erb b/app/views/start/index.html.erb index 7a6d0897f..cb6674760 100644 --- a/app/views/start/index.html.erb +++ b/app/views/start/index.html.erb @@ -10,7 +10,7 @@

    The data will be used to update the national record for social housing. It will also help to inform policy about the cost of social housing and what type of housing needs to be built.

    This service is only for social housing in England.

    - <% start_path = current_user ? case_logs_path : "#{user_session_path}?start=true" %> + <% start_path = current_user ? lettings_logs_path : "#{user_session_path}?start=true" %> <%= govuk_start_button( text: "Start now", href: start_path, diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index e2e0f0131..1ffbc1228 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -790,7 +790,7 @@ } ] }, - "header": "Are you sure the time between these dates is correct?", + "header": "Are you sure the property has been vacant for this long?", "type": "interruption_screen", "answer_options": { "0": { @@ -919,7 +919,7 @@ } ] }, - "header": "Are you sure the time between these dates is correct?", + "header": "Are you sure the property has been vacant for this long?", "type": "interruption_screen", "answer_options": { "0": { @@ -1242,7 +1242,7 @@ "description": "", "questions": { "age1_known": { - "check_answers_card_number": 1, + "check_answers_card_number": 1, "header": "Do you know the lead tenant’s age?", "hint_text": "The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest.", "type": "radio", @@ -5667,40 +5667,79 @@ } } }, - "access_needs": { + "access_needs_exist": { "header": "", "description": "", "questions": { - "accessibility_requirements": { + "housingneeds": { "header": "Does anybody in the household have any disabled access needs?", "hint_text": "", - "type": "checkbox", - "check_answer_label": "Anybody in household with disabled access needs", + "type": "radio", + "check_answer_label": "Anybody with disabled access needs", "answer_options": { - "housingneeds_a": { + "1": { + "value": "Yes" + }, + "2": { + "value": "No" + }, + "divider": { + "value": true + }, + "3": { + "value": "Don’t know" + } + } + } + } + }, + "type_of_access_needs": { + "header": "Disabled access needs", + "description": "", + "questions": { + "housingneeds_type": { + "header": "What type of access need do they have?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Disabled access needs", + "answer_options": { + "0": { "value": "Fully wheelchair accessible housing" }, - "housingneeds_b": { + "1": { "value": "Wheelchair access to essential rooms" }, - "housingneeds_c": { + "2": { "value": "Level access housing" }, - "housingneeds_f": { - "value": "Other disabled access needs" - }, "divider": { "value": true }, - "housingneeds_g": { - "value": "No disabled access needs" + "3": { + "value": "None of the above" + } + } + }, + "housingneeds_other": { + "header": "Do they have any other access needs?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Other disabled access needs", + "answer_options": { + "1": { + "value": "Yes" }, - "housingneeds_h": { - "value": "Don’t know" + "0": { + "value": "No" } } } - } + }, + "depends_on": [ + { + "housingneeds": 1 + } + ] }, "health_conditions": { "header": "", @@ -6209,12 +6248,7 @@ } } } - }, - "depends_on": [ - { - "renewal": 0 - } - ] + } }, "previous_postcode": { "header": "", diff --git a/config/forms/2022_2023.json b/config/forms/2022_2023.json index 0102d5587..9f3df73e1 100644 --- a/config/forms/2022_2023.json +++ b/config/forms/2022_2023.json @@ -790,7 +790,7 @@ } ] }, - "header": "Are you sure the time between these dates is correct?", + "header": "Are you sure the property has been vacant for this long?", "type": "interruption_screen", "answer_options": { "0": { @@ -919,7 +919,7 @@ } ] }, - "header": "Are you sure the time between these dates is correct?", + "header": "Are you sure the property has been vacant for this long?", "type": "interruption_screen", "answer_options": { "0": { @@ -1277,7 +1277,7 @@ "description": "", "questions": { "age1_known": { - "check_answers_card_number": 1, + "check_answers_card_number": 1, "header": "Do you know the lead tenant’s age?", "hint_text": "The ’lead’ or ’main’ tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest.", "type": "radio", @@ -5669,40 +5669,79 @@ } } }, - "access_needs": { + "access_needs_exist": { "header": "", "description": "", "questions": { - "accessibility_requirements": { + "housingneeds": { "header": "Does anybody in the household have any disabled access needs?", "hint_text": "", - "type": "checkbox", - "check_answer_label": "Anybody in household with disabled access needs", + "type": "radio", + "check_answer_label": "Anybody with disabled access needs", "answer_options": { - "housingneeds_a": { + "1": { + "value": "Yes" + }, + "2": { + "value": "No" + }, + "divider": { + "value": true + }, + "3": { + "value": "Don’t know" + } + } + } + } + }, + "type_of_access_needs": { + "header": "Disabled access needs", + "description": "", + "questions": { + "housingneeds_type": { + "header": "What type of access need do they have?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Disabled access needs", + "answer_options": { + "0": { "value": "Fully wheelchair accessible housing" }, - "housingneeds_b": { + "1": { "value": "Wheelchair access to essential rooms" }, - "housingneeds_c": { + "2": { "value": "Level access housing" }, - "housingneeds_f": { - "value": "Other disabled access needs" - }, "divider": { "value": true }, - "housingneeds_g": { - "value": "No disabled access needs" + "3": { + "value": "None of the above" + } + } + }, + "housingneeds_other": { + "header": "Do they have any other access needs?", + "hint_text": "", + "type": "radio", + "check_answer_label": "Other disabled access needs", + "answer_options": { + "1": { + "value": "Yes" }, - "housingneeds_h": { - "value": "Don’t know" + "0": { + "value": "No" } } } - } + }, + "depends_on": [ + { + "housingneeds": 1 + } + ] }, "health_conditions": { "header": "", @@ -6168,12 +6207,7 @@ } } } - }, - "depends_on": [ - { - "renewal": 0 - } - ] + } }, "previous_postcode": { "header": "", diff --git a/config/locales/en.yml b/config/locales/en.yml index 107558f3c..c6403408c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -124,8 +124,8 @@ en: not_first_let: "Major repairs date must not be completed if the tenancy is a first let" ten_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 10 years before the tenancy start date" void_date: - ten_years_before_tenancy_start: "Enter a void date must no more than 10 years before the tenancy start date" - before_tenancy_start: "Enter a void date must that is before the tenancy start date" + ten_years_before_tenancy_start: "Enter a void date no more than 10 years before the tenancy start date" + before_tenancy_start: "Enter a void date that is before the tenancy start date" after_mrcdate: "Void date must be before the major repairs date if provided" offered: relet_number: "Enter a number between 0 and 20 for the amount of times the property has been re-let" diff --git a/config/routes.rb b/config/routes.rb index 65130cd35..5a2fda475 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -73,7 +73,7 @@ Rails.application.routes.draw do end end - resources :case_logs, path: "/logs" do + resources :lettings_logs, path: "/logs" do collection do post "bulk-upload", to: "bulk_upload#bulk_upload" get "bulk-upload", to: "bulk_upload#show" diff --git a/db/migrate/20220809100723_add_accessibility_requirements_fields.rb b/db/migrate/20220809100723_add_accessibility_requirements_fields.rb new file mode 100644 index 000000000..636a7e0ec --- /dev/null +++ b/db/migrate/20220809100723_add_accessibility_requirements_fields.rb @@ -0,0 +1,8 @@ +class AddAccessibilityRequirementsFields < ActiveRecord::Migration[7.0] + def change + change_table :case_logs, bulk: true do |t| + t.column :housingneeds_type, :integer + t.column :housingneeds_other, :integer + end + end +end diff --git a/db/migrate/20220823083657_change_case_log_to_lettings_log.rb b/db/migrate/20220823083657_change_case_log_to_lettings_log.rb new file mode 100644 index 000000000..5827da902 --- /dev/null +++ b/db/migrate/20220823083657_change_case_log_to_lettings_log.rb @@ -0,0 +1,5 @@ +class ChangeCaseLogToLettingsLog < ActiveRecord::Migration[7.0] + def change + rename_table :case_logs, :lettings_logs + end +end diff --git a/db/schema.rb b/db/schema.rb index ebb6822aa..09a7ec557 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,39 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2022_08_10_152340) do +ActiveRecord::Schema[7.0].define(version: 2022_08_23_083657) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - create_table "case_logs", force: :cascade do |t| + create_table "data_protection_confirmations", force: :cascade do |t| + t.bigint "organisation_id" + t.bigint "data_protection_officer_id" + t.boolean "confirmed" + t.string "old_id" + t.string "old_org_id" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["data_protection_officer_id"], name: "dpo_user_id" + t.index ["organisation_id", "data_protection_officer_id", "confirmed"], name: "data_protection_confirmations_unique", unique: true + t.index ["organisation_id"], name: "index_data_protection_confirmations_on_organisation_id" + end + + create_table "la_rent_ranges", force: :cascade do |t| + t.integer "ranges_rent_id" + t.integer "lettype" + t.string "la" + t.integer "beds" + t.decimal "soft_min", precision: 10, scale: 2 + t.decimal "soft_max", precision: 10, scale: 2 + t.decimal "hard_min", precision: 10, scale: 2 + t.decimal "hard_max", precision: 10, scale: 2 + t.integer "start_year" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["start_year", "lettype", "beds", "la"], name: "index_la_rent_ranges_on_start_year_and_lettype_and_beds_and_la", unique: true + end + + create_table "lettings_logs", force: :cascade do |t| t.integer "status", default: 0 t.datetime "created_at", null: false t.datetime "updated_at", null: false @@ -390,9 +418,9 @@ ActiveRecord::Schema[7.0].define(version: 2022_08_10_152340) do t.index ["item_type", "item_id"], name: "index_versions_on_item_type_and_item_id" end - add_foreign_key "case_logs", "locations" - add_foreign_key "case_logs", "organisations", column: "owning_organisation_id", on_delete: :cascade - add_foreign_key "case_logs", "schemes" + add_foreign_key "lettings_logs", "locations" + add_foreign_key "lettings_logs", "organisations", column: "owning_organisation_id", on_delete: :cascade + add_foreign_key "lettings_logs", "schemes" add_foreign_key "locations", "schemes" add_foreign_key "schemes", "organisations", column: "managing_organisation_id" add_foreign_key "schemes", "organisations", column: "owning_organisation_id", on_delete: :cascade diff --git a/docs/adr/adr-003-form-submission-flow.md b/docs/adr/adr-003-form-submission-flow.md index 52cac8f58..a9263ee60 100644 --- a/docs/adr/adr-003-form-submission-flow.md +++ b/docs/adr/adr-003-form-submission-flow.md @@ -8,14 +8,14 @@ parent: Architecture decisions ## Impact on performance -Using Turbo Frames allows us to swap out just the question part of the page without needing full page refreshes as you go through the form and provides a "Single Page Application like" user experience. Each question still gets a unique URL that can be navigated to directly with the Case Log ID and the overall user experience is that form navigation feels faster. +Using Turbo Frames allows us to swap out just the question part of the page without needing full page refreshes as you go through the form and provides a "Single Page Application like" user experience. Each question still gets a unique URL that can be navigated to directly with the lettings log ID and the overall user experience is that form navigation feels faster. ## Impact on interrupted sessions -We currently have a single Active Record model for Case Logs that contains all the question fields. Every time a question is submitted the answer will be saved in the Active Record model instance before the next frame is rendered. This model will need to be able to handle partial records and partial validation anyway since not all API users will have all the required data. Validation can occur based on the data already saved and/or once the form is finally submitted. Front end validation will still happen additionally as you go through the form to help make sure users don’t get a long list of errors at the end. Using session data here and updating the model only once the form is completed would not seem to have any advantages over this approach. +We currently have a single Active Record model for lettings logs that contains all the question fields. Every time a question is submitted the answer will be saved in the Active Record model instance before the next frame is rendered. This model will need to be able to handle partial records and partial validation anyway since not all API users will have all the required data. Validation can occur based on the data already saved and/or once the form is finally submitted. Front end validation will still happen additionally as you go through the form to help make sure users don’t get a long list of errors at the end. Using session data here and updating the model only once the form is completed would not seem to have any advantages over this approach. This means that when a user navigates away from the form or closes the tab etc, they can use the URL to navigate directly back to where they left off, or follow the form flow through again, and in both cases their submitted answers will still be there. ## Impact on API -The API will still expect to take a JSON describing the case log, instantiate the model with the given fields, and run validations as if it had been submitted. +The API will still expect to take a JSON describing the lettings log, instantiate the model with the given fields, and run validations as if it had been submitted. diff --git a/docs/adr/adr-005-form-definition.md b/docs/adr/adr-005-form-definition.md index cab867a87..f009cbed9 100644 --- a/docs/adr/adr-005-form-definition.md +++ b/docs/adr/adr-005-form-definition.md @@ -65,5 +65,5 @@ Assumptions made by the format: - All sections have at least 1 subsection - All subsections have at least 1 page - All pages have at least 1 question -- The ActiveRecord case log model has a field for each question name (must match) +- The ActiveRecord lettings log model has a field for each question name (must match) - Text not required by a page/question such as a header or hint text should be passed as an empty string diff --git a/docs/adr/adr-007-data-validations.md b/docs/adr/adr-007-data-validations.md index 07541e02b..9c8cb0c78 100644 --- a/docs/adr/adr-007-data-validations.md +++ b/docs/adr/adr-007-data-validations.md @@ -15,7 +15,7 @@ These are handled slightly differently: These run for all submitted data. Every time a form page (in the UI) is submitted, the fields related to that form page will be checked to ensure that any responses given are valid. If they are not, an error message will be shown on screen, and it will not be possible to ‘Save and continue’ until the response is fixed or removed. -Similarly if an API request is made to create a case log with data that contains _invalid_ fields, that data will be rejected, and an error message will be returned. +Similarly if an API request is made to create a lettings log with data that contains _invalid_ fields, that data will be rejected, and an error message will be returned. ## Presence checks @@ -23,8 +23,8 @@ These are not strictly error checks since it’s possible to submit partial data Similarly the API client (3rd party software system) may not have all the required data and may only be submitting a partial log. This is still a valid use case so we should not be enforcing presence checks and returning errors based on them for either submission type. -Instead we determine the _status_ of the case log based the presence checks. Every time data is submitted (via a form page, bulk upload or API), before saving the data, the system will check whether all fields have been completed _and_ pass validity checks. If so, the case log will be marked as _completed_, if not it will be marked as _in progress_. +Instead we determine the _status_ of the lettings log based the presence checks. Every time data is submitted (via a form page, bulk upload or API), before saving the data, the system will check whether all fields have been completed _and_ pass validity checks. If so, the lettings log will be marked as _completed_, if not it will be marked as _in progress_. -By default all fields that a Case Log has will be assumed to be required unless explicitly marked as not required (for example as a result of other answers rendering a question inapplicable). +By default all fields that a lettings log has will be assumed to be required unless explicitly marked as not required (for example as a result of other answers rendering a question inapplicable). -On the form UI this will work by not allowing you to submit the form, until all presence checks have been satisfied, but all other navigation is allowed. On the API this will work by returning a Case Log that is ‘in progress’ if you’ve submitted a partial log, or ‘completed’ if you’ve submitted a full log, or ‘errors’ if you’ve submitted an invalid log. +On the form UI this will work by not allowing you to submit the form, until all presence checks have been satisfied, but all other navigation is allowed. On the API this will work by returning a lettings log that is ‘in progress’ if you’ve submitted a partial log, or ‘completed’ if you’ve submitted a full log, or ‘errors’ if you’ve submitted an invalid log. diff --git a/docs/adr/adr-011-form-oop-refactor.md b/docs/adr/adr-011-form-oop-refactor.md index bac320c11..00efd7fba 100644 --- a/docs/adr/adr-011-form-oop-refactor.md +++ b/docs/adr/adr-011-form-oop-refactor.md @@ -11,6 +11,6 @@ Refactoring this into smaller form domain object classes has several benefits: - It’s easier to compare the form definition JSON to the code classes and reason about what fields can be passed and what effect they’ll have - It moves business logic out of the helpers and keeps them to just dealing with display logic - It makes it easier to unit test form functionality, and group that into smaller chunks -- It allows for less passing of arguments. e.g. `page.routed_to?(case_log)` vs `form.was_page_routed_to?(page, case_log)` +- It allows for less passing of arguments. e.g. `page.routed_to?(lettings_log)` vs `form.was_page_routed_to?(page, lettings_log)` -This abstraction is likely still not the best (the form vs case log split) but this seems like an improvement that can be iterated on. +This abstraction is likely still not the best (the form vs lettings log split) but this seems like an improvement that can be iterated on. diff --git a/docs/api/v1.json b/docs/api/v1.json index 893abc0c3..06b0fcd4e 100644 --- a/docs/api/v1.json +++ b/docs/api/v1.json @@ -15,7 +15,7 @@ "/logs/:id": { "parameters": [], "get": { - "summary": "Get Case Log Info by Case Log ID", + "summary": "Get lettings log Info by lettings log ID", "tags": [], "responses": { "200": { @@ -23,7 +23,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Case-Log" + "$ref": "#/components/schemas/lettings-log" }, "examples": {} } @@ -40,7 +40,7 @@ "examples": { "Not found": { "value": { - "error": "Case Log 67 not found" + "error": "lettings log 67 not found" } } } @@ -48,8 +48,8 @@ } } }, - "operationId": "get-case_logs-case_logs-:id", - "description": "Retrieve data for a specific case log", + "operationId": "get-lettings_logs-lettings_logs-:id", + "description": "Retrieve data for a specific lettings log", "parameters": [ { "schema": { @@ -65,15 +65,15 @@ ] }, "patch": { - "summary": "Update Case Log Information", - "operationId": "patch-case_logs-case_logs-:id", + "summary": "Update lettings log Information", + "operationId": "patch-lettings_logs-lettings_logs-:id", "responses": { "200": { - "description": "Case Log Updated", + "description": "lettings log Updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Case-Log" + "$ref": "#/components/schemas/lettings-log" }, "examples": {} } @@ -90,7 +90,7 @@ "examples": { "Not found": { "value": { - "error": "Case Log 67 not found" + "error": "lettings log 67 not found" } } } @@ -120,17 +120,17 @@ } } }, - "description": "Update the information of an existing case log", + "description": "Update the information of an existing lettings log", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Case-Log" + "$ref": "#/components/schemas/lettings-log" }, "examples": {} } }, - "description": "Patch case log properties to update." + "description": "Patch lettings log properties to update." }, "parameters": [ { @@ -147,8 +147,8 @@ ] }, "delete": { - "summary": "Delete a Case Log by Case Log ID", - "operationId": "delete-case_logs-:id", + "summary": "Delete a lettings log by lettings log ID", + "operationId": "delete-lettings_logs-:id", "responses": { "204": { "description": "No Content" @@ -164,7 +164,7 @@ "examples": { "Not found": { "value": { - "error": "Case Log 67 not found" + "error": "lettings log 67 not found" } } } @@ -172,7 +172,7 @@ } } }, - "description": "Delete a case log", + "description": "Delete a lettings log", "parameters": [ { "schema": { @@ -190,15 +190,15 @@ }, "/logs": { "post": { - "summary": "Create New Case Log", - "operationId": "post-caselog", + "summary": "Create New lettings log", + "operationId": "post-LettingsLog", "responses": { "201": { - "description": "Case Log Created", + "description": "lettings log Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Case-Log" + "$ref": "#/components/schemas/lettings-log" }, "examples": {} } @@ -234,14 +234,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Case-Log" + "$ref": "#/components/schemas/lettings-log" }, "examples": {} } }, - "description": "Post the necessary fields for the API to create a new case log." + "description": "Post the necessary fields for the API to create a new lettings log." }, - "description": "Create a new case log.", + "description": "Create a new lettings log.", "parameters": [ { "schema": { @@ -262,12 +262,12 @@ }, "components": { "schemas": { - "Case-Log": { + "lettings-log": { "description": "", "type": "object", "x-examples": { "example-1": { - "case_log": { + "lettings_log": { "tenant_code": "T657", "age1": 35, "sex1": "F", @@ -415,7 +415,7 @@ } } }, - "title": "Case Log", + "title": "lettings log", "x-internal": false, "properties": { "tenant_code": { diff --git a/docs/exports.md b/docs/exports.md index cadad0962..7a31ece3c 100644 --- a/docs/exports.md +++ b/docs/exports.md @@ -6,7 +6,7 @@ nav_order: 7 All data collected by the application needs to be exported to the Consolidated Data Store (CDS) which is a data warehouse based on MS SQL running in the DAP (Data Analytics Platform). -This is done via XML exports saved in an S3 bucket located in the DAP VPC using dedicated credentials shared out of band. The data mapping for this export can be found in `app/services/exports/case_log_export_service.rb` +This is done via XML exports saved in an S3 bucket located in the DAP VPC using dedicated credentials shared out of band. The data mapping for this export can be found in `app/services/exports/lettings_log_export_service.rb` Initially the application database field names and field types were chosen to match the existing CDS data as closely as possible to minimise the amount of transformation needed. This has led to a less than optimal data model though and increasingly we should look to transform at the mapping layer where beneficial for our application. diff --git a/docs/form/builder.md b/docs/form/builder.md index 5d7ba5295..cd703b5f5 100644 --- a/docs/form/builder.md +++ b/docs/form/builder.md @@ -23,9 +23,9 @@ As a result it’s not modelled as part of the config but rather as code. It sti - Conditional questions (`conditional_for`) – Radio and checkbox questions can support conditional text or numeric questions that show/hide on the same page when the triggering option is selected -- Routing (`depends_on`) – all pages can specify conditions (attributes of the case log) that determine whether or not they’re shown to the user +- Routing (`depends_on`) – all pages can specify conditions (attributes of the lettings log) that determine whether or not they’re shown to the user - - Methods can be chained (i.e. you can have conditions in the form `{ owning_organisation.provider_type: "local_authority"`) which will call `case_log.owning_organisation.provider_type` and compare the result to the provided value. + - Methods can be chained (i.e. you can have conditions in the form `{ owning_organisation.provider_type: "local_authority"`) which will call `lettings_log.owning_organisation.provider_type` and compare the result to the provided value. - Numeric questions support math expression depends_on conditions such as `{ age2: ">16" }` @@ -108,7 +108,7 @@ Assumptions made by the format: - All pages have at least 1 question -- The ActiveRecord case log model has a field for each question name (must match). In the case of checkbox questions it must have one field for every answer option (again names must match). +- The ActiveRecord lettings log model has a field for each question name (must match). In the case of checkbox questions it must have one field for every answer option (again names must match). - Text not required by a page/question such as a header or hint text should be passed as an empty string diff --git a/docs/form/question.md b/docs/form/question.md index 01d598a4f..892952ff6 100644 --- a/docs/form/question.md +++ b/docs/form/question.md @@ -87,4 +87,4 @@ In the above example the width is an optional attribute and can be provided for The above example links to the first example as both of these questions would be on the same page. The `inferred_check_answers_value` is what should be displayed on the check answers page for this question if we infer it. If the value of `postcode_known` was given as `0` (which is a no), as seen in the condition part of `inferred_check_answers_value` then we can infer that the data inputter does not know the postcode and so we would display the value of `Not known` on the check answers page for the postcode. -In the above example the `inferred_answers` refers to a question where we can infer the answer based on the answer of this question. In this case the `la` question can be inferred from the postcode value given by the data inputter as we are able to lookup the local authority based on the postcode given. We then set a property on the case log `is_la_inferred` to true to indicate that this is an answer we've inferred. +In the above example the `inferred_answers` refers to a question where we can infer the answer based on the answer of this question. In this case the `la` question can be inferred from the postcode value given by the data inputter as we are able to lookup the local authority based on the postcode given. We then set a property on the lettings log `is_la_inferred` to true to indicate that this is an answer we've inferred. diff --git a/docs/form/runner.md b/docs/form/runner.md index 59da9d845..0ac63a289 100644 --- a/docs/form/runner.md +++ b/docs/form/runner.md @@ -23,7 +23,7 @@ ERB templates: Routes for each form page are generated by looping over each Page instance in each Form instance held by the form handler and defining a `GET` path. The corresponding controller method is also auto-generated with meta-programming via the same looping in `app/controllers/form_controller.rb` -All form pages submit to the same controller method (`app/controllers/form_controller.rb#submit_form`) which validates and persists the data, and then redirects to the next form page that identifies as `routed_to` given the current case log state. +All form pages submit to the same controller method (`app/controllers/form_controller.rb#submit_form`) which validates and persists the data, and then redirects to the next form page that identifies as `routed_to` given the current lettings log state. ## Form models and definition diff --git a/docs/form/section.md b/docs/form/section.md index 82ee7cffb..514842355 100644 --- a/docs/form/section.md +++ b/docs/form/section.md @@ -29,6 +29,6 @@ An example section might look something like this: In the above example the section id would be `tenancy_and_property` and its subsections would be `property_information` and `tenancy_information`. -The label contains the text that users will see for that section in the task list page of a case log. +The label contains the text that users will see for that section in the task list page of a lettings log. Sections can contain one or more [subsections](subsection). diff --git a/docs/form/subsection.md b/docs/form/subsection.md index 737a2fd08..aa81c0259 100644 --- a/docs/form/subsection.md +++ b/docs/form/subsection.md @@ -31,7 +31,7 @@ An example subsection might look something like this: In the above example the the subsection has the id `property_information`. The `depends_on` contains the set of conditions that must be met for the section to be accessible to a data provider, in this example subsection depends on the completion of the setup section/subsection (note that this is a common condition as the answers provided to questions in the setup subsection often have an impact on what questions are asked of the data provider in later subsections of the form). -The label contains the text that users will see for that subsection in the task list page of a case log. +The label contains the text that users will see for that subsection in the task list page of a lettings log. The pages of the subsection in the example would be `property_postcode` and `property_local_authority`. diff --git a/docs/index.md b/docs/index.md index b30bd3737..c8811ce76 100644 --- a/docs/index.md +++ b/docs/index.md @@ -46,13 +46,13 @@ This is a useful analogy as a parent can have multiple children, and a child can ### User permissions within organisations -The case logs that a user can see depends on their role: +The lettings logs that a user can see depends on their role: -- Customer support users can access any case log +- Customer support users can access any lettings log -- Data coordinators can access any case log for which the organisation they work for is ultimately responsible for, meaning they can see logs managed by a child organisation +- Data coordinators can access any lettings log for which the organisation they work for is ultimately responsible for, meaning they can see logs managed by a child organisation -- Data providers can only access case logs for which their organisation manages (or directly owns) +- Data providers can only access lettings logs for which their organisation manages (or directly owns) Taking the relationships from the above diagram, and looking at which logs each user can access: diff --git a/docs/infrastructure.md b/docs/infrastructure.md index 9c3d1c8d7..5246c701c 100644 --- a/docs/infrastructure.md +++ b/docs/infrastructure.md @@ -4,6 +4,49 @@ nav_order: 5 # Infrastructure +## Configuration + +On [GOV.UK PaaS](https://www.cloud.service.gov.uk/), service credentials are appended to the environment variable `VCAP_SERVICES` when services [are bound](https://docs.cloud.service.gov.uk/deploying_services/s3/#bind-an-aws-s3-bucket-to-your-app) to an application. +Such services include datastores and S3 buckets. + +Our application uses S3 and Redis clients and supports two different ways of parsing their configuration: +* Via the environment variable `VCAP_SERVICES` using the `PaasConfigurationService` class +* Via the environment variables `S3_CONFIG` and `REDIS_CONFIG` using the `EnvConfigurationService` class + +`S3_CONFIG` and `REDIS_CONFIG` are populated using a similar structure than `VCAP_SERVICES`: + +S3_CONFIG: +```json +[ + { + "instance_name": "bucket_1", + "credentials": { + "aws_access_key_id": "123", + "aws_secret_access_key": "456", + "aws_region": "eu-west-1", + "bucket_name": "my-bucket" + } + } +] +``` + +REDIS_CONFIG: +```json +[ + { + "instance_name": "redis_1", + "credentials": { + "uri": "redis_uri" + } + } +] +``` + +In order to switch from using [GOV.UK PaaS](https://www.cloud.service.gov.uk/) provided services to external ones, instances of `PaasConfigurationService` need to be replaced by `EnvConfigurationService`. +This assumes that `S3_CONFIG` or/and `REDIS_CONFIG` are available. + +Please check `full_import.rake` and `rack_attack.rb` for examples of how the configuration is used. + ## Deployment This application is running on [GOV.UK PaaS](https://www.cloud.service.gov.uk/). To deploy you need to: diff --git a/lib/tasks/data_export.rake b/lib/tasks/data_export.rake index fb7af1466..82433756c 100644 --- a/lib/tasks/data_export.rake +++ b/lib/tasks/data_export.rake @@ -5,12 +5,12 @@ namespace :core do full_update = args[:full_update].present? && args[:full_update] == "true" storage_service = Storage::S3Service.new(Configuration::PaasConfigurationService.new, ENV["EXPORT_PAAS_INSTANCE"]) - export_service = Exports::CaseLogExportService.new(storage_service) + export_service = Exports::LettingsLogExportService.new(storage_service) if format.present? && format == "CSV" - export_service.export_csv_case_logs + export_service.export_csv_lettings_logs else - export_service.export_xml_case_logs(full_update:) + export_service.export_xml_lettings_logs(full_update:) end end end diff --git a/lib/tasks/data_import.rake b/lib/tasks/data_import.rake index b8baac256..0b3881388 100644 --- a/lib/tasks/data_import.rake +++ b/lib/tasks/data_import.rake @@ -20,8 +20,8 @@ namespace :core do Imports::DataProtectionConfirmationImportService.new(storage_service).create_data_protection_confirmations(path) when "organisation-rent-periods" Imports::OrganisationRentPeriodImportService.new(storage_service).create_organisation_rent_periods(path) - when "case-logs" - Imports::CaseLogsImportService.new(storage_service).create_logs(path) + when "lettings-logs" + Imports::LettingsLogsImportService.new(storage_service).create_logs(path) else raise "Type #{type} is not supported by data_import" end diff --git a/lib/tasks/data_import_field.rake b/lib/tasks/data_import_field.rake index 523ed6146..ba389d317 100644 --- a/lib/tasks/data_import_field.rake +++ b/lib/tasks/data_import_field.rake @@ -10,7 +10,7 @@ namespace :core do # We only allow a reduced list of known fields to be updatable case field when "tenant_code", "major_repairs", "lettings_allocation" - Imports::CaseLogsFieldImportService.new(storage_service).update_field(field, path) + Imports::LettingsLogsFieldImportService.new(storage_service).update_field(field, path) else raise "Field #{field} cannot be updated by data_import_field" end diff --git a/lib/tasks/full_import.rake b/lib/tasks/full_import.rake index bc982b98e..e141b6520 100644 --- a/lib/tasks/full_import.rake +++ b/lib/tasks/full_import.rake @@ -17,7 +17,7 @@ namespace :core do Import.new(Imports::UserImportService, :create_users, "user"), Import.new(Imports::DataProtectionConfirmationImportService, :create_data_protection_confirmations, "dataprotect"), Import.new(Imports::OrganisationRentPeriodImportService, :create_organisation_rent_periods, "rent-period"), - Import.new(Imports::CaseLogsImportService, :create_logs, "logs"), + Import.new(Imports::LettingsLogsImportService, :create_logs, "logs"), ] import_list.each do |step| diff --git a/spec/components/check_answers_summary_list_card_component_spec.rb b/spec/components/check_answers_summary_list_card_component_spec.rb index 9ccfebe51..3c16a6254 100644 --- a/spec/components/check_answers_summary_list_card_component_spec.rb +++ b/spec/components/check_answers_summary_list_card_component_spec.rb @@ -3,23 +3,23 @@ require "rails_helper" RSpec.describe CheckAnswersSummaryListCardComponent, type: :component do context "when given a set of questions" do let(:user) { FactoryBot.build(:user) } - let(:case_log) { FactoryBot.build(:case_log, :completed, age2: 99) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :completed, age2: 99) } let(:subsection_id) { "household_characteristics" } - let(:subsection) { case_log.form.get_subsection(subsection_id) } - let(:questions) { subsection.applicable_questions(case_log) } + let(:subsection) { lettings_log.form.get_subsection(subsection_id) } + let(:questions) { subsection.applicable_questions(lettings_log) } it "renders a summary list card for the answers to those questions" do - result = render_inline(described_class.new(questions:, case_log:, user:)) - expect(result).to have_content(questions.first.answer_label(case_log)) + result = render_inline(described_class.new(questions:, lettings_log:, user:)) + expect(result).to have_content(questions.first.answer_label(lettings_log)) end it "applicable questions doesn't return questions that are hidden in check answers" do - summary_list = described_class.new(questions:, case_log:, user:) + summary_list = described_class.new(questions:, lettings_log:, user:) expect(summary_list.applicable_questions.map(&:id).include?("retirement_value_check")).to eq(false) end it "has the correct answer label for a question" do - summary_list = described_class.new(questions:, case_log:, user:) + summary_list = described_class.new(questions:, lettings_log:, user:) sex1_question = questions[2] expect(summary_list.get_answer_label(sex1_question)).to eq("Female") end diff --git a/spec/components/log_summary_component_spec.rb b/spec/components/log_summary_component_spec.rb index 61bfc5280..78d5a73ad 100644 --- a/spec/components/log_summary_component_spec.rb +++ b/spec/components/log_summary_component_spec.rb @@ -5,7 +5,7 @@ RSpec.describe LogSummaryComponent, type: :component do let(:coordinator_user) { FactoryBot.create(:user) } let(:propcode) { "P3647" } let(:tenancycode) { "T62863" } - let(:log) { FactoryBot.create(:case_log, needstype: 1, startdate: Time.utc(2022, 1, 1), tenancycode:, propcode:) } + let(:log) { FactoryBot.create(:lettings_log, needstype: 1, startdate: Time.utc(2022, 1, 1), tenancycode:, propcode:) } context "when rendering log for a support user" do it "show the log summary with organisational relationships" do diff --git a/spec/factories/case_log.rb b/spec/factories/lettings_log.rb similarity index 97% rename from spec/factories/case_log.rb rename to spec/factories/lettings_log.rb index 46c151fd2..ef519914d 100644 --- a/spec/factories/case_log.rb +++ b/spec/factories/lettings_log.rb @@ -1,5 +1,5 @@ FactoryBot.define do - factory :case_log do + factory :lettings_log do created_by { FactoryBot.create(:user) } owning_organisation { created_by.organisation } managing_organisation { created_by.organisation } @@ -87,6 +87,9 @@ FactoryBot.define do chr { 1 } cap { 0 } reasonother { nil } + housingneeds { 1 } + housingneeds_type { 0 } + housingneeds_other { 0 } housingneeds_a { 1 } housingneeds_b { 0 } housingneeds_c { 0 } diff --git a/spec/features/form/accessible_autocomplete_spec.rb b/spec/features/form/accessible_autocomplete_spec.rb index 929556f09..8e69b4bd1 100644 --- a/spec/features/form/accessible_autocomplete_spec.rb +++ b/spec/features/form/accessible_autocomplete_spec.rb @@ -4,9 +4,9 @@ require_relative "helpers" RSpec.describe "Accessible Automcomplete" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, previous_la_known: 1, prevloc: "E09000033", @@ -24,71 +24,71 @@ RSpec.describe "Accessible Automcomplete" do context "when using accessible autocomplete" do before do - visit("/logs/#{case_log.id}/accessible-select") + visit("/logs/#{lettings_log.id}/accessible-select") end it "allows type ahead filtering", js: true do - find("#case-log-prevloc-field").click.native.send_keys("T", "h", "a", "n", :down, :enter) - expect(find("#case-log-prevloc-field").value).to eq("Thanet") + find("#lettings-log-prevloc-field").click.native.send_keys("T", "h", "a", "n", :down, :enter) + expect(find("#lettings-log-prevloc-field").value).to eq("Thanet") end it "ignores punctuation", js: true do - find("#case-log-prevloc-field").click.native.send_keys("T", "h", "a", "'", "n", :down, :enter) - expect(find("#case-log-prevloc-field").value).to eq("Thanet") + find("#lettings-log-prevloc-field").click.native.send_keys("T", "h", "a", "'", "n", :down, :enter) + expect(find("#lettings-log-prevloc-field").value).to eq("Thanet") end it "ignores stop words", js: true do - find("#case-log-prevloc-field").click.native.send_keys("t", "h", "e", " ", "W", "e", "s", "t", "m", :down, :enter) - expect(find("#case-log-prevloc-field").value).to eq("Westminster") + find("#lettings-log-prevloc-field").click.native.send_keys("t", "h", "e", " ", "W", "e", "s", "t", "m", :down, :enter) + expect(find("#lettings-log-prevloc-field").value).to eq("Westminster") end it "does not perform an exact match", js: true do - find("#case-log-prevloc-field").click.native.send_keys("o", "n", "l", "y", " ", "t", "o", "w", "n", :down, :enter) - expect(find("#case-log-prevloc-field").value).to eq("The one and only york town") + find("#lettings-log-prevloc-field").click.native.send_keys("o", "n", "l", "y", " ", "t", "o", "w", "n", :down, :enter) + expect(find("#lettings-log-prevloc-field").value).to eq("The one and only york town") end it "maintains enhancement state across back navigation", js: true do - find("#case-log-prevloc-field").click.native.send_keys("T", "h", "a", "n", :down, :enter) + find("#lettings-log-prevloc-field").click.native.send_keys("T", "h", "a", "n", :down, :enter) click_button("Save and continue") click_link(text: "Back") expect(page).to have_selector("input", class: "autocomplete__input", count: 1) end it "has a disabled null option" do - expect(page).to have_select("case-log-prevloc-field", disabled_options: ["Select an option"]) + expect(page).to have_select("lettings-log-prevloc-field", disabled_options: ["Select an option"]) end end context "when searching schemes" do - let(:scheme) { FactoryBot.create(:scheme, owning_organisation_id: case_log.created_by.organisation_id, managing_organisation_id: case_log.created_by.organisation_id, primary_client_group: "Q", secondary_client_group: "P") } + let(:scheme) { FactoryBot.create(:scheme, owning_organisation_id: lettings_log.created_by.organisation_id, managing_organisation_id: lettings_log.created_by.organisation_id, primary_client_group: "Q", secondary_client_group: "P") } before do FactoryBot.create(:location, scheme:, postcode: "W6 0ST") FactoryBot.create(:location, scheme:, postcode: "SE6 1LB") - case_log.update!(needstype: 2) - visit("/logs/#{case_log.id}/scheme") + lettings_log.update!(needstype: 2) + visit("/logs/#{lettings_log.id}/scheme") end it "can match on synonyms", js: true do - find("#case-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) - expect(find("#case-log-scheme-id-field").value).to eq(scheme.service_name) + find("#lettings-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) + expect(find("#lettings-log-scheme-id-field").value).to eq(scheme.service_name) end it "displays appended text next to the options", js: true do - find("#case-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) + find("#lettings-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) expect(find(".autocomplete__option", visible: :hidden, text: scheme.service_name)).to be_present expect(find("span", visible: :hidden, text: "2 locations")).to be_present end it "displays hint text under the options", js: true do - find("#case-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) + find("#lettings-log-scheme-id-field").click.native.send_keys("w", "6", :down, :enter) expect(find(".autocomplete__option__hint", visible: :hidden, text: /Young people at risk, Young people leaving care/)).to be_present end end it "has the correct option selected if one has been saved" do - case_log.update!(postcode_known: 0, previous_la_known: 1, prevloc: "E07000178") - visit("/logs/#{case_log.id}/accessible-select") - expect(page).to have_select("case-log-prevloc-field", selected: %w[Oxford]) + lettings_log.update!(postcode_known: 0, previous_la_known: 1, prevloc: "E07000178") + visit("/logs/#{lettings_log.id}/accessible-select") + expect(page).to have_select("lettings-log-prevloc-field", selected: %w[Oxford]) end end diff --git a/spec/features/form/check_answers_page_spec.rb b/spec/features/form/check_answers_page_spec.rb index 3ba4e28ab..cff1b8d30 100644 --- a/spec/features/form/check_answers_page_spec.rb +++ b/spec/features/form/check_answers_page_spec.rb @@ -9,9 +9,9 @@ RSpec.describe "Form Check Answers Page" do let(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } let(:location) { FactoryBot.create(:location, scheme:, mobility_type: "N") } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -20,9 +20,9 @@ RSpec.describe "Form Check Answers Page" do location:, ) end - let(:empty_case_log) do + let(:empty_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, previous_la_known: 1, prevloc: "E09000033", is_previous_la_inferred: false, @@ -30,15 +30,15 @@ RSpec.describe "Form Check Answers Page" do managing_organisation: user.organisation, ) end - let(:completed_case_log) do + let(:completed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :completed, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } before do sign_in user @@ -66,10 +66,10 @@ RSpec.describe "Form Check Answers Page" do end it "displays answers given by the user for the question in the subsection" do - fill_in_number_question(empty_case_log.id, "age1", 28, "person-1-age") - choose("case-log-sex1-x-field") + fill_in_number_question(empty_lettings_log.id, "age1", 28, "person-1-age") + choose("lettings-log-sex1-x-field") click_button("Save and continue") - visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers") + visit("/logs/#{empty_lettings_log.id}/#{subsection}/check-answers") expect(page).to have_content("28") expect(page).to have_content("Non-binary") end @@ -77,31 +77,31 @@ RSpec.describe "Form Check Answers Page" do # Regex explanation: match the string "Answer" but not if it's follow by "the missing questions" # This way only the links in the table will get picked up it "has an answer link for questions missing an answer" do - visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers?referrer=check_answers") + visit("/logs/#{empty_lettings_log.id}/#{subsection}/check-answers?referrer=check_answers") assert_selector "a", text: /Answer (?!the missing questions)/, count: 5 assert_selector "a", text: "Change", count: 0 - expect(page).to have_link("Answer", href: "/logs/#{empty_case_log.id}/person-1-age?referrer=check_answers") + expect(page).to have_link("Answer", href: "/logs/#{empty_lettings_log.id}/person-1-age?referrer=check_answers") end it "has a change link for answered questions" do - fill_in_number_question(empty_case_log.id, "age1", 28, "person-1-age") - visit("/logs/#{empty_case_log.id}/#{subsection}/check-answers") + fill_in_number_question(empty_lettings_log.id, "age1", 28, "person-1-age") + visit("/logs/#{empty_lettings_log.id}/#{subsection}/check-answers") assert_selector "a", text: /Answer (?!the missing questions)/, count: 4 assert_selector "a", text: "Change", count: 1 - expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/person-1-age?referrer=check_answers") + expect(page).to have_link("Change", href: "/logs/#{empty_lettings_log.id}/person-1-age?referrer=check_answers") end it "updates the change/answer link when answers get updated" do - visit("/logs/#{empty_case_log.id}/household-needs/check-answers") + visit("/logs/#{empty_lettings_log.id}/household-needs/check-answers") assert_selector "a", text: /Answer (?!the missing questions)/, count: 3 assert_selector "a", text: "Change", count: 1 - visit("/logs/#{empty_case_log.id}/accessibility-requirements") - check("case-log-accessibility-requirements-housingneeds-c-field") + visit("/logs/#{empty_lettings_log.id}/accessibility-requirements") + check("lettings-log-accessibility-requirements-housingneeds-c-field") click_button("Save and continue") - visit("/logs/#{empty_case_log.id}/household-needs/check-answers") + visit("/logs/#{empty_lettings_log.id}/household-needs/check-answers") assert_selector "a", text: /Answer (?!the missing questions)/, count: 2 assert_selector "a", text: "Change", count: 2 - expect(page).to have_link("Change", href: "/logs/#{empty_case_log.id}/accessibility-requirements?referrer=check_answers") + expect(page).to have_link("Change", href: "/logs/#{empty_lettings_log.id}/accessibility-requirements?referrer=check_answers") end it "does not display conditional questions that were not visited" do @@ -119,7 +119,7 @@ RSpec.describe "Form Check Answers Page" do it "displays conditional question that were visited" do visit("/logs/#{id}/conditional-question") - choose("case-log-preg-occ-2-field", allow_label_click: true) + choose("lettings-log-preg-occ-2-field", allow_label_click: true) click_button("Save and continue") visit("/logs/#{id}/#{conditional_subsection}/check-answers") question_labels = ["Has the condition been met?", "Has the condition not been met?"] @@ -134,13 +134,13 @@ RSpec.describe "Form Check Answers Page" do end it "does not group questions into summary cards if the questions in the subsection don't have a check_answers_card_number attribute" do - visit("/logs/#{completed_case_log.id}/household-needs/check-answers") + visit("/logs/#{completed_lettings_log.id}/household-needs/check-answers") assert_selector ".x-govuk-summary-card__title", count: 0 end context "when the user is checking their answers for the household characteristics subsection" do it "they see a seperate summary card for each member of the household" do - visit("/logs/#{completed_case_log.id}/#{subsection}/check-answers") + visit("/logs/#{completed_lettings_log.id}/#{subsection}/check-answers") assert_selector ".x-govuk-summary-card__title", text: "Lead tenant", count: 1 assert_selector ".x-govuk-summary-card__title", text: "Person 2", count: 1 end @@ -152,14 +152,14 @@ RSpec.describe "Form Check Answers Page" do end it "displays inferred postcode with the location id" do - case_log.update!(location:) + lettings_log.update!(location:) visit("/logs/#{id}/setup/check-answers") expect(page).to have_content("Location") expect(page).to have_content(location.name) end it "displays inferred postcode with the location_admin_district" do - case_log.update!(location:) + lettings_log.update!(location:) visit("/logs/#{id}/setup/check-answers") expect(page).to have_content("Location") expect(page).to have_content(location.location_admin_district) @@ -168,22 +168,22 @@ RSpec.describe "Form Check Answers Page" do context "when the user changes their answer from check answer page" do it "routes back to check answers" do - visit("/logs/#{empty_case_log.id}/accessibility-requirements") - check("case-log-accessibility-requirements-housingneeds-c-field") + visit("/logs/#{empty_lettings_log.id}/accessibility-requirements") + check("lettings-log-accessibility-requirements-housingneeds-c-field") click_button("Save and continue") - visit("/logs/#{empty_case_log.id}/household-needs/check-answers") + visit("/logs/#{empty_lettings_log.id}/household-needs/check-answers") first("a", text: /Change/).click - uncheck("case-log-accessibility-requirements-housingneeds-c-field") - check("case-log-accessibility-requirements-housingneeds-b-field") + uncheck("lettings-log-accessibility-requirements-housingneeds-c-field") + check("lettings-log-accessibility-requirements-housingneeds-b-field") click_button("Save changes") - expect(page).to have_current_path("/logs/#{empty_case_log.id}/household-needs/check-answers") + expect(page).to have_current_path("/logs/#{empty_lettings_log.id}/household-needs/check-answers") end end context "when the user wants to bypass the tasklist page from check answers" do - let(:section_completed_case_log) do + let(:section_completed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -194,9 +194,9 @@ RSpec.describe "Form Check Answers Page" do ) end - let(:next_section_in_progress_case_log) do + let(:next_section_in_progress_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -209,9 +209,9 @@ RSpec.describe "Form Check Answers Page" do ) end - let(:skip_section_case_log) do + let(:skip_section_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -227,9 +227,9 @@ RSpec.describe "Form Check Answers Page" do ) end - let(:cycle_sections_case_log) do + let(:cycle_sections_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -247,27 +247,27 @@ RSpec.describe "Form Check Answers Page" do end it "they can click a button to move onto the first page of the next (not started) incomplete section" do - visit("/logs/#{section_completed_case_log.id}/household-characteristics/check-answers") + visit("/logs/#{section_completed_lettings_log.id}/household-characteristics/check-answers") click_link("Save and go to next incomplete section") - expect(page).to have_current_path("/logs/#{section_completed_case_log.id}/armed-forces") + expect(page).to have_current_path("/logs/#{section_completed_lettings_log.id}/armed-forces") end it "they can click a button to move onto the check answers page of the next (in progress) incomplete section" do - visit("/logs/#{next_section_in_progress_case_log.id}/household-characteristics/check-answers") + visit("/logs/#{next_section_in_progress_lettings_log.id}/household-characteristics/check-answers") click_link("Save and go to next incomplete section") - expect(page).to have_current_path("/logs/#{next_section_in_progress_case_log.id}/household-needs/check-answers") + expect(page).to have_current_path("/logs/#{next_section_in_progress_lettings_log.id}/household-needs/check-answers") end it "they can click a button to skip sections until the next incomplete section" do - visit("/logs/#{skip_section_case_log.id}/household-characteristics/check-answers") + visit("/logs/#{skip_section_lettings_log.id}/household-characteristics/check-answers") click_link("Save and go to next incomplete section") - expect(page).to have_current_path("/logs/#{skip_section_case_log.id}/property-information/check-answers") + expect(page).to have_current_path("/logs/#{skip_section_lettings_log.id}/property-information/check-answers") end it "they can click a button to cycle around to the next incomplete section" do - visit("/logs/#{cycle_sections_case_log.id}/declaration/check-answers") + visit("/logs/#{cycle_sections_lettings_log.id}/declaration/check-answers") click_link("Save and go to next incomplete section") - expect(page).to have_current_path("/logs/#{cycle_sections_case_log.id}/tenant-code-test") + expect(page).to have_current_path("/logs/#{cycle_sections_lettings_log.id}/tenant-code-test") end end end diff --git a/spec/features/form/checkboxes_spec.rb b/spec/features/form/checkboxes_spec.rb index cbf5e51c1..e9386e458 100644 --- a/spec/features/form/checkboxes_spec.rb +++ b/spec/features/form/checkboxes_spec.rb @@ -5,15 +5,15 @@ require_relative "../../request_helper" RSpec.describe "Checkboxes" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } before do RequestHelper.stub_http_requests @@ -23,42 +23,42 @@ RSpec.describe "Checkboxes" do context "when exclusive checkbox is selected", js: true do it "deselects all other checkboxes" do visit("/logs/#{id}/accessibility-requirements") - page.check("case-log-accessibility-requirements-housingneeds-a-field", allow_label_click: true) + page.check("lettings-log-accessibility-requirements-housingneeds-a-field", allow_label_click: true) click_button("Save and continue") - case_log.reload - expect(case_log["housingneeds_a"]).to eq(1) + lettings_log.reload + expect(lettings_log["housingneeds_a"]).to eq(1) visit("/logs/#{id}/accessibility-requirements") - page.check("case-log-accessibility-requirements-housingneeds-h-field", allow_label_click: true) + page.check("lettings-log-accessibility-requirements-housingneeds-h-field", allow_label_click: true) click_button("Save and continue") - case_log.reload - expect(case_log["housingneeds_a"]).to eq(0) - expect(case_log["housingneeds_h"]).to eq(1) + lettings_log.reload + expect(lettings_log["housingneeds_a"]).to eq(0) + expect(lettings_log["housingneeds_h"]).to eq(1) end end context "when a checkbox question is submitted with invalid answers" do before do - allow(case_log).to receive(:update).and_return(false) + lettings_log.update!(illness: 100) + allow(lettings_log).to receive(:update).and_return(false) end it "shows an error summary" do - visit("/logs/#{id}/accessibility-requirements") - page.check("case-log-accessibility-requirements-housingneeds-a-field") - page.check("case-log-accessibility-requirements-housingneeds-c-field") + visit("/logs/#{id}/condition-effects") + page.check("lettings-log-condition-effects-illness-type-1-field") + page.check("lettings-log-condition-effects-illness-type-2-field") click_button("Save and continue") expect(page).to have_title("Error") end it "persists the original selections" do - visit("/logs/#{id}/accessibility-requirements") - page.check("case-log-accessibility-requirements-housingneeds-a-field") - page.check("case-log-accessibility-requirements-housingneeds-c-field") + visit("/logs/#{id}/condition-effects") + page.check("lettings-log-condition-effects-illness-type-1-field") + page.check("lettings-log-condition-effects-illness-type-2-field") click_button("Save and continue") - expect(page).to have_checked_field("case-log-accessibility-requirements-housingneeds-a-field") - expect(page).to have_checked_field("case-log-accessibility-requirements-housingneeds-c-field") + expect(page).to have_checked_field("lettings-log-condition-effects-illness-type-2-field") end end end diff --git a/spec/features/form/conditional_questions_spec.rb b/spec/features/form/conditional_questions_spec.rb index f8b5aafed..0643bf12c 100644 --- a/spec/features/form/conditional_questions_spec.rb +++ b/spec/features/form/conditional_questions_spec.rb @@ -4,15 +4,15 @@ require_relative "helpers" RSpec.describe "Form Conditional Questions" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } before do sign_in user @@ -27,20 +27,20 @@ RSpec.describe "Form Conditional Questions" do it "shows conditional questions if the required answer is selected and hides it again when a different answer option is selected", js: true do visit("/logs/#{id}/armed-forces") # Something about our styling makes the selenium webdriver think the actual radio buttons are not visible so we allow label click here - choose("case-log-armedforces-1-field", allow_label_click: true) - fill_in("case-log-leftreg-field", with: "text") - choose("case-log-armedforces-4-field", allow_label_click: true) - expect(page).not_to have_field("case-log-leftreg-field") - choose("case-log-armedforces-1-field", allow_label_click: true) - expect(page).to have_field("case-log-leftreg-field", with: "") + choose("lettings-log-armedforces-1-field", allow_label_click: true) + fill_in("lettings-log-leftreg-field", with: "text") + choose("lettings-log-armedforces-4-field", allow_label_click: true) + expect(page).not_to have_field("lettings-log-leftreg-field") + choose("lettings-log-armedforces-1-field", allow_label_click: true) + expect(page).to have_field("lettings-log-leftreg-field", with: "") end end context "when a conditional question has a saved answer", js: true do it "is displayed correctly" do - case_log.update!(postcode_known: 1, postcode_full: "NW1 6RT") + lettings_log.update!(postcode_known: 1, postcode_full: "NW1 6RT") visit("/logs/#{id}/property-postcode") - expect(page).to have_field("case-log-postcode-full-field", with: "NW1 6RT") + expect(page).to have_field("lettings-log-postcode-full-field", with: "NW1 6RT") end end end diff --git a/spec/features/form/form_navigation_spec.rb b/spec/features/form/form_navigation_spec.rb index d0ca551b4..abc4e4fdf 100644 --- a/spec/features/form/form_navigation_spec.rb +++ b/spec/features/form/form_navigation_spec.rb @@ -4,25 +4,25 @@ require_relative "helpers" RSpec.describe "Form Navigation" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, ) end - let(:empty_case_log) do + let(:empty_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, ) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } let(:question_answers) do { tenancycode: { type: "text", answer: "BZ737", path: "tenant-code-test" }, @@ -41,7 +41,7 @@ RSpec.describe "Form Navigation" do it "redirects to the task list for the new log" do visit("/logs") click_button("Create a new lettings log") - id = CaseLog.order(created_at: :desc).first.id + id = LettingsLog.order(created_at: :desc).first.id expect(page).to have_content("Log #{id}") end end @@ -49,7 +49,7 @@ RSpec.describe "Form Navigation" do describe "Viewing a log" do it "questions can be accessed by url" do visit("/logs/#{id}/person-1-age") - expect(page).to have_field("case-log-age1-field") + expect(page).to have_field("lettings-log-age1-field") end it "a question page leads to the next question defined in the form definition" do @@ -62,15 +62,15 @@ RSpec.describe "Form Navigation" do end it "a question page has a Skip for now link that lets you move on to the next question without inputting anything" do - visit("logs/#{empty_case_log.id}/tenant-code-test") + visit("logs/#{empty_lettings_log.id}/tenant-code-test") click_link(text: "Skip for now") - expect(page).to have_current_path("/logs/#{empty_case_log.id}/person-1-age") + expect(page).to have_current_path("/logs/#{empty_lettings_log.id}/person-1-age") end it "routes to check answers when skipping on the last page in the form" do - visit("logs/#{empty_case_log.id}/propcode") + visit("logs/#{empty_lettings_log.id}/propcode") click_link(text: "Skip for now") - expect(page).to have_current_path("/logs/#{empty_case_log.id}/household-characteristics/check-answers") + expect(page).to have_current_path("/logs/#{empty_lettings_log.id}/household-characteristics/check-answers") end describe "Back link directs correctly", js: true do @@ -86,14 +86,14 @@ RSpec.describe "Form Navigation" do click_button("Save and continue") visit("/logs/#{id}/person-1-age") click_link(text: "Back") - expect(page).to have_field("case-log-tenancycode-field") + expect(page).to have_field("lettings-log-tenancycode-field") end it "doesn't get stuck in infinite loops", js: true do visit("/logs") visit("/logs/#{id}/net-income") - fill_in("case-log-earnings-field", with: 740) - choose("case-log-incfreq-1-field", allow_label_click: true) + fill_in("lettings-log-earnings-field", with: 740) + choose("lettings-log-incfreq-1-field", allow_label_click: true) click_button("Save and continue") click_link(text: "Back") click_link(text: "Back") @@ -119,13 +119,13 @@ RSpec.describe "Form Navigation" do end context "when clicking save and continue on a mandatory question with no input" do - let(:id) { empty_case_log.id } + let(:id) { empty_lettings_log.id } it "shows a validation error on radio questions" do visit("/logs/#{id}/renewal") click_button("Save and continue") expect(page).to have_selector("#error-summary-title") - expect(page).to have_selector("#case-log-renewal-error") + expect(page).to have_selector("#lettings-log-renewal-error") expect(page).to have_title("Error") end @@ -133,7 +133,7 @@ RSpec.describe "Form Navigation" do visit("/logs/#{id}/tenancy-start-date") click_button("Save and continue") expect(page).to have_selector("#error-summary-title") - expect(page).to have_selector("#case-log-startdate-error") + expect(page).to have_selector("#lettings-log-startdate-error") expect(page).to have_title("Error") end @@ -141,10 +141,10 @@ RSpec.describe "Form Navigation" do context "when the conditional question is required but not answered" do it "shows a validation error for the conditional question" do visit("/logs/#{id}/armed-forces") - choose("case-log-armedforces-1-field", allow_label_click: true) + choose("lettings-log-armedforces-1-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_selector("#error-summary-title") - expect(page).to have_selector("#case-log-leftreg-error") + expect(page).to have_selector("#lettings-log-leftreg-error") expect(page).to have_title("Error") end end @@ -152,7 +152,7 @@ RSpec.describe "Form Navigation" do end context "when clicking save and continue on an optional question with no input" do - let(:id) { empty_case_log.id } + let(:id) { empty_lettings_log.id } it "does not show a validation error" do visit("/logs/#{id}/tenant-code") diff --git a/spec/features/form/helpers.rb b/spec/features/form/helpers.rb index 546404af9..44d8c62ad 100644 --- a/spec/features/form/helpers.rb +++ b/spec/features/form/helpers.rb @@ -1,18 +1,18 @@ module Helpers - def fill_in_number_question(case_log_id, question, value, path) - visit("/logs/#{case_log_id}/#{path}") - fill_in("case-log-#{question.to_s.dasherize}-field", with: value) + def fill_in_number_question(lettings_log_id, question, value, path) + visit("/logs/#{lettings_log_id}/#{path}") + fill_in("lettings-log-#{question.to_s.dasherize}-field", with: value) click_button("Save and continue") end - def answer_all_questions_in_income_subsection(case_log) - visit("/logs/#{case_log.id}/net-income") - fill_in("case-log-earnings-field", with: 18_000) - choose("case-log-incfreq-2-field") + def answer_all_questions_in_income_subsection(lettings_log) + visit("/logs/#{lettings_log.id}/net-income") + fill_in("lettings-log-earnings-field", with: 18_000) + choose("lettings-log-incfreq-2-field") click_button("Save and continue") - choose("case-log-benefits-0-field") + choose("lettings-log-benefits-0-field") click_button("Save and continue") - choose("case-log-hb-1-field") + choose("lettings-log-hb-1-field") click_button("Save and continue") end diff --git a/spec/features/form/page_routing_spec.rb b/spec/features/form/page_routing_spec.rb index f3e6b39a5..a568e3316 100644 --- a/spec/features/form/page_routing_spec.rb +++ b/spec/features/form/page_routing_spec.rb @@ -4,16 +4,16 @@ require_relative "helpers" RSpec.describe "Form Page Routing" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:id) { case_log.id } - let(:validator) { case_log._validators[nil].first } + let(:id) { lettings_log.id } + let(:validator) { lettings_log._validators[nil].first } before do allow(validator).to receive(:validate_pregnancy).and_return(true) @@ -24,26 +24,26 @@ RSpec.describe "Form Page Routing" do visit("/logs/#{id}/conditional-question") # using a question name that is already in the db to avoid # having to add a new column to the db for this test - choose("case-log-preg-occ-1-field", allow_label_click: true) + choose("lettings-log-preg-occ-1-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/conditional-question-yes-page") click_link(text: "Back") expect(page).to have_current_path("/logs/#{id}/conditional-question") - choose("case-log-preg-occ-2-field", allow_label_click: true) + choose("lettings-log-preg-occ-2-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/conditional-question-no-page") end it "can route based on multiple conditions", js: true do visit("/logs/#{id}/person-1-gender") - choose("case-log-sex1-f-field", allow_label_click: true) + choose("lettings-log-sex1-f-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/person-1-working-situation") visit("/logs/#{id}/conditional-question") - choose("case-log-preg-occ-2-field", allow_label_click: true) + choose("lettings-log-preg-occ-2-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/conditional-question-no-page") - choose("case-log-cbl-0-field", allow_label_click: true) + choose("lettings-log-cbl-0-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/conditional-question/check-answers") end @@ -51,7 +51,7 @@ RSpec.describe "Form Page Routing" do context "when the answers are inferred", js: true do it "shows question if the answer could not be inferred" do visit("/logs/#{id}/property-postcode") - fill_in("case-log-postcode-full-field", with: "PO5 3TE") + fill_in("lettings-log-postcode-full-field", with: "PO5 3TE") click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/do-you-know-the-local-authority") end @@ -67,7 +67,7 @@ RSpec.describe "Form Page Routing" do .to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\", \"codes\":{\"admin_district\": \"E08000003\"}}}", headers: {}) visit("/logs/#{id}/property-postcode") - fill_in("case-log-postcode-full-field", with: "P0 5ST") + fill_in("lettings-log-postcode-full-field", with: "P0 5ST") click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/property-wheelchair-accessible") end @@ -76,47 +76,47 @@ RSpec.describe "Form Page Routing" do context "when answer is invalid" do it "shows error with invalid value in the field" do visit("/logs/#{id}/property-postcode") - fill_in("case-log-postcode-full-field", with: "fake_postcode") + fill_in("lettings-log-postcode-full-field", with: "fake_postcode") click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/property-postcode") - expect(find("#case-log-postcode-full-field-error").value).to eq("fake_postcode") + expect(find("#lettings-log-postcode-full-field-error").value).to eq("fake_postcode") end it "does not reset the displayed date" do - case_log.update!(startdate: "2021/10/13") + lettings_log.update!(startdate: "2021/10/13") visit("/logs/#{id}/tenancy-start-date") - fill_in("case_log[startdate(1i)]", with: "202") - fill_in("case_log[startdate(2i)]", with: "32") - fill_in("case_log[startdate(3i)]", with: "0") + fill_in("lettings_log[startdate(1i)]", with: "202") + fill_in("lettings_log[startdate(2i)]", with: "32") + fill_in("lettings_log[startdate(3i)]", with: "0") click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/tenancy-start-date") - expect(find_field("case_log[startdate(3i)]").value).to eq("13") - expect(find_field("case_log[startdate(2i)]").value).to eq("10") - expect(find_field("case_log[startdate(1i)]").value).to eq("2021") + expect(find_field("lettings_log[startdate(3i)]").value).to eq("13") + expect(find_field("lettings_log[startdate(2i)]").value).to eq("10") + expect(find_field("lettings_log[startdate(1i)]").value).to eq("2021") end it "does not reset the displayed date if it's empty" do - case_log.update!(startdate: nil) + lettings_log.update!(startdate: nil) visit("/logs/#{id}/tenancy-start-date") - fill_in("case_log[startdate(1i)]", with: "202") - fill_in("case_log[startdate(2i)]", with: "32") - fill_in("case_log[startdate(3i)]", with: "0") + fill_in("lettings_log[startdate(1i)]", with: "202") + fill_in("lettings_log[startdate(2i)]", with: "32") + fill_in("lettings_log[startdate(3i)]", with: "0") click_button("Save and continue") expect(page).to have_current_path("/logs/#{id}/tenancy-start-date") - expect(find_field("case_log[startdate(3i)]").value).to eq(nil) - expect(find_field("case_log[startdate(2i)]").value).to eq(nil) - expect(find_field("case_log[startdate(1i)]").value).to eq(nil) + expect(find_field("lettings_log[startdate(3i)]").value).to eq(nil) + expect(find_field("lettings_log[startdate(2i)]").value).to eq(nil) + expect(find_field("lettings_log[startdate(1i)]").value).to eq(nil) end end context "when completing the setup section" do context "with a supported housing log" do - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: user.organisation, managing_organisation: user.organisation, needstype: 2, @@ -129,17 +129,17 @@ RSpec.describe "Form Page Routing" do before do FactoryBot.create(:location, scheme:, startdate: Time.zone.today + 20.days) - visit("/logs/#{case_log.id}/scheme") - select(scheme.service_name, from: "case_log[scheme_id]") + visit("/logs/#{lettings_log.id}/scheme") + select(scheme.service_name, from: "lettings_log[scheme_id]") click_button("Save and continue") end it "does not route to the scheme location question" do - expect(page).to have_current_path("/logs/#{case_log.id}/renewal") + expect(page).to have_current_path("/logs/#{lettings_log.id}/renewal") end it "infers the scheme location" do - expect(case_log.reload.location_id).to eq(active_location.id) + expect(lettings_log.reload.location_id).to eq(active_location.id) end end end diff --git a/spec/features/form/progressive_total_field_spec.rb b/spec/features/form/progressive_total_field_spec.rb index 2ddd7dffd..5be6ef1c2 100644 --- a/spec/features/form/progressive_total_field_spec.rb +++ b/spec/features/form/progressive_total_field_spec.rb @@ -4,9 +4,9 @@ require_relative "helpers" RSpec.describe "Accessible Automcomplete" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -18,35 +18,35 @@ RSpec.describe "Accessible Automcomplete" do end it "does not show when js is not enabled" do - visit("/logs/#{case_log.id}/rent") + visit("/logs/#{lettings_log.id}/rent") expect(page).to have_selector("#tcharge_div", visible: :all) end it "does show when js is enabled and calculates the total", js: true do - visit("/logs/#{case_log.id}/rent") + visit("/logs/#{lettings_log.id}/rent") expect(page).to have_selector("#tcharge_div") - fill_in("case-log-brent-field", with: 5) - expect(find("#case-log-tcharge-field").value).to eq("5.00") - fill_in("case-log-pscharge-field", with: 3) - expect(find("#case-log-tcharge-field").value).to eq("8.00") + fill_in("lettings-log-brent-field", with: 5) + expect(find("#lettings-log-tcharge-field").value).to eq("5.00") + fill_in("lettings-log-pscharge-field", with: 3) + expect(find("#lettings-log-tcharge-field").value).to eq("8.00") end it "total displays despite error message", js: true do - visit("/logs/#{case_log.id}/rent") - choose("case-log-period-1-field", allow_label_click: true) - fill_in("case-log-brent-field", with: 500) - fill_in("case-log-scharge-field", with: 50) - fill_in("case-log-pscharge-field", with: 50) - fill_in("case-log-supcharg-field", with: 5000) - expect(find("#case-log-tcharge-field").value).to eq("5600.00") + visit("/logs/#{lettings_log.id}/rent") + choose("lettings-log-period-1-field", allow_label_click: true) + fill_in("lettings-log-brent-field", with: 500) + fill_in("lettings-log-scharge-field", with: 50) + fill_in("lettings-log-pscharge-field", with: 50) + fill_in("lettings-log-supcharg-field", with: 5000) + expect(find("#lettings-log-tcharge-field").value).to eq("5600.00") click_button("Save and continue") expect(page).to have_selector(".govuk-error-summary") - fill_in("case-log-scharge-field", with: nil) - fill_in("case-log-pscharge-field", with: nil) - fill_in("case-log-supcharg-field-error", with: nil) - fill_in("case-log-brent-field", with: 500) - expect(find("#case-log-tcharge-field").value).to eq("500.00") - fill_in("case-log-supcharg-field-error", with: 50) - expect(find("#case-log-tcharge-field").value).to eq("550.00") + fill_in("lettings-log-scharge-field", with: nil) + fill_in("lettings-log-pscharge-field", with: nil) + fill_in("lettings-log-supcharg-field-error", with: nil) + fill_in("lettings-log-brent-field", with: 500) + expect(find("#lettings-log-tcharge-field").value).to eq("500.00") + fill_in("lettings-log-supcharg-field-error", with: 50) + expect(find("#lettings-log-tcharge-field").value).to eq("550.00") end end diff --git a/spec/features/form/saving_data_spec.rb b/spec/features/form/saving_data_spec.rb index 425c0dca3..ca08ee1fd 100644 --- a/spec/features/form/saving_data_spec.rb +++ b/spec/features/form/saving_data_spec.rb @@ -4,18 +4,18 @@ require_relative "helpers" RSpec.describe "Form Saving Data" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:id) { case_log.id } - let(:case_log_with_checkbox_questions_answered) do + let(:id) { lettings_log.id } + let(:lettings_log_with_checkbox_questions_answered) do FactoryBot.create( - :case_log, :in_progress, + :lettings_log, :in_progress, housingneeds_a: 1, owning_organisation: user.organisation, managing_organisation: user.organisation @@ -38,18 +38,18 @@ RSpec.describe "Form Saving Data" do type = hsh[:type] answer = hsh[:answer].respond_to?(:keys) ? hsh[:answer].keys.first : hsh[:answer] path = hsh[:path] - original_value = case_log.send(question) + original_value = lettings_log.send(question) visit("/logs/#{id}/#{path.to_s.dasherize}") case type when "text" - fill_in("case-log-#{question.to_s.dasherize}-field", with: answer) + fill_in("lettings-log-#{question.to_s.dasherize}-field", with: answer) when "radio" - choose("case-log-#{question.to_s.dasherize}-#{hsh[:answer].keys.first.downcase}-field") + choose("lettings-log-#{question.to_s.dasherize}-#{hsh[:answer].keys.first.downcase}-field") else - fill_in("case-log-#{question.to_s.dasherize}-field", with: answer) + fill_in("lettings-log-#{question.to_s.dasherize}-field", with: answer) end expect { click_button("Save and continue") }.to change { - case_log.reload.send(question.to_s) + lettings_log.reload.send(question.to_s) }.from(original_value).to(answer) end end @@ -57,37 +57,37 @@ RSpec.describe "Form Saving Data" do it "updates total value of the rent", js: true do visit("/logs/#{id}/rent") - fill_in("case-log-brent-field", with: 3.02) - expect(page.find("#case-log-tcharge-field")).to have_content("3.02") + fill_in("lettings-log-brent-field", with: 3.02) + expect(page.find("#lettings-log-tcharge-field")).to have_content("3.02") - fill_in("case-log-scharge-field", with: 2.8) - expect(page.find("#case-log-tcharge-field")).to have_content("5.82") + fill_in("lettings-log-scharge-field", with: 2.8) + expect(page.find("#lettings-log-tcharge-field")).to have_content("5.82") - fill_in("case-log-pscharge-field", with: 1) - expect(page.find("#case-log-tcharge-field")).to have_content("6.82") + fill_in("lettings-log-pscharge-field", with: 1) + expect(page.find("#lettings-log-tcharge-field")).to have_content("6.82") - fill_in("case-log-supcharg-field", with: 4.11) - expect(page.find("#case-log-tcharge-field")).to have_content("10.93") + fill_in("lettings-log-supcharg-field", with: 4.11) + expect(page.find("#lettings-log-tcharge-field")).to have_content("10.93") end it "displays number answers in inputs if they are already saved" do visit("/logs/#{id}/property-postcode") - expect(page).to have_field("case-log-postcode-full-field", with: case_log.postcode_full) + expect(page).to have_field("lettings-log-postcode-full-field", with: lettings_log.postcode_full) end it "displays text answers in inputs if they are already saved" do visit("/logs/#{id}/person-1-age") - expect(page).to have_field("case-log-age1-field", with: "17") + expect(page).to have_field("lettings-log-age1-field", with: "17") end it "displays checkbox answers in inputs if they are already saved" do - visit("/logs/#{case_log_with_checkbox_questions_answered.id.to_s.dasherize}/accessibility-requirements") + visit("/logs/#{lettings_log_with_checkbox_questions_answered.id.to_s.dasherize}/accessibility-requirements") expect(page).to have_checked_field( - "case-log-accessibility-requirements-housingneeds-a-field", + "lettings-log-accessibility-requirements-housingneeds-a-field", visible: :all, ) expect(page).to have_unchecked_field( - "case-log-accessibility-requirements-housingneeds-b-field", + "lettings-log-accessibility-requirements-housingneeds-b-field", visible: :all, ) end diff --git a/spec/features/form/tasklist_page_spec.rb b/spec/features/form/tasklist_page_spec.rb index 25f2824ac..a82276c60 100644 --- a/spec/features/form/tasklist_page_spec.rb +++ b/spec/features/form/tasklist_page_spec.rb @@ -4,27 +4,27 @@ require_relative "helpers" RSpec.describe "Task List" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, ) end - let(:completed_case_log) do + let(:completed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :completed, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, ) end - let(:empty_case_log) do + let(:empty_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: user.organisation, managing_organisation: user.organisation, created_by: user, @@ -32,7 +32,7 @@ RSpec.describe "Task List" do end let(:setup_completed_log) do FactoryBot.create( - :case_log, + :lettings_log, :about_completed, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -40,15 +40,15 @@ RSpec.describe "Task List" do created_by: user, ) end - let(:id) { case_log.id } - let(:status) { case_log.status } + let(:id) { lettings_log.id } + let(:status) { lettings_log.status } before do sign_in user end it "shows if the section has not been started" do - visit("/logs/#{empty_case_log.id}") + visit("/logs/#{empty_lettings_log.id}") expect(page).to have_content("This log has not been started.") end @@ -63,10 +63,10 @@ RSpec.describe "Task List" do 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/#{completed_case_log.id}") + it "has a review section which has a button that allows the data inputter to review the lettings log" do + visit("/logs/#{completed_lettings_log.id}") expect(page).to have_content("review and make changes to this log") click_link(text: "review and make changes to this log") - expect(page).to have_current_path("/logs/#{completed_case_log.id}/review") + expect(page).to have_current_path("/logs/#{completed_lettings_log.id}/review") end end diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index ad889e241..d944f5161 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -8,24 +8,24 @@ RSpec.describe "validations" do include Helpers let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end - let(:empty_case_log) do + let(:empty_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: user.organisation, managing_organisation: user.organisation, ) end let(:completed_without_declaration) do FactoryBot.create( - :case_log, + :lettings_log, :completed, owning_organisation: user.organisation, managing_organisation: user.organisation, @@ -33,36 +33,36 @@ RSpec.describe "validations" do declaration: nil, ) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } describe "Question validation" do context "when the tenant age is invalid" do it "shows validation for under 0" do visit("/logs/#{id}/person-1-age") - fill_in_number_question(empty_case_log.id, "age1", -5, "person-1-age") + fill_in_number_question(empty_lettings_log.id, "age1", -5, "person-1-age") expect(page).to have_selector("#error-summary-title") - expect(page).to have_selector("#case-log-age1-error") - expect(page).to have_selector("#case-log-age1-field-error") + expect(page).to have_selector("#lettings-log-age1-error") + expect(page).to have_selector("#lettings-log-age1-field-error") expect(page).to have_title("Error") end it "shows validation for over 120" do visit("/logs/#{id}/person-1-age") - fill_in_number_question(empty_case_log.id, "age1", 121, "person-1-age") + fill_in_number_question(empty_lettings_log.id, "age1", 121, "person-1-age") expect(page).to have_selector("#error-summary-title") - expect(page).to have_selector("#case-log-age1-error") - expect(page).to have_selector("#case-log-age1-field-error") + expect(page).to have_selector("#lettings-log-age1-error") + expect(page).to have_selector("#lettings-log-age1-field-error") expect(page).to have_title("Error") end end end describe "date validation", js: true do - def fill_in_date(case_log_id, question, day, month, year, path) - visit("/logs/#{case_log_id}/#{path}") - fill_in("case_log[#{question}(1i)]", with: year) - fill_in("case_log[#{question}(2i)]", with: month) - fill_in("case_log[#{question}(3i)]", with: day) + def fill_in_date(lettings_log_id, question, day, month, year, path) + visit("/logs/#{lettings_log_id}/#{path}") + fill_in("lettings_log[#{question}(1i)]", with: year) + fill_in("lettings_log[#{question}(2i)]", with: month) + fill_in("lettings_log[#{question}(3i)]", with: day) end it "does not allow out of range dates to be submitted" do @@ -112,9 +112,9 @@ RSpec.describe "validations" do describe "Soft Validation" do context "when a weekly net income is above the expected amount for the given economic status but below the hard max" do - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, ecstat1: 1, owning_organisation: user.organisation, @@ -125,27 +125,27 @@ RSpec.describe "validations" do let(:income_under_soft_limit) { 700 } it "prompts the user to confirm the value is correct with an interruption screen" do - visit("/logs/#{case_log.id}/net-income") - fill_in("case-log-earnings-field", with: income_over_soft_limit) - choose("case-log-incfreq-1-field", allow_label_click: true) + visit("/logs/#{lettings_log.id}/net-income") + fill_in("lettings-log-earnings-field", with: income_over_soft_limit) + choose("lettings-log-incfreq-1-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/logs/#{case_log.id}/net-income-value-check") + expect(page).to have_current_path("/logs/#{lettings_log.id}/net-income-value-check") expect(page).to have_content("Net income is outside the expected range based on the lead tenant’s working situation") expect(page).to have_content("You told us the lead tenant’s working situation is: full-time – 30 hours or more") expect(page).to have_content("The household income you have entered is £750.00 every week") - choose("case-log-net-income-value-check-0-field", allow_label_click: true) + choose("lettings-log-net-income-value-check-0-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/logs/#{case_log.id}/net-income-uc-proportion") + expect(page).to have_current_path("/logs/#{lettings_log.id}/net-income-uc-proportion") end it "returns the user to the previous question if they do not confirm the value as correct on the interruption screen" do - visit("/logs/#{case_log.id}/net-income") - fill_in("case-log-earnings-field", with: income_over_soft_limit) - choose("case-log-incfreq-1-field", allow_label_click: true) + visit("/logs/#{lettings_log.id}/net-income") + fill_in("lettings-log-earnings-field", with: income_over_soft_limit) + choose("lettings-log-incfreq-1-field", allow_label_click: true) click_button("Save and continue") - choose("case-log-net-income-value-check-1-field", allow_label_click: true) + choose("lettings-log-net-income-value-check-1-field", allow_label_click: true) click_button("Save and continue") - expect(page).to have_current_path("/logs/#{case_log.id}/net-income") + expect(page).to have_current_path("/logs/#{lettings_log.id}/net-income") end end end diff --git a/spec/features/log_spec.rb b/spec/features/log_spec.rb index 69623aff8..cef344145 100644 --- a/spec/features/log_spec.rb +++ b/spec/features/log_spec.rb @@ -4,9 +4,9 @@ RSpec.describe "Log Features" do context "when searching for specific logs" do context "when I am signed in and there are logs in the database" do let(:user) { FactoryBot.create(:user, last_sign_in_at: Time.zone.now) } - let!(:log_to_search) { FactoryBot.create(:case_log, owning_organisation: user.organisation) } - let!(:same_organisation_log) { FactoryBot.create(:case_log, owning_organisation: user.organisation) } - let!(:another_organisation_log) { FactoryBot.create(:case_log) } + let!(:log_to_search) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation) } + let!(:same_organisation_log) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation) } + let!(:another_organisation_log) { FactoryBot.create(:lettings_log) } before do visit("/logs") @@ -82,9 +82,9 @@ RSpec.describe "Log Features" do visit("/logs") click_button("Create a new lettings log") click_link("Set up this lettings log") - select(support_user.organisation.name, from: "case-log-owning-organisation-id-field") + select(support_user.organisation.name, from: "lettings-log-owning-organisation-id-field") click_button("Save and continue") - select(support_user.name, from: "case-log-created-by-id-field") + select(support_user.name, from: "lettings-log-created-by-id-field") click_button("Save and continue") log_id = page.current_path.scan(/\d/).join visit("logs/#{log_id}/setup/check-answers") diff --git a/spec/features/organisation_spec.rb b/spec/features/organisation_spec.rb index 946659974..e14618109 100644 --- a/spec/features/organisation_spec.rb +++ b/spec/features/organisation_spec.rb @@ -135,10 +135,10 @@ RSpec.describe "User Features" do end context "when viewing logs for specific organisation" do - let(:first_log) { organisation.case_logs.first } - let!(:log_to_search) { FactoryBot.create(:case_log, owning_organisation: user.organisation, managing_organisation_id: organisation.id) } - let!(:other_logs) { FactoryBot.create_list(:case_log, 4, owning_organisation_id: organisation.id, managing_organisation_id: organisation.id) } - let(:number_of_case_logs) { CaseLog.count } + let(:first_log) { organisation.lettings_logs.first } + let!(:log_to_search) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation, managing_organisation_id: organisation.id) } + let!(:other_logs) { FactoryBot.create_list(:lettings_log, 4, owning_organisation_id: organisation.id, managing_organisation_id: organisation.id) } + let(:number_of_lettings_logs) { LettingsLog.count } before do visit("/organisations/#{org_id}/logs") @@ -198,10 +198,10 @@ RSpec.describe "User Features" do end end - it "can filter case logs" do - expect(page).to have_content("#{number_of_case_logs} total logs") - organisation.case_logs.map(&:id).each do |case_log_id| - expect(page).to have_link case_log_id.to_s, href: "/logs/#{case_log_id}" + it "can filter lettings logs" do + expect(page).to have_content("#{number_of_lettings_logs} total logs") + organisation.lettings_logs.map(&:id).each do |lettings_log_id| + expect(page).to have_link lettings_log_id.to_s, href: "/logs/#{lettings_log_id}" end check("years-2021-field") click_button("Apply filters") @@ -258,13 +258,13 @@ RSpec.describe "User Features" do let!(:organisation) { FactoryBot.create(:organisation) } let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation:) } let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let!(:log_to_delete) { FactoryBot.create(:case_log, owning_organisation: user.organisation) } + let!(:log_to_delete) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation) } context "when organisation is deleted" do it "child relationships ie logs, schemes and users are deleted too - application" do organisation.destroy! expect { organisation.reload }.to raise_error(ActiveRecord::RecordNotFound) - expect { CaseLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) + expect { LettingsLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { Scheme.find(scheme_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { User.find(user.id) }.to raise_error(ActiveRecord::RecordNotFound) end @@ -273,11 +273,11 @@ RSpec.describe "User Features" do let!(:organisation) { FactoryBot.create(:organisation) } let!(:user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now, organisation:) } let!(:scheme_to_delete) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } - let!(:log_to_delete) { FactoryBot.create(:case_log, :in_progress, needstype: 1, owning_organisation: user.organisation) } + let!(:log_to_delete) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1, owning_organisation: user.organisation) } it "child relationships ie logs, schemes and users are deleted too - database" do ActiveRecord::Base.connection.exec_query("DELETE FROM organisations WHERE id = #{organisation.id};") - expect { CaseLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) + expect { LettingsLog.find(log_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { Scheme.find(scheme_to_delete.id) }.to raise_error(ActiveRecord::RecordNotFound) expect { User.find(user.id) }.to raise_error(ActiveRecord::RecordNotFound) end diff --git a/spec/features/schemes_helpers.rb b/spec/features/schemes_helpers.rb index fdbec0c3a..63d0d847b 100644 --- a/spec/features/schemes_helpers.rb +++ b/spec/features/schemes_helpers.rb @@ -1,18 +1,18 @@ module SchemesHelpers - def fill_in_number_question(case_log_id, question, value, path) - visit("/logs/#{case_log_id}/#{path}") - fill_in("case-log-#{question.to_s.dasherize}-field", with: value) + def fill_in_number_question(lettings_log_id, question, value, path) + visit("/logs/#{lettings_log_id}/#{path}") + fill_in("lettings-log-#{question.to_s.dasherize}-field", with: value) click_button("Save and continue") end - def answer_all_questions_in_income_subsection(case_log) - visit("/logs/#{case_log.id}/net-income") - fill_in("case-log-earnings-field", with: 18_000) - choose("case-log-incfreq-2-field") + def answer_all_questions_in_income_subsection(lettings_log) + visit("/logs/#{lettings_log.id}/net-income") + fill_in("lettings-log-earnings-field", with: 18_000) + choose("lettings-log-incfreq-2-field") click_button("Save and continue") - choose("case-log-benefits-0-field") + choose("lettings-log-benefits-0-field") click_button("Save and continue") - choose("case-log-hb-1-field") + choose("lettings-log-hb-1-field") click_button("Save and continue") end diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index 2df56bb3d..f189b2497 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -930,7 +930,7 @@ RSpec.describe "Schemes scheme Features" do let!(:user) { FactoryBot.create(:user, :data_coordinator, last_sign_in_at: Time.zone.now) } let!(:schemes) { FactoryBot.create_list(:scheme, 5, owning_organisation: user.organisation, managing_organisation: user.organisation, arrangement_type: "The same organisation that owns the housing stock") } let(:location) { FactoryBot.create(:location, scheme: schemes[2]) } - let!(:case_log) { FactoryBot.create(:case_log, created_by: user, needstype: 2) } + let!(:lettings_log) { FactoryBot.create(:lettings_log, created_by: user, needstype: 2) } before do Timecop.freeze(Time.utc(2022, 6, 3)) @@ -950,32 +950,32 @@ RSpec.describe "Schemes scheme Features" do end it "does not display the schemes without a location" do - visit("/logs/#{case_log.id}/scheme") - expect(find("#case-log-scheme-id-field").all("option").count).to eq(4) + visit("/logs/#{lettings_log.id}/scheme") + expect(find("#lettings-log-scheme-id-field").all("option").count).to eq(4) end it "does not display the schemes with a location with a startdate in the future" do location.update!(startdate: Time.utc(2022, 7, 4)) - visit("/logs/#{case_log.id}/scheme") - expect(find("#case-log-scheme-id-field").all("option").count).to eq(3) + visit("/logs/#{lettings_log.id}/scheme") + expect(find("#lettings-log-scheme-id-field").all("option").count).to eq(3) end it "does display the schemes with a location with a startdate in the past" do location.update!(startdate: Time.utc(2022, 5, 2)) - visit("/logs/#{case_log.id}/scheme") - expect(find("#case-log-scheme-id-field").all("option").count).to eq(4) + visit("/logs/#{lettings_log.id}/scheme") + expect(find("#lettings-log-scheme-id-field").all("option").count).to eq(4) end it "does display the schemes with a location with a startdate being today" do location.update!(startdate: Time.utc(2022, 6, 3)) - visit("/logs/#{case_log.id}/scheme") - expect(find("#case-log-scheme-id-field").all("option").count).to eq(4) + visit("/logs/#{lettings_log.id}/scheme") + expect(find("#lettings-log-scheme-id-field").all("option").count).to eq(4) end it "does display the schemes that are not completed" do schemes[2].update!(confirmed: false) - visit("/logs/#{case_log.id}/scheme") - expect(find("#case-log-scheme-id-field").all("option").count).to eq(3) + visit("/logs/#{lettings_log.id}/scheme") + expect(find("#lettings-log-scheme-id-field").all("option").count).to eq(3) end end end diff --git a/spec/features/user_spec.rb b/spec/features/user_spec.rb index 3dc6b0cf8..89447da65 100644 --- a/spec/features/user_spec.rb +++ b/spec/features/user_spec.rb @@ -14,7 +14,7 @@ RSpec.describe "User Features" do allow(Devise.token_generator).to receive(:generate).and_return(reset_password_token) end - context "when the user navigates to case logs" do + context "when the user navigates to lettings logs" do it "is required to log in" do visit("/logs") expect(page).to have_current_path("/account/sign-in") @@ -26,7 +26,7 @@ RSpec.describe "User Features" do expect(page).to have_no_content("You need to sign in or sign up before continuing.") end - it "is redirected to case logs after signing in" do + it "is redirected to lettings logs after signing in" do visit("/logs") fill_in("user[email]", with: user.email) fill_in("user[password]", with: "pAssword1") diff --git a/spec/fixtures/complete_case_log.json b/spec/fixtures/complete_lettings_log.json similarity index 95% rename from spec/fixtures/complete_case_log.json rename to spec/fixtures/complete_lettings_log.json index 227da864b..e5c334b79 100644 --- a/spec/fixtures/complete_case_log.json +++ b/spec/fixtures/complete_lettings_log.json @@ -1,5 +1,5 @@ { - "case_log": { + "lettings_log": { "tenancycode":"T1245", "age1":34, "sex1":"M", @@ -56,12 +56,10 @@ "chr":0, "cap":0, "reasonother":"", - "housingneeds_a":0, - "housingneeds_b":0, - "housingneeds_c":1, - "housingneeds_f":0, - "housingneeds_g":0, - "housingneeds_h":0, + "housingneeds": 1, + "housingneeds_type": 2, + "housingneeds_other": 0, + "housingneeds_c": 1, "illness_type_1":null, "illness_type_2":null, "illness_type_3":null, @@ -155,7 +153,6 @@ "wtcharge":"93.0", "wtshortfall":null, "refused":1, - "housingneeds":2, "wchchrg":null, "newprop":2, "relat2":"P", diff --git a/spec/fixtures/files/case_logs_download.csv b/spec/fixtures/files/lettings_logs_download.csv similarity index 74% rename from spec/fixtures/files/case_logs_download.csv rename to spec/fixtures/files/lettings_logs_download.csv index a09e5a523..783482dd2 100644 --- a/spec/fixtures/files/case_logs_download.csv +++ b/spec/fixtures/files/lettings_logs_download.csv @@ -1,2 +1,2 @@ -id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,needstype,renewal,startdate,rent_type,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,sale_or_letting,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,sale_completion_date,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,ethnic_other,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,rent_value_check,old_form_id,lar,irproduct,old_id,joint,illness_type_0,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unittype_sh,scheme_id,location_id,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_managing_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate -{id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,No,DLUHC,DLUHC,Supported housing,,,,,,,,,,,,,,,,,,,,,,,No,,,,,No,Westminster,E09000033,,SE1 1TE,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,,,9,,,,,,,6,{scheme_id},SE1 1TE,{scheme_code},{scheme_service_name},{scheme_sensitive},Missing,No,DLUHC,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2022-06-05 01:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,Bungalow,Fitted with equipment and adaptations,Westminster,{location_startdate} +id,status,created_at,updated_at,created_by_name,is_dpo,owning_organisation_name,managing_organisation_name,needstype,renewal,startdate,rent_type,irproduct_other,tenancycode,propcode,age1,sex1,ecstat1,hhmemb,relat2,age2,sex2,retirement_value_check,ecstat2,armedforces,leftreg,illness,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_h,is_previous_la_inferred,prevloc_label,prevloc,illness_type_1,illness_type_2,is_la_inferred,la_label,la,postcode_known,postcode_full,previous_la_known,wchair,preg_occ,cbl,earnings,incfreq,net_income_value_check,benefits,hb,period,brent,scharge,pscharge,supcharg,tcharge,offered,layear,ppostcode_full,mrcdate,declaration,ethnic,national,prevten,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,reservist,startertenancy,tenancylength,tenancy,rsnvac,unittype_gn,beds,waityear,reasonpref,chr,cap,reasonother,housingneeds_f,housingneeds_g,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,property_owner_organisation,property_manager_organisation,sale_or_letting,purchaser_code,reason,majorrepairs,hbrentshortfall,property_relet,incref,sale_completion_date,first_time_property_let_as_social_housing,unitletas,builtype,voiddate,renttype,lettype,totchild,totelder,totadult,net_income_known,nocharge,is_carehome,household_charge,referral,tshortfall,chcharge,ppcodenk,age1_known,age2_known,age3_known,age4_known,age5_known,age6_known,age7_known,age8_known,ethnic_group,ethnic_other,letting_allocation_unknown,details_known_2,details_known_3,details_known_4,details_known_5,details_known_6,details_known_7,details_known_8,has_benefits,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat3,relat4,relat5,relat6,relat7,relat8,rent_value_check,old_form_id,lar,irproduct,old_id,joint,illness_type_0,tshortfall_known,sheltered,pregnancy_value_check,hhtype,new_old,vacdays,major_repairs_date_value_check,void_date_value_check,housingneeds_type,housingneeds_other,unittype_sh,scheme_code,scheme_service_name,scheme_sensitive,scheme_type,scheme_registered_under_care_act,scheme_owning_organisation_name,scheme_managing_organisation_name,scheme_primary_client_group,scheme_has_other_client_group,scheme_secondary_client_group,scheme_support_type,scheme_intended_stay,scheme_created_at,location_code,location_postcode,location_name,location_units,location_type_of_unit,location_mobility_type,location_admin_district,location_startdate +{id},in_progress,2022-02-08 16:52:15 +0000,2022-02-08 16:52:15 +0000,Danny Rojas,No,DLUHC,DLUHC,Supported housing,,,,,,,,,,,,,,,,,,,,,,,No,,,,,No,Westminster,E09000033,,SE1 1TE,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0,0,0,,0,,,,,,,,,,,,,,,,,,,,,,,,,0,,,,,,,0,,,,,,,,,,,,,,,,,,,,9,,,,,,,6,{scheme_code},{scheme_service_name},{scheme_sensitive},Missing,No,DLUHC,DLUHC,{scheme_primary_client_group},,{scheme_secondary_client_group},{scheme_support_type},{scheme_intended_stay},2022-06-05 01:00:00 +0100,{location_code},SE1 1TE,Downing Street,20,Bungalow,Fitted with equipment and adaptations,Westminster,{location_startdate} diff --git a/spec/fixtures/files/case_logs_download_non_support.csv b/spec/fixtures/files/lettings_logs_download_non_support.csv similarity index 100% rename from spec/fixtures/files/case_logs_download_non_support.csv rename to spec/fixtures/files/lettings_logs_download_non_support.csv diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json index ea8b3ce40..99b4d8713 100644 --- a/spec/fixtures/forms/2021_2022.json +++ b/spec/fixtures/forms/2021_2022.json @@ -390,6 +390,9 @@ "depends_on": [ { "illness": 1 + }, + { + "illness": 100 } ] } @@ -634,386 +637,366 @@ "label": true, "i18n_template": "ecstat1" }, - {"key": "earnings", + { + "key": "earnings", "label": true, "i18n_template": "earnings" - }] - }, - "questions": { - "net_income_value_check": { - "check_answer_label": "Net income soft validation", - "hidden_in_check_answers": true, - "header": "Are you sure this is correct?", - "type": "interruption_screen", - "answer_options": { - "0": { - "value": "Yes" - }, - "1": { - "value": "No" - } + } + ] + }, + "questions": { + "net_income_value_check": { + "check_answer_label": "Net income soft validation", + "hidden_in_check_answers": true, + "header": "Are you sure this is correct?", + "type": "interruption_screen", + "answer_options": { + "0": { + "value": "Yes" + }, + "1": { + "value": "No" } } } - }, - "net_income_uc_proportion": { - "questions": { - "benefits": { - "check_answer_label": "Benefits as a proportion of income", - "header": "How much of the tenant’s income is from Universal Credit, state pensions or benefits?", - "type": "radio", - "answer_options": { - "0": { - "value":"All" - }, - "1": { - "value":"Some" - } + } + }, + "net_income_uc_proportion": { + "questions": { + "benefits": { + "check_answer_label": "Benefits as a proportion of income", + "header": "How much of the tenant’s income is from Universal Credit, state pensions or benefits?", + "type": "radio", + "answer_options": { + "0": { + "value": "All" + }, + "1": { + "value": "Some" } } } - }, - "housing_benefit": { - "questions": { - "hb": { - "check_answer_label": "Housing-related benefits received", - "header": "Is the tenant likely to be in receipt of any of these housing-related benefits?", - "type": "radio", - "answer_options": { - "0": { - "value": "Housing benefit" - }, - "1": { - "value": "Tenant prefers not to say" - } + } + }, + "housing_benefit": { + "questions": { + "hb": { + "check_answer_label": "Housing-related benefits received", + "header": "Is the tenant likely to be in receipt of any of these housing-related benefits?", + "type": "radio", + "answer_options": { + "0": { + "value": "Housing benefit" }, - "conditional_for": { - "conditional_question": [0] + "1": { + "value": "Tenant prefers not to say" } }, - "conditional_question": { - "check_answer_label": "Conditional Question", - "header": "Question to test page conditions", - "type": "radio", - "answer_options": { - "0": { - "value": "Option A" - }, - "1": { - "value": "Option B" - } + "conditional_for": { + "conditional_question": [0] + } + }, + "conditional_question": { + "check_answer_label": "Conditional Question", + "header": "Question to test page conditions", + "type": "radio", + "answer_options": { + "0": { + "value": "Option A" + }, + "1": { + "value": "Option B" } } } - }, - "dependent_page": { - "depends_on": [{ "incfreq": 1 }], - "questions": { - "dependent_question": { - "check_answer_label": "Dependent Question", - "header": "Question to test page routing", - "type": "radio", - "answer_options": { - "0": { - "value": "Option A" - }, - "1": { - "value": "Option B" - } + } + }, + "dependent_page": { + "depends_on": [{ "incfreq": 1 }], + "questions": { + "dependent_question": { + "check_answer_label": "Dependent Question", + "header": "Question to test page routing", + "type": "radio", + "answer_options": { + "0": { + "value": "Option A" + }, + "1": { + "value": "Option B" } } } } } - }, - "rent_and_charges": { - "label": "Rent", - "pages": { - "rent": { - "questions": { - "period": { - "check_answer_label": "Rent Period", - "header": "Which period are rent and other charges due?", - "type": "radio", - "answer_options": { - "1": { - "value": "Weekly for 52 weeks" - }, - "3": { - "value": "Every 4 weeks" - } + } + }, + "rent_and_charges": { + "label": "Rent", + "pages": { + "rent": { + "questions": { + "period": { + "check_answer_label": "Rent Period", + "header": "Which period are rent and other charges due?", + "type": "radio", + "answer_options": { + "1": { + "value": "Weekly for 52 weeks" + }, + "3": { + "value": "Every 4 weeks" } - }, - "brent": { - "check_answer_label": "Basic Rent", - "header": "What is the basic rent?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "width": 4, - "fields-to-add": [ - "brent", - "scharge", - "pscharge", - "supcharg" - ], - "result-field": "tcharge" - }, - "scharge": { - "check_answer_label": "Service Charge", - "header": "What is the service charge?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "width": 4, - "fields-to-add": [ - "brent", - "scharge", - "pscharge", - "supcharg" - ], - "result-field": "tcharge" - }, - "pscharge": { - "check_answer_label": "Personal Service Charge", - "header": "What is the personal service charge?", - "hint_text": "Not eligible for housing benefit or Universal Credit. For example, hot water excluding water rates.", - "type": "numeric", - "min": 0, - "step": 1, - "width": 4, - "fields-to-add": [ - "brent", - "scharge", - "pscharge", - "supcharg" - ], - "result-field": "tcharge" - }, - "supcharg": { - "check_answer_label": "Support Charge", - "header": "What is the support charge?", - "hint_text": "This is to fund housing-related support services included in the tenancy agreement", - "type": "numeric", - "min": 0, - "max": 300, - "step": 1, - "width": 4, - "fields-to-add": [ - "brent", - "scharge", - "pscharge", - "supcharg" - ], - "result-field": "tcharge" - }, - "tcharge": { - "check_answer_label": "Total Charge", - "header": "Total charge?", - "hint_text": "This is the total of rent and all charges", - "type": "numeric_output", - "min": 0, - "step": 1, - "width": 4, - "readonly": true, - "requires_js": true } + }, + "brent": { + "check_answer_label": "Basic Rent", + "header": "What is the basic rent?", + "hint_text": "Eligible for housing benefit or Universal Credit", + "type": "numeric", + "min": 0, + "step": 1, + "width": 4, + "fields-to-add": ["brent", "scharge", "pscharge", "supcharg"], + "result-field": "tcharge" + }, + "scharge": { + "check_answer_label": "Service Charge", + "header": "What is the service charge?", + "hint_text": "Eligible for housing benefit or Universal Credit", + "type": "numeric", + "min": 0, + "step": 1, + "width": 4, + "fields-to-add": ["brent", "scharge", "pscharge", "supcharg"], + "result-field": "tcharge" + }, + "pscharge": { + "check_answer_label": "Personal Service Charge", + "header": "What is the personal service charge?", + "hint_text": "Not eligible for housing benefit or Universal Credit. For example, hot water excluding water rates.", + "type": "numeric", + "min": 0, + "step": 1, + "width": 4, + "fields-to-add": ["brent", "scharge", "pscharge", "supcharg"], + "result-field": "tcharge" + }, + "supcharg": { + "check_answer_label": "Support Charge", + "header": "What is the support charge?", + "hint_text": "This is to fund housing-related support services included in the tenancy agreement", + "type": "numeric", + "min": 0, + "max": 300, + "step": 1, + "width": 4, + "fields-to-add": ["brent", "scharge", "pscharge", "supcharg"], + "result-field": "tcharge" + }, + "tcharge": { + "check_answer_label": "Total Charge", + "header": "Total charge?", + "hint_text": "This is the total of rent and all charges", + "type": "numeric_output", + "min": 0, + "step": 1, + "width": 4, + "readonly": true, + "requires_js": true } - }, - "weekly_net_income": { - "header": "", - "description": "", - "questions": { - "earnings": { - "check_answer_label": "Total household income", - "header": "How much income does the household have in total every week?", - "hint_text": "", - "type": "numeric", - "min": 0, - "step": "1", - "width": 5, - "prefix": "£", - "suffix": " every week" - } + } + }, + "weekly_net_income": { + "header": "", + "description": "", + "questions": { + "earnings": { + "check_answer_label": "Total household income", + "header": "How much income does the household have in total every week?", + "hint_text": "", + "type": "numeric", + "min": 0, + "step": "1", + "width": 5, + "prefix": "£", + "suffix": " every week" + } + } + }, + "care_home_charge": { + "questions": { + "offered": { + "check_answer_label": "Basic Rent", + "header": "What is the basic rent?", + "hint_text": "Eligible for housing benefit or Universal Credit", + "type": "numeric", + "min": 0, + "step": 1, + "width": 4 } }, - "care_home_charge": { - "questions": { - "offered": { - "check_answer_label": "Basic Rent", - "header": "What is the basic rent?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "width": 4 - } - }, - "depends_on": [{"period": 3}] + "depends_on": [{ "period": 3 }] + }, + "care_home_charge_bi_weekly": { + "questions": { + "offered": { + "check_answer_label": "Basic Rent", + "header": "What is the basic rent?", + "hint_text": "Eligible for housing benefit or Universal Credit", + "type": "numeric", + "min": 0, + "step": 1, + "width": 4 + } }, - "care_home_charge_bi_weekly": { - "questions": { - "offered": { - "check_answer_label": "Basic Rent", - "header": "What is the basic rent?", - "hint_text": "Eligible for housing benefit or Universal Credit", - "type": "numeric", - "min": 0, - "step": 1, - "width": 4 - } - }, - "depends_on": [{"period": 2}] - } + "depends_on": [{ "period": 2 }] } } } - }, - "local_authority": { - "label": "Local authority", - "subsections": { - "local_authority": { - "label": "Local authority", - "pages": { - "time_lived_in_la": { - "questions": { - "layear": { - "check_answer_label": "How long has the household continuously lived in the local authority area where the new letting is located?", - "header": "How long has the household continuously lived in the local authority area where the new letting is located?", - "type": "radio", - "answer_options": { - "0": { - "value": "Just moved to local authority area" - }, - "1": { - "value": "Less than 1 year" - }, - "2": { - "value": "1 year but under 2 years" - }, - "3": { - "value": "2 years but under 3 years" - }, - "4": { - "value": "3 years but under 4 years" - }, - "5": { - "value": "4 years but under 5 years" - }, - "6": { - "value": "5 years or more" - }, - "divider": { - "value": true - }, - "7": { - "value": "Don’t know" - } + } + }, + "local_authority": { + "label": "Local authority", + "subsections": { + "local_authority": { + "label": "Local authority", + "pages": { + "time_lived_in_la": { + "questions": { + "layear": { + "check_answer_label": "How long has the household continuously lived in the local authority area where the new letting is located?", + "header": "How long has the household continuously lived in the local authority area where the new letting is located?", + "type": "radio", + "answer_options": { + "0": { + "value": "Just moved to local authority area" }, - "hidden_in_check_answers": { - "depends_on": [ - { "layear": 0 }, - { "layear": 1 } - ] + "1": { + "value": "Less than 1 year" + }, + "2": { + "value": "1 year but under 2 years" + }, + "3": { + "value": "2 years but under 3 years" + }, + "4": { + "value": "3 years but under 4 years" + }, + "5": { + "value": "4 years but under 5 years" + }, + "6": { + "value": "5 years or more" + }, + "divider": { + "value": true + }, + "7": { + "value": "Don’t know" } + }, + "hidden_in_check_answers": { + "depends_on": [{ "layear": 0 }, { "layear": 1 }] } - }, - "depends_on": [{ "renewal": 0 }] + } }, - "time_on_la_waiting_list": { - "questions": { - "lawaitlist": { - "check_answer_label": "How long has the household been on the local authority waiting list where the new letting is located?", - "header": "How long has the household been on the local authority waiting list where the new letting is located?", - "type": "radio", - "answer_options": { - "0": { - "value": "Just moved to local authority area" - }, - "1": { - "value": "Less than 1 year" - }, - "2": { - "value": "1 year but under 2 years" - }, - "3": { - "value": "2 years but under 3 years" - }, - "4": { - "value": "3 years but under 4 years" - }, - "5": { - "value": "4 years but under 5 years" - }, - "6": { - "value": "5 years or more" - }, - "divider": { - "value": true - }, - "7": { - "value": "Don’t know" - } + "depends_on": [{ "renewal": 0 }] + }, + "time_on_la_waiting_list": { + "questions": { + "lawaitlist": { + "check_answer_label": "How long has the household been on the local authority waiting list where the new letting is located?", + "header": "How long has the household been on the local authority waiting list where the new letting is located?", + "type": "radio", + "answer_options": { + "0": { + "value": "Just moved to local authority area" + }, + "1": { + "value": "Less than 1 year" + }, + "2": { + "value": "1 year but under 2 years" + }, + "3": { + "value": "2 years but under 3 years" + }, + "4": { + "value": "3 years but under 4 years" + }, + "5": { + "value": "4 years but under 5 years" + }, + "6": { + "value": "5 years or more" + }, + "divider": { + "value": true + }, + "7": { + "value": "Don’t know" } } } - }, - "other_postcode": { - "questions": { - "other_postcode": { - "check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation", - "header": "Postcode for the previous accommodation", - "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed", - "type": "text", - "width": 5, - "conditional_for": { "fake_key": "fake_condition" } - }, - "ppostcode_full": { - "check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation", - "header": "Postcode for the previous accommodation", - "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed", - "type": "text", - "width": 5 - } + } + }, + "other_postcode": { + "questions": { + "other_postcode": { + "check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation", + "header": "Postcode for the previous accommodation", + "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed", + "type": "text", + "width": 5, + "conditional_for": { "fake_key": "fake_condition" } + }, + "ppostcode_full": { + "check_answer_label": "Postcode of previous accommodation if the household has moved from settled accommodation", + "header": "Postcode for the previous accommodation", + "hint_text": "If the household has moved from settled accommodation immediately prior to being re-housed", + "type": "text", + "width": 5 } - }, - "property_major_repairs": { - "questions": { - "mrcdate": { - "check_answer_label": "What was the major repairs completion date?", - "header": "What was the major repairs completion date?", - "hint_text": "For example, 27 3 2021", - "type": "date" - } + } + }, + "property_major_repairs": { + "questions": { + "mrcdate": { + "check_answer_label": "What was the major repairs completion date?", + "header": "What was the major repairs completion date?", + "hint_text": "For example, 27 3 2021", + "type": "date" } } } } } - }, - "submission": { - "label": "Submission", - "subsections": { - "declaration": { - "label": "Declaration", - "depends_on": [{ + } + }, + "submission": { + "label": "Submission", + "subsections": { + "declaration": { + "label": "Declaration", + "depends_on": [ + { "household_characteristics": "completed", "household_needs": "completed", "property_information": "completed" - }], - "pages": { - "declaration": { - "questions": { - "declaration": { - "check_answer_label": "", - "header": "Submit this lettings log ", - "type": "checkbox", - "answer_options": { - "declaration": { - "value": "The tenant has seen the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice" - } + } + ], + "pages": { + "declaration": { + "questions": { + "declaration": { + "check_answer_label": "", + "header": "Submit this lettings log ", + "type": "checkbox", + "answer_options": { + "declaration": { + "value": "The tenant has seen the Department for Levelling Up, Housing & Communities (DLUHC) privacy notice" } } } @@ -1024,3 +1007,4 @@ } } } +} diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index c0bb02fd2..e6ae564b9 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -4,7 +4,7 @@ RSpec.describe ApplicationHelper do form_handler = FormHandler.instance let(:form) { form_handler.get_form("test_form") } let(:subsection) { form.get_subsection("household_characteristics") } - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } let(:pagy) { nil } let(:current_user) { FactoryBot.create(:user) } diff --git a/spec/helpers/check_answers_helper_spec.rb b/spec/helpers/check_answers_helper_spec.rb index 593df3971..d60c79f51 100644 --- a/spec/helpers/check_answers_helper_spec.rb +++ b/spec/helpers/check_answers_helper_spec.rb @@ -1,29 +1,29 @@ require "rails_helper" RSpec.describe CheckAnswersHelper do - let(:form) { case_log.form } + let(:form) { lettings_log.form } let(:subsection) { form.get_subsection("household_characteristics") } - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } let(:current_user) { FactoryBot.build(:user) } describe "display_answered_questions_summary" do context "when a section hasn't been completed yet" do it "returns that you have unanswered questions" do - expect(display_answered_questions_summary(subsection, case_log, current_user)) + expect(display_answered_questions_summary(subsection, lettings_log, current_user)) .to match(/You have answered 2 of 7 questions./) end end context "when a section has been completed" do it "returns that you have answered all the questions" do - case_log.sex1 = "F" - case_log.hhmemb = 1 - case_log.propcode = "123" - case_log.ecstat1 = 200 - case_log.ecstat2 = 9 - expect(display_answered_questions_summary(subsection, case_log, current_user)) + lettings_log.sex1 = "F" + lettings_log.hhmemb = 1 + lettings_log.propcode = "123" + lettings_log.ecstat1 = 200 + lettings_log.ecstat2 = 9 + expect(display_answered_questions_summary(subsection, lettings_log, current_user)) .to match(/You answered all the questions./) - expect(display_answered_questions_summary(subsection, case_log, current_user)) + expect(display_answered_questions_summary(subsection, lettings_log, current_user)) .not_to match(/href/) end end diff --git a/spec/helpers/conditional_questions_helper_spec.rb b/spec/helpers/conditional_questions_helper_spec.rb index ab3898ea0..6a83b1d0a 100644 --- a/spec/helpers/conditional_questions_helper_spec.rb +++ b/spec/helpers/conditional_questions_helper_spec.rb @@ -1,8 +1,8 @@ require "rails_helper" RSpec.describe ConditionalQuestionsHelper do - let(:case_log) { FactoryBot.build(:case_log) } - let(:page) { case_log.form.get_page("armed_forces") } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:page) { lettings_log.form.get_page("armed_forces") } describe "conditional questions for page" do let(:conditional_pages) { %w[leftreg] } diff --git a/spec/helpers/filters_helper_spec.rb b/spec/helpers/filters_helper_spec.rb index d220b79af..02ad348fb 100644 --- a/spec/helpers/filters_helper_spec.rb +++ b/spec/helpers/filters_helper_spec.rb @@ -11,7 +11,7 @@ RSpec.describe FiltersHelper do context "when the filter is the user filter but session filters is empty" do before do - session[:case_logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end context "when looking at the all value" do @@ -24,7 +24,7 @@ RSpec.describe FiltersHelper do context "when one filter is selected" do before do - session[:case_logs_filters] = { "status": "in_progress" }.to_json + session[:lettings_logs_filters] = { "status": "in_progress" }.to_json end it "returns false for non selected filters" do @@ -38,7 +38,7 @@ RSpec.describe FiltersHelper do context "when support user is using the organisation filter" do before do - session[:case_logs_filters] = { "organisation": "1" }.to_json + session[:lettings_logs_filters] = { "organisation": "1" }.to_json end it "returns true for the parent organisation_select filter" do @@ -49,7 +49,7 @@ RSpec.describe FiltersHelper do context "when support user has not set the organisation_select filter" do before do - session[:case_logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end it "defaults to all organisations" do @@ -60,7 +60,7 @@ RSpec.describe FiltersHelper do context "when the specific organisation filter is not set" do before do - session[:case_logs_filters] = { "status" => [""], "years" => [""], "user" => "all" }.to_json + session[:lettings_logs_filters] = { "status" => [""], "years" => [""], "user" => "all" }.to_json end it "marks the all options as checked" do @@ -72,7 +72,7 @@ RSpec.describe FiltersHelper do describe "#selected_option" do before do - session[:case_logs_filters] = {}.to_json + session[:lettings_logs_filters] = {}.to_json end context "when nothing has been selected" do diff --git a/spec/helpers/form_page_error_helper_spec.rb b/spec/helpers/form_page_error_helper_spec.rb index af712f1ef..e2b342a40 100644 --- a/spec/helpers/form_page_error_helper_spec.rb +++ b/spec/helpers/form_page_error_helper_spec.rb @@ -3,21 +3,21 @@ require "rails_helper" RSpec.describe FormPageErrorHelper do describe "#remove_other_page_errors" do context "when non base other questions are removed" do - let!(:case_log) { FactoryBot.create(:case_log, :in_progress) } - let!(:form) { case_log.form } + let!(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } + let!(:form) { lettings_log.form } before do - case_log.errors.add :layear, "error" - case_log.errors.add :period, "error_one" - case_log.errors.add :base, "error_too" + lettings_log.errors.add :layear, "error" + lettings_log.errors.add :period, "error_one" + lettings_log.errors.add :base, "error_too" end it "returns details and user tabs" do page = form.get_page("rent") - remove_other_page_errors(case_log, page) - expect(case_log.errors.count).to eq(2) - expect(case_log.errors.map(&:attribute)).to include(:period) - expect(case_log.errors.map(&:attribute)).to include(:base) + remove_other_page_errors(lettings_log, page) + expect(lettings_log.errors.count).to eq(2) + expect(lettings_log.errors.map(&:attribute)).to include(:period) + expect(lettings_log.errors.map(&:attribute)).to include(:base) end end end diff --git a/spec/helpers/interruption_screen_helper_spec.rb b/spec/helpers/interruption_screen_helper_spec.rb index 4d9ec7abe..4984a0450 100644 --- a/spec/helpers/interruption_screen_helper_spec.rb +++ b/spec/helpers/interruption_screen_helper_spec.rb @@ -5,9 +5,9 @@ RSpec.describe InterruptionScreenHelper do let(:form) { form_handler.get_form("test_form") } let(:subsection) { form.get_subsection("household_characteristics") } let(:user) { FactoryBot.create(:user) } - let(:case_log) do + let(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :in_progress, ecstat1: 1, earnings: 750, @@ -35,8 +35,8 @@ RSpec.describe InterruptionScreenHelper do }, ], } - expect(display_informative_text(informative_text, case_log)) - .to eq(I18n.t("soft_validations.net_income.hint_text", ecstat1: case_log.form.get_question("ecstat1", case_log).answer_label(case_log).downcase, earnings: case_log.form.get_question("earnings", case_log).answer_label(case_log))) + expect(display_informative_text(informative_text, lettings_log)) + .to eq(I18n.t("soft_validations.net_income.hint_text", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase, earnings: lettings_log.form.get_question("earnings", lettings_log).answer_label(lettings_log))) end end @@ -52,8 +52,8 @@ RSpec.describe InterruptionScreenHelper do }, ], } - expect(display_informative_text(informative_text, case_log)) - .to eq(I18n.t("test.one_argument", ecstat1: case_log.form.get_question("ecstat1", case_log).answer_label(case_log).downcase)) + expect(display_informative_text(informative_text, lettings_log)) + .to eq(I18n.t("test.one_argument", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end @@ -74,8 +74,8 @@ RSpec.describe InterruptionScreenHelper do }, ], } - expect(display_informative_text(informative_text, case_log)) - .to eq(I18n.t("test.one_argument", ecstat1: case_log.form.get_question("ecstat1", case_log).answer_label(case_log).downcase)) + expect(display_informative_text(informative_text, lettings_log)) + .to eq(I18n.t("test.one_argument", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end @@ -91,7 +91,7 @@ RSpec.describe InterruptionScreenHelper do }, ], } - expect(display_informative_text(informative_text, case_log)) + expect(display_informative_text(informative_text, lettings_log)) .to eq("") end end @@ -101,7 +101,7 @@ RSpec.describe InterruptionScreenHelper do context "when title text has no arguments" do it "returns the correct title text" do title_text = { "translation" => "test.title_text.no_argument" } - expect(display_title_text(title_text, case_log)) + expect(display_title_text(title_text, lettings_log)) .to eq(I18n.t("test.title_text.no_argument")) end end @@ -118,20 +118,20 @@ RSpec.describe InterruptionScreenHelper do }, ], } - expect(display_title_text(title_text, case_log)) - .to eq(I18n.t("test.title_text.one_argument", ecstat1: case_log.form.get_question("ecstat1", case_log).answer_label(case_log).downcase)) + expect(display_title_text(title_text, lettings_log)) + .to eq(I18n.t("test.title_text.one_argument", ecstat1: lettings_log.form.get_question("ecstat1", lettings_log).answer_label(lettings_log).downcase)) end end context "when title text is not defined" do it "returns an empty string" do - expect(display_title_text(nil, case_log)).to eq("") + expect(display_title_text(nil, lettings_log)).to eq("") end end context "when title text is empty string" do it "returns an empty string" do - expect(display_title_text("", case_log)).to eq("") + expect(display_title_text("", lettings_log)).to eq("") end end end diff --git a/spec/helpers/question_attribute_helper_spec.rb b/spec/helpers/question_attribute_helper_spec.rb index cc687b544..393db953e 100644 --- a/spec/helpers/question_attribute_helper_spec.rb +++ b/spec/helpers/question_attribute_helper_spec.rb @@ -1,8 +1,8 @@ require "rails_helper" RSpec.describe QuestionAttributeHelper do - let(:case_log) { FactoryBot.build(:case_log) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:form) { lettings_log.form } let(:questions) { form.get_page("rent").questions } describe "html attributes" do @@ -16,7 +16,7 @@ RSpec.describe QuestionAttributeHelper do expect(stimulus_html_attributes(brent)).to eq({ "data-controller": "numeric-question", "data-action": "input->numeric-question#calculateFields", - "data-target": "case-log-#{brent.result_field.to_s.dasherize}-field", + "data-target": "lettings-log-#{brent.result_field.to_s.dasherize}-field", "data-calculated": brent.fields_to_add.to_json, }) end @@ -41,7 +41,7 @@ RSpec.describe QuestionAttributeHelper do { "data-controller": "numeric-question conditional-question", "data-action": "input->numeric-question#calculateFields click->conditional-question#displayConditional", - "data-target": "case-log-#{question.result_field.to_s.dasherize}-field", + "data-target": "lettings-log-#{question.result_field.to_s.dasherize}-field", "data-calculated": question.fields_to_add.to_json, "data-info": question.conditional_for.to_json, } diff --git a/spec/helpers/tag_helper_spec.rb b/spec/helpers/tag_helper_spec.rb index dd7ad664d..3f32b8502 100644 --- a/spec/helpers/tag_helper_spec.rb +++ b/spec/helpers/tag_helper_spec.rb @@ -1,12 +1,12 @@ require "rails_helper" RSpec.describe TagHelper do - let(:empty_case_log) { FactoryBot.create(:case_log) } - let(:case_log) { FactoryBot.create(:case_log, :in_progress) } + let(:empty_lettings_log) { FactoryBot.create(:lettings_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } describe "get the status tag" do it "returns tag with correct status text and colour" do - expect(status_tag(case_log.status)).to eq("In progress") + expect(status_tag(lettings_log.status)).to eq("In progress") end it "returns tag with correct status text and colour and custom class" do diff --git a/spec/helpers/tasklist_helper_spec.rb b/spec/helpers/tasklist_helper_spec.rb index 4401d1739..9e770e1ff 100644 --- a/spec/helpers/tasklist_helper_spec.rb +++ b/spec/helpers/tasklist_helper_spec.rb @@ -1,77 +1,77 @@ require "rails_helper" RSpec.describe TasklistHelper do - let(:empty_case_log) { FactoryBot.create(:case_log) } - let(:case_log) { FactoryBot.create(:case_log, :in_progress, needstype: 1) } + let(:empty_lettings_log) { FactoryBot.create(:lettings_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) } describe "get next incomplete section" do it "returns the first subsection name if it is not completed" do - expect(get_next_incomplete_section(case_log).id).to eq("household_characteristics") + expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics") end it "returns the first subsection name if it is partially completed" do - case_log["tenancycode"] = 123 - expect(get_next_incomplete_section(case_log).id).to eq("household_characteristics") + lettings_log["tenancycode"] = 123 + expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics") end end describe "get sections count" do it "returns the total of sections if no status is given" do - expect(get_subsections_count(empty_case_log)).to eq(8) + expect(get_subsections_count(empty_lettings_log)).to eq(8) end it "returns 0 sections for completed sections if no sections are completed" do - expect(get_subsections_count(empty_case_log, :completed)).to eq(0) + expect(get_subsections_count(empty_lettings_log, :completed)).to eq(0) end it "returns the number of not started sections" do - expect(get_subsections_count(empty_case_log, :not_started)).to eq(8) + expect(get_subsections_count(empty_lettings_log, :not_started)).to eq(8) end it "returns the number of sections in progress" do - expect(get_subsections_count(case_log, :in_progress)).to eq(3) + expect(get_subsections_count(lettings_log, :in_progress)).to eq(3) end it "returns 0 for invalid state" do - expect(get_subsections_count(case_log, :fake)).to eq(0) + expect(get_subsections_count(lettings_log, :fake)).to eq(0) end end describe "get_next_page_or_check_answers" do - let(:subsection) { case_log.form.get_subsection("household_characteristics") } + let(:subsection) { lettings_log.form.get_subsection("household_characteristics") } let(:user) { FactoryBot.build(:user) } it "returns the check answers page path if the section has been started already" do - expect(next_page_or_check_answers(subsection, case_log, user)).to match(/check-answers/) + expect(next_page_or_check_answers(subsection, lettings_log, user)).to match(/check-answers/) end it "returns the first question page path for the section if it has not been started yet" do - expect(next_page_or_check_answers(subsection, empty_case_log, user)).to match(/tenant-code-test/) + expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/tenant-code-test/) end it "when first question being not routed to returns the next routed question link" do - empty_case_log.housingneeds_a = "No" - expect(next_page_or_check_answers(subsection, empty_case_log, user)).to match(/person-1-gender/) + empty_lettings_log.housingneeds_a = "No" + expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/person-1-gender/) end end describe "subsection link" do - let(:subsection) { case_log.form.get_subsection("household_characteristics") } + let(:subsection) { lettings_log.form.get_subsection("household_characteristics") } let(:user) { FactoryBot.build(:user) } context "with a subsection that's enabled" do it "returns the subsection link url" do - expect(subsection_link(subsection, case_log, user)).to match(/household-characteristics/) + expect(subsection_link(subsection, lettings_log, user)).to match(/household-characteristics/) end end context "with a subsection that cannot be started yet" do before do - allow(subsection).to receive(:status).with(case_log).and_return(:cannot_start_yet) + allow(subsection).to receive(:status).with(lettings_log).and_return(:cannot_start_yet) end it "returns the label instead of a link" do - expect(subsection_link(subsection, case_log, user)).to match(subsection.label) + expect(subsection_link(subsection, lettings_log, user)).to match(subsection.label) end end end diff --git a/spec/lib/tasks/data_export_spec.rb b/spec/lib/tasks/data_export_spec.rb index 00d3414d4..cca6e2dcd 100644 --- a/spec/lib/tasks/data_export_spec.rb +++ b/spec/lib/tasks/data_export_spec.rb @@ -7,7 +7,7 @@ describe "rake core:data_export", type: task do let(:paas_instance) { "paas_export_instance" } let(:storage_service) { instance_double(Storage::S3Service) } let(:paas_config_service) { instance_double(Configuration::PaasConfigurationService) } - let(:export_service) { instance_double(Exports::CaseLogExportService) } + let(:export_service) { instance_double(Exports::LettingsLogExportService) } before do Rake.application.rake_require("tasks/data_export") @@ -16,26 +16,26 @@ describe "rake core:data_export", type: task do allow(Storage::S3Service).to receive(:new).and_return(storage_service) allow(Configuration::PaasConfigurationService).to receive(:new).and_return(paas_config_service) - allow(Exports::CaseLogExportService).to receive(:new).and_return(export_service) + allow(Exports::LettingsLogExportService).to receive(:new).and_return(export_service) allow(ENV).to receive(:[]) allow(ENV).to receive(:[]).with("EXPORT_PAAS_INSTANCE").and_return(paas_instance) end - context "when exporting case logs with no parameters" do + context "when exporting lettings logs with no parameters" do it "starts the XML export process" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, paas_instance) - expect(Exports::CaseLogExportService).to receive(:new).with(storage_service) - expect(export_service).to receive(:export_xml_case_logs) + expect(Exports::LettingsLogExportService).to receive(:new).with(storage_service) + expect(export_service).to receive(:export_xml_lettings_logs) task.invoke end end - context "when exporting case logs with CSV format" do + context "when exporting lettings logs with CSV format" do it "starts the CSV export process" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, paas_instance) - expect(Exports::CaseLogExportService).to receive(:new).with(storage_service) - expect(export_service).to receive(:export_csv_case_logs) + expect(Exports::LettingsLogExportService).to receive(:new).with(storage_service) + expect(export_service).to receive(:export_csv_lettings_logs) task.invoke("CSV", "false") end diff --git a/spec/lib/tasks/data_import_spec.rb b/spec/lib/tasks/data_import_spec.rb index e861c2ad2..ad1887d16 100644 --- a/spec/lib/tasks/data_import_spec.rb +++ b/spec/lib/tasks/data_import_spec.rb @@ -91,18 +91,18 @@ describe "rake core:data_import", type: :task do end end - context "when importing case logs" do - let(:type) { "case-logs" } - let(:import_service) { instance_double(Imports::CaseLogsImportService) } - let(:fixture_path) { "spec/fixtures/imports/case_logs" } + context "when importing lettings logs" do + let(:type) { "lettings-logs" } + let(:import_service) { instance_double(Imports::LettingsLogsImportService) } + let(:fixture_path) { "spec/fixtures/imports/lettings_logs" } before do - allow(Imports::CaseLogsImportService).to receive(:new).and_return(import_service) + allow(Imports::LettingsLogsImportService).to receive(:new).and_return(import_service) end - it "creates case logs from the given XML file" do + it "creates lettings logs from the given XML file" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, instance_name) - expect(Imports::CaseLogsImportService).to receive(:new).with(storage_service) + expect(Imports::LettingsLogsImportService).to receive(:new).with(storage_service) expect(import_service).to receive(:create_logs).with(fixture_path) task.invoke(type, fixture_path) diff --git a/spec/lib/tasks/date_import_field_spec.rb b/spec/lib/tasks/date_import_field_spec.rb index 69c58697a..6c7cc9943 100644 --- a/spec/lib/tasks/date_import_field_spec.rb +++ b/spec/lib/tasks/date_import_field_spec.rb @@ -19,12 +19,12 @@ describe "rake core:data_import_field", type: :task do allow(ENV).to receive(:[]).with("IMPORT_PAAS_INSTANCE").and_return(instance_name) end - context "when importing a case log field" do - let(:import_service) { instance_double(Imports::CaseLogsFieldImportService) } - let(:fixture_path) { "spec/fixtures/imports/case_logs" } + context "when importing a lettings log field" do + let(:import_service) { instance_double(Imports::LettingsLogsFieldImportService) } + let(:fixture_path) { "spec/fixtures/imports/lettings_logs" } before do - allow(Imports::CaseLogsFieldImportService).to receive(:new).and_return(import_service) + allow(Imports::LettingsLogsFieldImportService).to receive(:new).and_return(import_service) allow(import_service).to receive(:update_field) end diff --git a/spec/lib/tasks/full_import_spec.rb b/spec/lib/tasks/full_import_spec.rb index 79fac87f3..a735db40d 100644 --- a/spec/lib/tasks/full_import_spec.rb +++ b/spec/lib/tasks/full_import_spec.rb @@ -21,7 +21,7 @@ describe "rake core:full_import", type: :task do end context "when starting a full import" do - let(:case_logs_service) { instance_double(Imports::CaseLogsImportService) } + let(:lettings_logs_service) { instance_double(Imports::LettingsLogsImportService) } let(:rent_period_service) { instance_double(Imports::OrganisationRentPeriodImportService) } let(:data_protection_service) { instance_double(Imports::DataProtectionConfirmationImportService) } let(:user_service) { instance_double(Imports::UserImportService) } @@ -36,7 +36,7 @@ describe "rake core:full_import", type: :task do allow(Imports::UserImportService).to receive(:new).and_return(user_service) allow(Imports::DataProtectionConfirmationImportService).to receive(:new).and_return(data_protection_service) allow(Imports::OrganisationRentPeriodImportService).to receive(:new).and_return(rent_period_service) - allow(Imports::CaseLogsImportService).to receive(:new).and_return(case_logs_service) + allow(Imports::LettingsLogsImportService).to receive(:new).and_return(lettings_logs_service) end it "raises an exception if no parameters are provided" do @@ -53,7 +53,7 @@ describe "rake core:full_import", type: :task do expect(user_service).to receive(:create_users).with("user") expect(data_protection_service).to receive(:create_data_protection_confirmations).with("dataprotect") expect(rent_period_service).to receive(:create_organisation_rent_periods).with("rent-period") - expect(case_logs_service).to receive(:create_logs).with("logs") + expect(lettings_logs_service).to receive(:create_logs).with("logs") task.invoke(fixture_path) end @@ -72,7 +72,7 @@ describe "rake core:full_import", type: :task do expect(user_service).to receive(:create_users) expect(data_protection_service).to receive(:create_data_protection_confirmations) expect(rent_period_service).to receive(:create_organisation_rent_periods) - expect(case_logs_service).to receive(:create_logs) + expect(lettings_logs_service).to receive(:create_logs) expect(scheme_service).not_to receive(:create_schemes) expect(location_service).not_to receive(:create_scheme_locations) diff --git a/spec/models/form/page_spec.rb b/spec/models/form/page_spec.rb index 26762534b..e4a780beb 100644 --- a/spec/models/form/page_spec.rb +++ b/spec/models/form/page_spec.rb @@ -4,8 +4,8 @@ RSpec.describe Form::Page, type: :model do subject(:page) { described_class.new(page_id, page_definition, subsection) } let(:user) { FactoryBot.create(:user) } - let(:case_log) { FactoryBot.build(:case_log) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:form) { lettings_log.form } let(:section_id) { "rent_and_charges" } let(:section_definition) { form.form_definition["sections"][section_id] } let(:section) { Form::Section.new(section_id, section_definition, form) } @@ -42,23 +42,23 @@ RSpec.describe Form::Page, type: :model do end end - context "with a case log" do - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + context "with a lettings log" do + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } it "knows if it's been routed to" do - expect(page.routed_to?(case_log, user)).to be true + expect(page.routed_to?(lettings_log, user)).to be true end context "with routing conditions" do let(:page_id) { "dependent_page" } it "evaluates not met conditions correctly" do - expect(page.routed_to?(case_log, user)).to be false + expect(page.routed_to?(lettings_log, user)).to be false end it "evaluates met conditions correctly" do - case_log.incfreq = 1 - expect(page.routed_to?(case_log, user)).to be true + lettings_log.incfreq = 1 + expect(page.routed_to?(lettings_log, user)).to be true end end @@ -68,13 +68,13 @@ RSpec.describe Form::Page, type: :model do let(:page_id) { "person_2_working_situation" } it "evaluates not met conditions correctly" do - case_log.age2 = 12 - expect(page.routed_to?(case_log, user)).to be false + lettings_log.age2 = 12 + expect(page.routed_to?(lettings_log, user)).to be false end it "evaluates met conditions correctly" do - case_log.age2 = 17 - expect(page.routed_to?(case_log, user)).to be true + lettings_log.age2 = 17 + expect(page.routed_to?(lettings_log, user)).to be true end end @@ -82,11 +82,11 @@ RSpec.describe Form::Page, type: :model do let(:section_id) { "submission" } let(:subsection_id) { "declaration" } let(:page_id) { "declaration" } - let(:completed_case_log) { FactoryBot.build(:case_log, :completed, incfreq: "Weekly") } + let(:completed_lettings_log) { FactoryBot.build(:lettings_log, :completed, incfreq: "Weekly") } it "evaluates the sections dependencies" do - expect(page.routed_to?(case_log, user)).to be false - expect(page.routed_to?(completed_case_log, user)).to be true + expect(page.routed_to?(lettings_log, user)).to be false + expect(page.routed_to?(completed_lettings_log, user)).to be true end end end diff --git a/spec/models/form/question_spec.rb b/spec/models/form/question_spec.rb index 31021fe90..d1e2702fd 100644 --- a/spec/models/form/question_spec.rb +++ b/spec/models/form/question_spec.rb @@ -3,8 +3,8 @@ require "rails_helper" RSpec.describe Form::Question, type: :model do subject(:question) { described_class.new(question_id, question_definition, page) } - let(:case_log) { FactoryBot.build(:case_log) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:form) { lettings_log.form } let(:section_id) { "rent_and_charges" } let(:section_definition) { form.form_definition["sections"][section_id] } let(:section) { Form::Section.new(section_id, section_definition, form) } @@ -118,7 +118,7 @@ RSpec.describe Form::Question, type: :model do context "when answer options do not include derived options" do it "displays all answer options" do - expect(question.displayed_answer_options(case_log)).to match(question.answer_options) + expect(question.displayed_answer_options(lettings_log)).to match(question.answer_options) end end @@ -132,7 +132,7 @@ RSpec.describe Form::Question, type: :model do end it "does not include those options in the displayed options" do - expect(question.displayed_answer_options(case_log)).to match(expected_answer_options) + expect(question.displayed_answer_options(lettings_log)).to match(expected_answer_options) end it "can still map the value label" do @@ -216,35 +216,35 @@ RSpec.describe Form::Question, type: :model do end end - context "with a case log" do - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + context "with a lettings log" do + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } let(:question_id) { "incfreq" } it "has an answer label" do - case_log.incfreq = 1 - expect(question.answer_label(case_log)).to eq("Weekly") + lettings_log.incfreq = 1 + expect(question.answer_label(lettings_log)).to eq("Weekly") end it "has an update answer link text helper" do - expect(question.action_text(case_log)).to match(/Answer/) - case_log["incfreq"] = 0 - expect(question.action_text(case_log)).to match(/Change/) + expect(question.action_text(lettings_log)).to match(/Answer/) + lettings_log["incfreq"] = 0 + expect(question.action_text(lettings_log)).to match(/Change/) end it "has an update answer link href helper" do - case_log.id = 1 - expect(question.action_href(case_log, page.id)).to eq("/logs/1/net-income?referrer=check_answers") + lettings_log.id = 1 + expect(question.action_href(lettings_log, page.id)).to eq("/logs/1/net-income?referrer=check_answers") end context "when the question has an inferred answer" do let(:section_id) { "tenancy_and_property" } let(:subsection_id) { "property_information" } let(:page_id) { "property_postcode" } - let(:case_log) { FactoryBot.build(:case_log, :in_progress, postcode_known: 0, postcode_full: nil) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress, postcode_known: 0, postcode_full: nil) } let(:question_id) { "postcode_full" } it "displays 'change' in the check answers link text" do - expect(question.action_text(case_log)).to match(/Change/) + expect(question.action_text(lettings_log)).to match(/Change/) end end @@ -253,12 +253,12 @@ RSpec.describe Form::Question, type: :model do let(:subsection_id) { "household_characteristics" } let(:page_id) { "person_2_working_situation" } let(:question_id) { "ecstat2" } - let(:case_log) do - FactoryBot.create(:case_log, :in_progress, hhmemb: 2, details_known_2: 0, age2_known: 0, age2: 12) + let(:lettings_log) do + FactoryBot.create(:lettings_log, :in_progress, hhmemb: 2, details_known_2: 0, age2_known: 0, age2: 12) end it "knows it has an inferred value for check answers" do - expect(question.has_inferred_check_answers_value?(case_log)).to be true + expect(question.has_inferred_check_answers_value?(lettings_log)).to be true end end @@ -269,13 +269,13 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "mrcdate" } it "displays a formatted answer label" do - case_log.mrcdate = Time.zone.local(2021, 10, 11) - expect(question.answer_label(case_log)).to eq("11 October 2021") + lettings_log.mrcdate = Time.zone.local(2021, 10, 11) + expect(question.answer_label(lettings_log)).to eq("11 October 2021") end it "can handle nils" do - case_log.mrcdate = nil - expect(question.answer_label(case_log)).to eq("") + lettings_log.mrcdate = nil + expect(question.answer_label(lettings_log)).to eq("") end end @@ -286,10 +286,10 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "accessibility_requirements" } it "has a joined answers label" do - case_log.housingneeds_a = 1 - case_log.housingneeds_c = 1 + lettings_log.housingneeds_a = 1 + lettings_log.housingneeds_c = 1 expected_answer_label = "Fully wheelchair accessible housing, Level access housing" - expect(question.answer_label(case_log)).to eq(expected_answer_label) + expect(question.answer_label(lettings_log)).to eq(expected_answer_label) end end @@ -298,12 +298,12 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "conditional_question" } it "knows whether it is enabled or not for unmet conditions" do - expect(question.enabled?(case_log)).to be false + expect(question.enabled?(lettings_log)).to be false end it "knows whether it is enabled or not for met conditions" do - case_log.hb = "Housing benefit" - expect(question.enabled?(case_log)).to be true + lettings_log.hb = "Housing benefit" + expect(question.enabled?(lettings_log)).to be true end context "when the condition type hasn't been implemented yet" do @@ -314,7 +314,7 @@ RSpec.describe Form::Question, type: :model do end it "raises an exception" do - expect { question.enabled?(case_log) }.to raise_error("Not implemented yet") + expect { question.enabled?(lettings_log) }.to raise_error("Not implemented yet") end end end @@ -326,13 +326,13 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "earnings" } it "displays the correct label for given suffix and answer the suffix depends on" do - case_log.incfreq = 1 - case_log.earnings = 500 - expect(question.answer_label(case_log)).to eq("£500.00 every week") - case_log.incfreq = 2 - expect(question.answer_label(case_log)).to eq("£500.00 every month") - case_log.incfreq = 3 - expect(question.answer_label(case_log)).to eq("£500.00 every year") + lettings_log.incfreq = 1 + lettings_log.earnings = 500 + expect(question.answer_label(lettings_log)).to eq("£500.00 every week") + lettings_log.incfreq = 2 + expect(question.answer_label(lettings_log)).to eq("£500.00 every month") + lettings_log.incfreq = 3 + expect(question.answer_label(lettings_log)).to eq("£500.00 every year") end end end @@ -345,8 +345,8 @@ RSpec.describe Form::Question, type: :model do let(:question_id) { "postcode_full" } it "returns true" do - case_log["postcode_known"] = 0 - expect(question.completed?(case_log)).to be(true) + lettings_log["postcode_known"] = 0 + expect(question.completed?(lettings_log)).to be(true) end end end @@ -356,14 +356,14 @@ RSpec.describe Form::Question, type: :model do let(:subsection_id) { "local_authority" } let(:page_id) { "time_lived_in_la" } let(:question_id) { "layear" } - let(:case_log) do - FactoryBot.create(:case_log, :in_progress) + let(:lettings_log) do + FactoryBot.create(:lettings_log, :in_progress) end it "can work out if the question will be shown in check answers" do - expect(question.hidden_in_check_answers?(case_log, nil)).to be(false) - case_log.layear = 0 - expect(question.hidden_in_check_answers?(case_log, nil)).to be(true) + expect(question.hidden_in_check_answers?(lettings_log, nil)).to be(false) + lettings_log.layear = 0 + expect(question.hidden_in_check_answers?(lettings_log, nil)).to be(true) end end end diff --git a/spec/models/form/section_spec.rb b/spec/models/form/section_spec.rb index 76ea23ca5..52f6effc8 100644 --- a/spec/models/form/section_spec.rb +++ b/spec/models/form/section_spec.rb @@ -3,8 +3,8 @@ require "rails_helper" RSpec.describe Form::Section, type: :model do subject(:section) { described_class.new(section_id, section_definition, form) } - let(:case_log) { FactoryBot.build(:case_log) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:form) { lettings_log.form } let(:section_id) { "household" } let(:section_definition) { form.form_definition["sections"][section_id] } diff --git a/spec/models/form/setup/pages/created_by_spec.rb b/spec/models/form/setup/pages/created_by_spec.rb index 9e1c38dcb..7ae803d0d 100644 --- a/spec/models/form/setup/pages/created_by_spec.rb +++ b/spec/models/form/setup/pages/created_by_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Form::Setup::Pages::CreatedBy, type: :model do let(:page_definition) { nil } let(:subsection) { instance_double(Form::Subsection) } let(:form) { instance_double(Form) } - let(:case_log) { instance_double(CaseLog) } + let(:lettings_log) { instance_double(LettingsLog) } it "has correct subsection" do expect(page.subsection).to eq(subsection) @@ -37,7 +37,7 @@ RSpec.describe Form::Setup::Pages::CreatedBy, type: :model do let(:support_user) { FactoryBot.build(:user, :support) } it "is shown" do - expect(page.routed_to?(case_log, support_user)).to be true + expect(page.routed_to?(lettings_log, support_user)).to be true end end @@ -45,7 +45,7 @@ RSpec.describe Form::Setup::Pages::CreatedBy, type: :model do let(:user) { FactoryBot.build(:user) } it "is not shown" do - expect(page.routed_to?(case_log, user)).to be false + expect(page.routed_to?(lettings_log, user)).to be false end end end diff --git a/spec/models/form/setup/pages/organisation_spec.rb b/spec/models/form/setup/pages/organisation_spec.rb index f4c7f3f23..50d8b90fd 100644 --- a/spec/models/form/setup/pages/organisation_spec.rb +++ b/spec/models/form/setup/pages/organisation_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Form::Setup::Pages::Organisation, type: :model do let(:page_definition) { nil } let(:subsection) { instance_double(Form::Subsection) } let(:form) { instance_double(Form) } - let(:case_log) { instance_double(CaseLog) } + let(:lettings_log) { instance_double(LettingsLog) } it "has correct subsection" do expect(page.subsection).to eq(subsection) @@ -37,7 +37,7 @@ RSpec.describe Form::Setup::Pages::Organisation, type: :model do let(:support_user) { FactoryBot.build(:user, :support) } it "is shown" do - expect(page.routed_to?(case_log, support_user)).to be true + expect(page.routed_to?(lettings_log, support_user)).to be true end end @@ -45,7 +45,7 @@ RSpec.describe Form::Setup::Pages::Organisation, type: :model do let(:user) { FactoryBot.build(:user) } it "is not shown" do - expect(page.routed_to?(case_log, user)).to be false + expect(page.routed_to?(lettings_log, user)).to be false end end end diff --git a/spec/models/form/setup/questions/created_by_id_spec.rb b/spec/models/form/setup/questions/created_by_id_spec.rb index 9b20a02ae..95203a555 100644 --- a/spec/models/form/setup/questions/created_by_id_spec.rb +++ b/spec/models/form/setup/questions/created_by_id_spec.rb @@ -67,7 +67,7 @@ RSpec.describe Form::Setup::Questions::CreatedById, type: :model do end context "when the owning organisation is already set" do - let(:case_log) { FactoryBot.create(:case_log, owning_organisation: user_2.organisation) } + let(:lettings_log) { FactoryBot.create(:lettings_log, owning_organisation: user_2.organisation) } let(:expected_answer_options) do { "" => "Select an option", @@ -76,7 +76,7 @@ RSpec.describe Form::Setup::Questions::CreatedById, type: :model do end it "only displays users that belong to that organisation" do - expect(question.displayed_answer_options(case_log)).to eq(expected_answer_options) + expect(question.displayed_answer_options(lettings_log)).to eq(expected_answer_options) end end end diff --git a/spec/models/form/setup/questions/location_id_spec.rb b/spec/models/form/setup/questions/location_id_spec.rb index 1d544ebad..90822b41c 100644 --- a/spec/models/form/setup/questions/location_id_spec.rb +++ b/spec/models/form/setup/questions/location_id_spec.rb @@ -39,11 +39,11 @@ RSpec.describe Form::Setup::Questions::LocationId, type: :model do context "when getting available locations" do let(:scheme) { FactoryBot.create(:scheme) } - let(:case_log) { FactoryBot.create(:case_log, owning_organisation: scheme.owning_organisation, scheme:, needstype: 2) } + let(:lettings_log) { FactoryBot.create(:lettings_log, owning_organisation: scheme.owning_organisation, scheme:, needstype: 2) } context "when there are no locations" do it "the displayed_answer_options is an empty hash" do - expect(question.displayed_answer_options(case_log)).to eq({}) + expect(question.displayed_answer_options(lettings_log)).to eq({}) end end @@ -63,7 +63,7 @@ RSpec.describe Form::Setup::Questions::LocationId, type: :model do end it "the displayed_answer_options is an empty hash" do - expect(question.displayed_answer_options(case_log)).to eq({}) + expect(question.displayed_answer_options(lettings_log)).to eq({}) end end @@ -74,7 +74,7 @@ RSpec.describe Form::Setup::Questions::LocationId, type: :model do end it "the displayed_answer_options shows the locations" do - expect(question.displayed_answer_options(case_log).count).to eq(2) + expect(question.displayed_answer_options(lettings_log).count).to eq(2) end end @@ -85,7 +85,7 @@ RSpec.describe Form::Setup::Questions::LocationId, type: :model do end it "the displayed_answer_options shows the locations" do - expect(question.displayed_answer_options(case_log).count).to eq(2) + expect(question.displayed_answer_options(lettings_log).count).to eq(2) end end @@ -96,7 +96,7 @@ RSpec.describe Form::Setup::Questions::LocationId, type: :model do end it "the displayed_answer_options shows the active location" do - expect(question.displayed_answer_options(case_log).count).to eq(1) + expect(question.displayed_answer_options(lettings_log).count).to eq(1) end end end diff --git a/spec/models/form/setup/questions/owning_organisation_id_spec.rb b/spec/models/form/setup/questions/owning_organisation_id_spec.rb index c9734e7a1..8c74a169d 100644 --- a/spec/models/form/setup/questions/owning_organisation_id_spec.rb +++ b/spec/models/form/setup/questions/owning_organisation_id_spec.rb @@ -10,7 +10,7 @@ RSpec.describe Form::Setup::Questions::OwningOrganisationId, type: :model do let(:form) { instance_double(Form) } let!(:organisation_1) { FactoryBot.create(:organisation, name: "first test org") } let!(:organisation_2) { FactoryBot.create(:organisation, name: "second test org") } - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } let(:expected_answer_options) do { "" => "Select an option", @@ -69,13 +69,13 @@ RSpec.describe Form::Setup::Questions::OwningOrganisationId, type: :model do context "when the question is not answered" do it "returns 'select an option' as selected answer" do - case_log.update!(owning_organisation: nil) - answers = question.displayed_answer_options(case_log).map { |key, value| OpenStruct.new(id: key, name: nil, resource: value) } + lettings_log.update!(owning_organisation: nil) + answers = question.displayed_answer_options(lettings_log).map { |key, value| OpenStruct.new(id: key, name: nil, resource: value) } answers.each do |answer| if answer.resource == "Select an option" - expect(question.answer_selected?(case_log, answer)).to eq(true) + expect(question.answer_selected?(lettings_log, answer)).to eq(true) else - expect(question.answer_selected?(case_log, answer)).to eq(false) + expect(question.answer_selected?(lettings_log, answer)).to eq(false) end end end @@ -83,13 +83,13 @@ RSpec.describe Form::Setup::Questions::OwningOrganisationId, type: :model do context "when the question is answered" do it "returns 'select an option' as selected answer" do - case_log.update!(owning_organisation: organisation_1) - answers = question.displayed_answer_options(case_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } + lettings_log.update!(owning_organisation: organisation_1) + answers = question.displayed_answer_options(lettings_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } answers.each do |answer| if answer.id == organisation_1.id - expect(question.answer_selected?(case_log, answer)).to eq(true) + expect(question.answer_selected?(lettings_log, answer)).to eq(true) else - expect(question.answer_selected?(case_log, answer)).to eq(false) + expect(question.answer_selected?(lettings_log, answer)).to eq(false) end end end diff --git a/spec/models/form/setup/questions/property_reference_spec.rb b/spec/models/form/setup/questions/property_reference_spec.rb index 7242bf984..6e9f8b087 100644 --- a/spec/models/form/setup/questions/property_reference_spec.rb +++ b/spec/models/form/setup/questions/property_reference_spec.rb @@ -6,7 +6,7 @@ RSpec.describe Form::Setup::Questions::PropertyReference, type: :model do let(:question_id) { nil } let(:question_definition) { nil } let(:page) { instance_double(Form::Page) } - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } it "has correct page" do expect(question.page).to eq(page) @@ -41,6 +41,6 @@ RSpec.describe Form::Setup::Questions::PropertyReference, type: :model do end it "returns false for answer_selected" do - expect(question.answer_selected?(case_log, {})).to be false + expect(question.answer_selected?(lettings_log, {})).to be false end end diff --git a/spec/models/form/setup/questions/scheme_id_spec.rb b/spec/models/form/setup/questions/scheme_id_spec.rb index 12dc01fb1..29cfa9d0c 100644 --- a/spec/models/form/setup/questions/scheme_id_spec.rb +++ b/spec/models/form/setup/questions/scheme_id_spec.rb @@ -44,7 +44,7 @@ RSpec.describe Form::Setup::Questions::SchemeId, type: :model do let(:organisation_2) { FactoryBot.create(:organisation) } let(:user) { FactoryBot.create(:user, organisation:) } let(:scheme) { FactoryBot.create(:scheme, owning_organisation: organisation, managing_organisation: organisation) } - let(:case_log) { FactoryBot.create(:case_log, created_by: user, needstype: 2) } + let(:lettings_log) { FactoryBot.create(:lettings_log, created_by: user, needstype: 2) } before do FactoryBot.create(:scheme, owning_organisation: organisation_2) @@ -57,25 +57,25 @@ RSpec.describe Form::Setup::Questions::SchemeId, type: :model do it "has the correct answer_options based on the schemes the user's organisation owns or manages" do expected_answer = { "" => "Select an option", scheme.id.to_s => scheme } - expect(question.displayed_answer_options(case_log)).to eq(expected_answer) + expect(question.displayed_answer_options(lettings_log)).to eq(expected_answer) end end context "when there are no schemes with locations" do it "returns a hash with one empty option" do - expect(question.displayed_answer_options(case_log)).to eq({ "" => "Select an option" }) + expect(question.displayed_answer_options(lettings_log)).to eq({ "" => "Select an option" }) end end context "when the question is not answered" do it "returns 'select an option' as selected answer" do - case_log.update!(scheme: nil) - answers = question.displayed_answer_options(case_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } + lettings_log.update!(scheme: nil) + answers = question.displayed_answer_options(lettings_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } answers.each do |answer| if answer.resource == "Select an option" - expect(question.answer_selected?(case_log, answer)).to eq(true) + expect(question.answer_selected?(lettings_log, answer)).to eq(true) else - expect(question.answer_selected?(case_log, answer)).to eq(false) + expect(question.answer_selected?(lettings_log, answer)).to eq(false) end end end @@ -83,13 +83,13 @@ RSpec.describe Form::Setup::Questions::SchemeId, type: :model do context "when the question is answered" do it "returns 'select an option' as selected answer" do - case_log.update!(scheme:) - answers = question.displayed_answer_options(case_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } + lettings_log.update!(scheme:) + answers = question.displayed_answer_options(lettings_log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } answers.each do |answer| if answer.id == scheme.id - expect(question.answer_selected?(case_log, answer)).to eq(true) + expect(question.answer_selected?(lettings_log, answer)).to eq(true) else - expect(question.answer_selected?(case_log, answer)).to eq(false) + expect(question.answer_selected?(lettings_log, answer)).to eq(false) end end end diff --git a/spec/models/form/subsection_spec.rb b/spec/models/form/subsection_spec.rb index 95208b8e5..a119a212e 100644 --- a/spec/models/form/subsection_spec.rb +++ b/spec/models/form/subsection_spec.rb @@ -4,8 +4,8 @@ require_relative "../../request_helper" RSpec.describe Form::Subsection, type: :model do subject(:subsection) { described_class.new(subsection_id, subsection_definition, section) } - let(:case_log) { FactoryBot.build(:case_log) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.build(:lettings_log) } + let(:form) { lettings_log.form } let(:section_id) { "household" } let(:section_definition) { form.form_definition["sections"][section_id] } let(:section) { Form::Section.new(section_id, section_definition, form) } @@ -34,27 +34,27 @@ RSpec.describe Form::Subsection, type: :model do expect(subsection.questions.map(&:id)).to eq(expected_questions) end - context "with an in progress case log" do - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + context "with an in progress lettings log" do + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } it "has a status" do - expect(subsection.status(case_log)).to eq(:in_progress) + expect(subsection.status(lettings_log)).to eq(:in_progress) end it "has a completed status for completed subsection" do subsection_definition = section_definition["subsections"]["household_needs"] subsection = described_class.new("household_needs", subsection_definition, section) - case_log.armedforces = 3 - case_log.illness = 1 - case_log.housingneeds_a = 1 - case_log.la = "E06000014" - case_log.illness_type_1 = 1 - expect(subsection.status(case_log)).to eq(:completed) + lettings_log.armedforces = 3 + lettings_log.illness = 1 + lettings_log.housingneeds_a = 1 + lettings_log.la = "E06000014" + lettings_log.illness_type_1 = 1 + expect(subsection.status(lettings_log)).to eq(:completed) end it "has status helpers" do - expect(subsection.is_incomplete?(case_log)).to be(true) - expect(subsection.is_started?(case_log)).to be(true) + expect(subsection.is_incomplete?(lettings_log)).to be(true) + expect(subsection.is_started?(lettings_log)).to be(true) end context "with optional fields" do @@ -67,33 +67,33 @@ RSpec.describe Form::Subsection, type: :model do let(:subsection_definition) { section_definition["subsections"][subsection_id] } it "has a started status even if only an optional field has been answered" do - case_log.postcode_known = 0 - expect(subsection.is_started?(case_log)).to be(true) + lettings_log.postcode_known = 0 + expect(subsection.is_started?(lettings_log)).to be(true) end end it "has question helpers for the number of applicable questions" do expected_questions = %w[tenancycode age1 sex1 ecstat1 hhmemb ecstat2 propcode] - expect(subsection.applicable_questions(case_log).map(&:id)).to eq(expected_questions) + expect(subsection.applicable_questions(lettings_log).map(&:id)).to eq(expected_questions) end end - context "with a completed case log" do - let(:case_log) { FactoryBot.build(:case_log, :completed) } + context "with a completed lettings log" do + let(:lettings_log) { FactoryBot.build(:lettings_log, :completed) } it "has a status" do - expect(subsection.status(case_log)).to eq(:completed) + expect(subsection.status(lettings_log)).to eq(:completed) end it "has a status when optional fields are not filled" do - case_log.update!({ propcode: nil }) - case_log.reload - expect(subsection.status(case_log)).to eq(:completed) + lettings_log.update!({ propcode: nil }) + lettings_log.reload + expect(subsection.status(lettings_log)).to eq(:completed) end it "has status helpers" do - expect(subsection.is_incomplete?(case_log)).to be(false) - expect(subsection.is_started?(case_log)).to be(true) + expect(subsection.is_incomplete?(lettings_log)).to be(false) + expect(subsection.is_started?(lettings_log)).to be(true) end end end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 4b6b66672..7f1d4cb81 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -2,34 +2,34 @@ require "rails_helper" RSpec.describe Form, type: :model do let(:user) { FactoryBot.build(:user) } - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } - let(:form) { case_log.form } - let(:completed_case_log) { FactoryBot.build(:case_log, :completed) } - let(:conditional_section_complete_case_log) { FactoryBot.build(:case_log, :conditional_section_complete) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } + let(:form) { lettings_log.form } + let(:completed_lettings_log) { FactoryBot.build(:lettings_log, :completed) } + let(:conditional_section_complete_lettings_log) { FactoryBot.build(:lettings_log, :conditional_section_complete) } describe ".next_page" do let(:previous_page) { form.get_page("person_1_age") } let(:value_check_previous_page) { form.get_page("net_income_value_check") } it "returns the next page given the previous" do - expect(form.next_page(previous_page, case_log, user)).to eq("person_1_gender") + expect(form.next_page(previous_page, lettings_log, user)).to eq("person_1_gender") end context "when the current page is a value check page" do before do - case_log.incfreq = 1 - case_log.earnings = 140 - case_log.ecstat1 = 1 + lettings_log.incfreq = 1 + lettings_log.earnings = 140 + lettings_log.ecstat1 = 1 end it "returns the previous page if answer is `No` and the page is routed to" do - case_log.net_income_value_check = 1 - expect(form.next_page(value_check_previous_page, case_log, user)).to eq("net_income") + lettings_log.net_income_value_check = 1 + expect(form.next_page(value_check_previous_page, lettings_log, user)).to eq("net_income") end it "returns the next page if answer is `Yes` answer and the page is routed to" do - case_log.net_income_value_check = 0 - expect(form.next_page(value_check_previous_page, case_log, user)).to eq("net_income_uc_proportion") + lettings_log.net_income_value_check = 0 + expect(form.next_page(value_check_previous_page, lettings_log, user)).to eq("net_income_uc_proportion") end end end @@ -40,17 +40,17 @@ RSpec.describe Form, type: :model do let!(:page_ids) { subsection.pages.map(&:id) } before do - case_log.preg_occ = 2 + lettings_log.preg_occ = 2 end it "returns the previous page if the page is routed to" do page_index = page_ids.index("conditional_question_no_second_page") - expect(form.previous_page(page_ids, page_index, case_log, user)).to eq("conditional_question_no_page") + expect(form.previous_page(page_ids, page_index, lettings_log, user)).to eq("conditional_question_no_page") end it "returns the page before the previous one if the previous page is not routed to" do page_index = page_ids.index("conditional_question_no_page") - expect(form.previous_page(page_ids, page_index, case_log, user)).to eq("conditional_question") + expect(form.previous_page(page_ids, page_index, lettings_log, user)).to eq("conditional_question") end end end @@ -61,147 +61,147 @@ RSpec.describe Form, type: :model do let(:previous_conditional_page) { form.get_page("conditional_question") } it "returns a correct page path if there is no conditional routing" do - expect(form.next_page_redirect_path(previous_page, case_log, user)).to eq("case_log_net_income_uc_proportion_path") + expect(form.next_page_redirect_path(previous_page, lettings_log, user)).to eq("lettings_log_net_income_uc_proportion_path") end it "returns a check answers page if previous page is the last page" do - expect(form.next_page_redirect_path(last_previous_page, case_log, user)).to eq("case_log_income_and_benefits_check_answers_path") + expect(form.next_page_redirect_path(last_previous_page, lettings_log, user)).to eq("lettings_log_income_and_benefits_check_answers_path") end it "returns a correct page path if there is conditional routing" do - case_log["preg_occ"] = 2 - expect(form.next_page_redirect_path(previous_conditional_page, case_log, user)).to eq("case_log_conditional_question_no_page_path") + lettings_log["preg_occ"] = 2 + expect(form.next_page_redirect_path(previous_conditional_page, lettings_log, user)).to eq("lettings_log_conditional_question_no_page_path") end end describe "next_incomplete_section_redirect_path" do - let(:case_log) { FactoryBot.build(:case_log, :in_progress) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) } let(:subsection) { form.get_subsection("household_characteristics") } let(:later_subsection) { form.get_subsection("declaration") } context "when a user is on the check answers page for a subsection" do - def answer_household_needs(case_log) - case_log.armedforces = 3 - case_log.illness = 0 - case_log.housingneeds_a = 1 - case_log.la = "E06000014" - case_log.illness_type_1 = 1 + def answer_household_needs(lettings_log) + lettings_log.armedforces = 3 + lettings_log.illness = 0 + lettings_log.housingneeds_a = 1 + lettings_log.la = "E06000014" + lettings_log.illness_type_1 = 1 end - def answer_tenancy_information(case_log) - case_log.tenancycode = "1234" + def answer_tenancy_information(lettings_log) + lettings_log.tenancycode = "1234" end - def answer_property_information(case_log) - case_log.postcode_known = 1 - case_log.wchair = "No" + def answer_property_information(lettings_log) + lettings_log.postcode_known = 1 + lettings_log.wchair = "No" end - def answer_conditional_question(case_log) - case_log.preg_occ = "No" - case_log.cbl = "No" + def answer_conditional_question(lettings_log) + lettings_log.preg_occ = "No" + lettings_log.cbl = "No" end - def answer_income_and_benefits(case_log) - case_log.earnings = 30_000 - case_log.incfreq = 3 - case_log.benefits = "Some" - case_log.hb = "Tenant prefers not to say" + def answer_income_and_benefits(lettings_log) + lettings_log.earnings = 30_000 + lettings_log.incfreq = 3 + lettings_log.benefits = "Some" + lettings_log.hb = "Tenant prefers not to say" end - def answer_rent_and_charges(case_log) - case_log.period = "Every 2 weeks" - case_log.brent = 650 - case_log.scharge = 0 - case_log.pscharge = 0 - case_log.supcharg = 0 - case_log.tcharge = 650 + def answer_rent_and_charges(lettings_log) + lettings_log.period = "Every 2 weeks" + lettings_log.brent = 650 + lettings_log.scharge = 0 + lettings_log.pscharge = 0 + lettings_log.supcharg = 0 + lettings_log.tcharge = 650 end - def answer_local_authority(case_log) - case_log.layear = "1 year but under 2 years" - case_log.waityear = "Less than 1 year" - case_log.postcode_full = "NW1 5TY" - case_log.reason = "Permanently decanted from another property owned by this landlord" - case_log.ppostcode_full = "SE2 6RT" - case_log.mrcdate = Time.zone.parse("03/11/2019") + def answer_local_authority(lettings_log) + lettings_log.layear = "1 year but under 2 years" + lettings_log.waityear = "Less than 1 year" + lettings_log.postcode_full = "NW1 5TY" + lettings_log.reason = "Permanently decanted from another property owned by this landlord" + lettings_log.ppostcode_full = "SE2 6RT" + lettings_log.mrcdate = Time.zone.parse("03/11/2019") end before do - case_log.tenancycode = "123" - case_log.age1 = 35 - case_log.sex1 = "M" - case_log.ecstat1 = 0 - case_log.hhmemb = 2 - case_log.relat2 = "P" - case_log.sex2 = "F" - case_log.ecstat2 = 1 - case_log.needstype = 1 + lettings_log.tenancycode = "123" + lettings_log.age1 = 35 + lettings_log.sex1 = "M" + lettings_log.ecstat1 = 0 + lettings_log.hhmemb = 2 + lettings_log.relat2 = "P" + lettings_log.sex2 = "F" + lettings_log.ecstat2 = 1 + lettings_log.needstype = 1 end it "returns the first page of the next incomplete subsection if the subsection is not in progress" do - expect(form.next_incomplete_section_redirect_path(subsection, case_log)).to eq("armed-forces") + expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("armed-forces") end it "returns the check answers page of the next incomplete subsection if the subsection is already in progress" do - case_log.armedforces = "No" - case_log.illness = "No" - expect(form.next_incomplete_section_redirect_path(subsection, case_log)).to eq("household-needs/check-answers") + lettings_log.armedforces = "No" + lettings_log.illness = "No" + expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("household-needs/check-answers") end it "returns the first page of the next incomplete subsection (skipping completed subsections, and pages that are not routed to)" do - answer_household_needs(case_log) - expect(form.next_incomplete_section_redirect_path(subsection, case_log)).to eq("property-postcode") + answer_household_needs(lettings_log) + expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("property-postcode") end - it "returns the declaration section for a completed case log" do - expect(form.next_incomplete_section_redirect_path(subsection, completed_case_log)).to eq("declaration") + it "returns the declaration section for a completed lettings log" do + expect(form.next_incomplete_section_redirect_path(subsection, completed_lettings_log)).to eq("declaration") end it "returns the next incomplete section by cycling back around if next subsections are completed" do - expect(form.next_incomplete_section_redirect_path(later_subsection, case_log)).to eq("armed-forces") + expect(form.next_incomplete_section_redirect_path(later_subsection, lettings_log)).to eq("armed-forces") end - it "returns the declaration section if all sections are complete but the case log is in progress" do - answer_household_needs(case_log) - answer_tenancy_information(case_log) - answer_property_information(case_log) - answer_conditional_question(case_log) - answer_income_and_benefits(case_log) - answer_rent_and_charges(case_log) - answer_local_authority(case_log) + it "returns the declaration section if all sections are complete but the lettings log is in progress" do + answer_household_needs(lettings_log) + answer_tenancy_information(lettings_log) + answer_property_information(lettings_log) + answer_conditional_question(lettings_log) + answer_income_and_benefits(lettings_log) + answer_rent_and_charges(lettings_log) + answer_local_authority(lettings_log) - expect(form.next_incomplete_section_redirect_path(subsection, case_log)).to eq("declaration") + expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("declaration") end end end describe "invalidated_page_questions" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, needstype: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) } let(:expected_invalid) { %w[scheme_id retirement_value_check condition_effects cbl conditional_question_no_second_question net_income_value_check dependent_question offered layear declaration] } context "when dependencies are not met" do it "returns an array of question keys whose pages conditions are not met" do - expect(form.invalidated_page_questions(case_log).map(&:id).uniq).to eq(expected_invalid) + expect(form.invalidated_page_questions(lettings_log).map(&:id).uniq).to eq(expected_invalid) end end context "with two pages having the same question and only one has dependencies met" do it "returns an array of question keys whose pages conditions are not met" do - case_log["preg_occ"] = "No" - expect(form.invalidated_page_questions(case_log).map(&:id).uniq).to eq(expected_invalid) + lettings_log["preg_occ"] = "No" + expect(form.invalidated_page_questions(lettings_log).map(&:id).uniq).to eq(expected_invalid) end end context "when a question is marked as `derived` and `depends_on: false`" do - let(:case_log) { FactoryBot.build(:case_log, :in_progress, startdate: Time.utc(2022, 4, 2, 10, 36, 49)) } + let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress, startdate: Time.utc(2022, 4, 2, 10, 36, 49)) } it "does not count it's questions as invalidated" do - expect(form.enabled_page_questions(case_log).map(&:id).uniq).to include("tshortfall_known") + expect(form.enabled_page_questions(lettings_log).map(&:id).uniq).to include("tshortfall_known") end it "does not route to the page" do - expect(form.invalidated_pages(case_log).map(&:id)).to include("outstanding_amount_known") + expect(form.invalidated_pages(lettings_log).map(&:id)).to include("outstanding_amount_known") end end end diff --git a/spec/models/case_log_spec.rb b/spec/models/lettings_log_spec.rb similarity index 55% rename from spec/models/case_log_spec.rb rename to spec/models/lettings_log_spec.rb index eadf2d6b0..d1febd01c 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1,37 +1,37 @@ require "rails_helper" -RSpec.describe CaseLog do +RSpec.describe LettingsLog do let(:owning_organisation) { FactoryBot.create(:organisation) } let(:different_managing_organisation) { FactoryBot.create(:organisation) } let(:created_by_user) { FactoryBot.create(:user) } describe "#form" do - let(:case_log) { FactoryBot.build(:case_log, created_by: created_by_user) } - let(:case_log_2) { FactoryBot.build(:case_log, startdate: Time.zone.local(2022, 1, 1), created_by: created_by_user) } - let(:case_log_year_2) { FactoryBot.build(:case_log, startdate: Time.zone.local(2023, 5, 1), created_by: created_by_user) } + let(:lettings_log) { FactoryBot.build(:lettings_log, created_by: created_by_user) } + let(:lettings_log_2) { FactoryBot.build(:lettings_log, startdate: Time.zone.local(2022, 1, 1), created_by: created_by_user) } + let(:lettings_log_year_2) { FactoryBot.build(:lettings_log, startdate: Time.zone.local(2023, 5, 1), created_by: created_by_user) } it "has returns the correct form based on the start date" do - expect(case_log.form_name).to be_nil - expect(case_log.form).to be_a(Form) - expect(case_log_2.form_name).to eq("2021_2022") - expect(case_log_2.form).to be_a(Form) - expect(case_log_year_2.form_name).to eq("2023_2024") - expect(case_log_year_2.form).to be_a(Form) + expect(lettings_log.form_name).to be_nil + expect(lettings_log.form).to be_a(Form) + expect(lettings_log_2.form_name).to eq("2021_2022") + expect(lettings_log_2.form).to be_a(Form) + expect(lettings_log_year_2.form_name).to eq("2023_2024") + expect(lettings_log_year_2.form).to be_a(Form) end context "when a date outside the collection window is passed" do - let(:case_log) { FactoryBot.build(:case_log, startdate: Time.zone.local(2015, 1, 1), created_by: created_by_user) } + let(:lettings_log) { FactoryBot.build(:lettings_log, startdate: Time.zone.local(2015, 1, 1), created_by: created_by_user) } it "returns the first form" do - expect(case_log.form).to be_a(Form) - expect(case_log.form.start_date.year).to eq(2021) + expect(lettings_log.form).to be_a(Form) + expect(lettings_log.form.start_date.year).to eq(2021) end end end describe "#new" do context "when creating a record" do - let(:case_log) do + let(:lettings_log) do described_class.create( owning_organisation:, managing_organisation: owning_organisation, @@ -40,18 +40,18 @@ RSpec.describe CaseLog do end it "attaches the correct custom validator" do - expect(case_log._validators.values.flatten.map(&:class)) - .to include(CaseLogValidator) + expect(lettings_log._validators.values.flatten.map(&:class)) + .to include(LettingsLogValidator) end end end describe "#update" do - let(:case_log) { FactoryBot.create(:case_log, created_by: created_by_user) } - let(:validator) { case_log._validators[nil].first } + let(:lettings_log) { FactoryBot.create(:lettings_log, created_by: created_by_user) } + let(:validator) { lettings_log._validators[nil].first } after do - case_log.update(age1: 25) + lettings_log.update(age1: 25) end it "validates start date" do @@ -139,61 +139,57 @@ RSpec.describe CaseLog do expect(validator).to receive(:validate_rsnvac) end - it "validates accessibility requirements" do - expect(validator).to receive(:validate_accessibility_requirements) - end - it "validates referral" do expect(validator).to receive(:validate_referral) end end describe "status" do - let!(:empty_case_log) { FactoryBot.create(:case_log) } - let!(:in_progress_case_log) { FactoryBot.create(:case_log, :in_progress) } - let!(:completed_case_log) { FactoryBot.create(:case_log, :completed) } + let!(:empty_lettings_log) { FactoryBot.create(:lettings_log) } + let!(:in_progress_lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } + let!(:completed_lettings_log) { FactoryBot.create(:lettings_log, :completed) } - it "is set to not started for an empty case log" do - expect(empty_case_log.not_started?).to be(true) - expect(empty_case_log.in_progress?).to be(false) - expect(empty_case_log.completed?).to be(false) + it "is set to not started for an empty lettings log" do + expect(empty_lettings_log.not_started?).to be(true) + expect(empty_lettings_log.in_progress?).to be(false) + expect(empty_lettings_log.completed?).to be(false) end - it "is set to in progress for a started case log" do - expect(in_progress_case_log.in_progress?).to be(true) - expect(in_progress_case_log.not_started?).to be(false) - expect(in_progress_case_log.completed?).to be(false) + it "is set to in progress for a started lettings log" do + expect(in_progress_lettings_log.in_progress?).to be(true) + expect(in_progress_lettings_log.not_started?).to be(false) + expect(in_progress_lettings_log.completed?).to be(false) end - it "is set to completed for a completed case log" do - expect(completed_case_log.in_progress?).to be(false) - expect(completed_case_log.not_started?).to be(false) - expect(completed_case_log.completed?).to be(true) + it "is set to completed for a completed lettings log" do + expect(completed_lettings_log.in_progress?).to be(false) + expect(completed_lettings_log.not_started?).to be(false) + expect(completed_lettings_log.completed?).to be(true) end end describe "weekly_net_income" do let(:net_income) { 5000 } - let(:case_log) { FactoryBot.build(:case_log, earnings: net_income) } + let(:lettings_log) { FactoryBot.build(:lettings_log, earnings: net_income) } it "returns input income if frequency is already weekly" do - case_log.incfreq = 1 - expect(case_log.weekly_net_income).to eq(net_income) + lettings_log.incfreq = 1 + expect(lettings_log.weekly_net_income).to eq(net_income) end it "calculates the correct weekly income from monthly income" do - case_log.incfreq = 2 - expect(case_log.weekly_net_income).to eq(1154) + lettings_log.incfreq = 2 + expect(lettings_log.weekly_net_income).to eq(1154) end it "calculates the correct weekly income from yearly income" do - case_log.incfreq = 3 - expect(case_log.weekly_net_income).to eq(96) + lettings_log.incfreq = 3 + expect(lettings_log.weekly_net_income).to eq(96) end end describe "derived variables" do - let!(:case_log) do + let!(:lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -212,170 +208,170 @@ RSpec.describe CaseLog do end it "correctly derives and saves partial and full major repairs date" do - record_from_db = ActiveRecord::Base.connection.execute("select mrcdate from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select mrcdate from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["mrcdate"].day).to eq(4) expect(record_from_db["mrcdate"].month).to eq(5) expect(record_from_db["mrcdate"].year).to eq(2021) end it "correctly derives and saves partial and full major property void date" do - record_from_db = ActiveRecord::Base.connection.execute("select voiddate from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select voiddate from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["voiddate"].day).to eq(3) expect(record_from_db["voiddate"].month).to eq(3) expect(record_from_db["voiddate"].year).to eq(2021) end it "correctly derives and saves incref" do - record_from_db = ActiveRecord::Base.connection.execute("select incref from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select incref from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["incref"]).to eq(1) end it "correctly derives and saves renttype" do - record_from_db = ActiveRecord::Base.connection.execute("select renttype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.renttype).to eq(3) + record_from_db = ActiveRecord::Base.connection.execute("select renttype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.renttype).to eq(3) expect(record_from_db["renttype"]).to eq(3) end context "when deriving lettype" do context "when the owning organisation is a PRP" do - before { case_log.owning_organisation.update!(provider_type: 2) } + before { lettings_log.owning_organisation.update!(provider_type: 2) } context "when the rent type is intermediate rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 4, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(10) + lettings_log.update!(rent_type: 4, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(10) expect(record_from_db["lettype"]).to eq(10) end end context "when the rent type is intermediate rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 4, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(9) + lettings_log.update!(rent_type: 4, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(9) expect(record_from_db["lettype"]).to eq(9) end end context "when the rent type is affordable rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 2, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(6) + lettings_log.update!(rent_type: 2, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(6) expect(record_from_db["lettype"]).to eq(6) end end context "when the rent type is affordable rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 2, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(5) + lettings_log.update!(rent_type: 2, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(5) expect(record_from_db["lettype"]).to eq(5) end end context "when the rent type is social rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 0, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(2) + lettings_log.update!(rent_type: 0, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(2) expect(record_from_db["lettype"]).to eq(2) end end context "when the rent type is social rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 0, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(1) + lettings_log.update!(rent_type: 0, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(1) expect(record_from_db["lettype"]).to eq(1) end end context "when the tenant is not in receipt of applicable benefits" do it "correctly resets total shortfall" do - case_log.update!(hbrentshortfall: 2, wtshortfall: 100, hb: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to be_nil + lettings_log.update!(hbrentshortfall: 2, wtshortfall: 100, hb: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to be_nil expect(record_from_db["wtshortfall"]).to be_nil end end context "when rent is paid bi-weekly" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 100, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(50.0) + lettings_log.update!(brent: 100, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(50.0) expect(record_from_db["wrent"]).to eq(50.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 70, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(35.0) + lettings_log.update!(scharge: 70, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(35.0) expect(record_from_db["wscharge"]).to eq(35.0) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 60, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(30.0) + lettings_log.update!(pscharge: 60, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(30.0) expect(record_from_db["wpschrge"]).to eq(30.0) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 80, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(40.0) + lettings_log.update!(supcharg: 80, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(40.0) expect(record_from_db["wsupchrg"]).to eq(40.0) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 100, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(50.0) + lettings_log.update!(tcharge: 100, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(50.0) expect(record_from_db["wtcharge"]).to eq(50.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(50.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(50.0) expect(record_from_db["wtshortfall"]).to eq(50.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(50.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(50.0) expect(record_from_db["wtshortfall"]).to eq(50.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(50.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 100, period: 2, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(50.0) expect(record_from_db["wtshortfall"]).to eq(50.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 60.12, pscharge: 50.13, scharge: 60.98, brent: 60.97, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(30.06) - expect(case_log.wpschrge).to eq(25.06) - expect(case_log.wscharge).to eq(30.49) - expect(case_log.wrent).to eq(30.49) - expect(case_log.wtcharge).to eq(116.1) + lettings_log.update!(supcharg: 60.12, pscharge: 50.13, scharge: 60.98, brent: 60.97, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(30.06) + expect(lettings_log.wpschrge).to eq(25.06) + expect(lettings_log.wscharge).to eq(30.49) + expect(lettings_log.wrent).to eq(30.49) + expect(lettings_log.wtcharge).to eq(116.1) expect(record_from_db["wsupchrg"]).to eq(30.06) expect(record_from_db["wpschrge"]).to eq(25.06) expect(record_from_db["wscharge"]).to eq(30.49) @@ -386,77 +382,77 @@ RSpec.describe CaseLog do context "when rent is paid every 4 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(30.0) + lettings_log.update!(brent: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(30.0) expect(record_from_db["wrent"]).to eq(30.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(30.0) + lettings_log.update!(scharge: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(30.0) expect(record_from_db["wscharge"]).to eq(30.0) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(30.0) + lettings_log.update!(pscharge: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(30.0) expect(record_from_db["wpschrge"]).to eq(30.0) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(30.0) + lettings_log.update!(supcharg: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(30.0) expect(record_from_db["wsupchrg"]).to eq(30.0) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(30.0) + lettings_log.update!(tcharge: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(30.0) expect(record_from_db["wtcharge"]).to eq(30.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 120, period: 3, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(25.03) - expect(case_log.wpschrge).to eq(25.03) - expect(case_log.wscharge).to eq(25.24) - expect(case_log.wrent).to eq(25.24) - expect(case_log.wtcharge).to eq(100.55) + lettings_log.update!(supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(25.03) + expect(lettings_log.wpschrge).to eq(25.03) + expect(lettings_log.wscharge).to eq(25.24) + expect(lettings_log.wrent).to eq(25.24) + expect(lettings_log.wtcharge).to eq(100.55) expect(record_from_db["wsupchrg"]).to eq(25.03) expect(record_from_db["wpschrge"]).to eq(25.03) expect(record_from_db["wscharge"]).to eq(25.24) @@ -467,77 +463,77 @@ RSpec.describe CaseLog do context "when rent is paid every calendar month" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(30.0) + lettings_log.update!(brent: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(30.0) expect(record_from_db["wrent"]).to eq(30.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(30.0) + lettings_log.update!(scharge: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(30.0) expect(record_from_db["wscharge"]).to eq(30.0) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(30.0) + lettings_log.update!(pscharge: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(30.0) expect(record_from_db["wpschrge"]).to eq(30.0) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(30.0) + lettings_log.update!(supcharg: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(30.0) expect(record_from_db["wsupchrg"]).to eq(30.0) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(30.0) + lettings_log.update!(tcharge: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(30.0) expect(record_from_db["wtcharge"]).to eq(30.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(30.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 4, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(30.0) expect(record_from_db["wtshortfall"]).to eq(30.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(23.10) - expect(case_log.wpschrge).to eq(23.11) - expect(case_log.wscharge).to eq(23.30) - expect(case_log.wrent).to eq(23.30) - expect(case_log.wtcharge).to eq(92.82) + lettings_log.update!(supcharg: 100.12, pscharge: 100.13, scharge: 100.98, brent: 100.97, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(23.10) + expect(lettings_log.wpschrge).to eq(23.11) + expect(lettings_log.wscharge).to eq(23.30) + expect(lettings_log.wrent).to eq(23.30) + expect(lettings_log.wtcharge).to eq(92.82) expect(record_from_db["wsupchrg"]).to eq(23.10) expect(record_from_db["wpschrge"]).to eq(23.11) expect(record_from_db["wscharge"]).to eq(23.30) @@ -548,77 +544,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 50 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(125.0) + lettings_log.update!(brent: 130, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(125.0) expect(record_from_db["wrent"]).to eq(125.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 20, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(19.23) + lettings_log.update!(scharge: 20, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(19.23) expect(record_from_db["wscharge"]).to eq(19.23) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 20, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(19.23) + lettings_log.update!(pscharge: 20, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(19.23) expect(record_from_db["wpschrge"]).to eq(19.23) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 20, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(19.23) + lettings_log.update!(supcharg: 20, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(19.23) expect(record_from_db["wsupchrg"]).to eq(19.23) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(125.0) + lettings_log.update!(tcharge: 130, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(125.0) expect(record_from_db["wtcharge"]).to eq(125.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(125.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(125.0) expect(record_from_db["wtshortfall"]).to eq(125.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(125.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(125.0) expect(record_from_db["wtshortfall"]).to eq(125.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(125.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 5, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(125.0) expect(record_from_db["wtshortfall"]).to eq(125.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 20.12, pscharge: 20.13, scharge: 20.98, brent: 100.97, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(19.35) - expect(case_log.wpschrge).to eq(19.36) - expect(case_log.wscharge).to eq(20.17) - expect(case_log.wrent).to eq(97.09) - expect(case_log.wtcharge).to eq(155.96) + lettings_log.update!(supcharg: 20.12, pscharge: 20.13, scharge: 20.98, brent: 100.97, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(19.35) + expect(lettings_log.wpschrge).to eq(19.36) + expect(lettings_log.wscharge).to eq(20.17) + expect(lettings_log.wrent).to eq(97.09) + expect(lettings_log.wtcharge).to eq(155.96) expect(record_from_db["wsupchrg"]).to eq(19.35) expect(record_from_db["wpschrge"]).to eq(19.36) expect(record_from_db["wscharge"]).to eq(20.17) @@ -629,77 +625,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 49 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(122.5) + lettings_log.update!(brent: 130, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(122.5) expect(record_from_db["wrent"]).to eq(122.5) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 30, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(28.27) + lettings_log.update!(scharge: 30, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(28.27) expect(record_from_db["wscharge"]).to eq(28.27) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 30, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(28.27) + lettings_log.update!(pscharge: 30, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(28.27) expect(record_from_db["wpschrge"]).to eq(28.27) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 30, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(28.27) + lettings_log.update!(supcharg: 30, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(28.27) expect(record_from_db["wsupchrg"]).to eq(28.27) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(122.5) + lettings_log.update!(tcharge: 130, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(122.5) expect(record_from_db["wtcharge"]).to eq(122.5) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(122.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(122.5) expect(record_from_db["wtshortfall"]).to eq(122.5) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(122.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(122.5) expect(record_from_db["wtshortfall"]).to eq(122.5) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(122.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 6, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(122.5) expect(record_from_db["wtshortfall"]).to eq(122.5) end end end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(28.38) - expect(case_log.wpschrge).to eq(28.39) - expect(case_log.wscharge).to eq(29.19) - expect(case_log.wrent).to eq(95.14) - expect(case_log.wtcharge).to eq(181.11) + lettings_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(28.38) + expect(lettings_log.wpschrge).to eq(28.39) + expect(lettings_log.wscharge).to eq(29.19) + expect(lettings_log.wrent).to eq(95.14) + expect(lettings_log.wtcharge).to eq(181.11) expect(record_from_db["wsupchrg"]).to eq(28.38) expect(record_from_db["wpschrge"]).to eq(28.39) expect(record_from_db["wscharge"]).to eq(29.19) @@ -710,77 +706,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 48 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(120.0) + lettings_log.update!(brent: 130, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(120.0) expect(record_from_db["wrent"]).to eq(120.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 30, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(27.69) + lettings_log.update!(scharge: 30, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(27.69) expect(record_from_db["wscharge"]).to eq(27.69) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 30, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(27.69) + lettings_log.update!(pscharge: 30, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(27.69) expect(record_from_db["wpschrge"]).to eq(27.69) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 30, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(27.69) + lettings_log.update!(supcharg: 30, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(27.69) expect(record_from_db["wsupchrg"]).to eq(27.69) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(120.0) + lettings_log.update!(tcharge: 130, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(120.0) expect(record_from_db["wtcharge"]).to eq(120.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(120.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(120.0) expect(record_from_db["wtshortfall"]).to eq(120.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(120.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(120.0) expect(record_from_db["wtshortfall"]).to eq(120.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(120.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 7, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(120.0) expect(record_from_db["wtshortfall"]).to eq(120.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(27.8) - expect(case_log.wpschrge).to eq(27.81) - expect(case_log.wscharge).to eq(28.6) - expect(case_log.wrent).to eq(93.20) - expect(case_log.wtcharge).to eq(177.42) + lettings_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(27.8) + expect(lettings_log.wpschrge).to eq(27.81) + expect(lettings_log.wscharge).to eq(28.6) + expect(lettings_log.wrent).to eq(93.20) + expect(lettings_log.wtcharge).to eq(177.42) expect(record_from_db["wsupchrg"]).to eq(27.8) expect(record_from_db["wpschrge"]).to eq(27.81) expect(record_from_db["wscharge"]).to eq(28.6) @@ -791,77 +787,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 47 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(117.5) + lettings_log.update!(brent: 130, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(117.5) expect(record_from_db["wrent"]).to eq(117.5) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 30, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(27.12) + lettings_log.update!(scharge: 30, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(27.12) expect(record_from_db["wscharge"]).to eq(27.12) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 30, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(27.12) + lettings_log.update!(pscharge: 30, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(27.12) expect(record_from_db["wpschrge"]).to eq(27.12) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 30, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(27.12) + lettings_log.update!(supcharg: 30, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(27.12) expect(record_from_db["wsupchrg"]).to eq(27.12) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(117.5) + lettings_log.update!(tcharge: 130, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(117.5) expect(record_from_db["wtcharge"]).to eq(117.5) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(117.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(117.5) expect(record_from_db["wtshortfall"]).to eq(117.5) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(117.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(117.5) expect(record_from_db["wtshortfall"]).to eq(117.5) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(117.5) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 8, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(117.5) expect(record_from_db["wtshortfall"]).to eq(117.5) end end end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(27.22) - expect(case_log.wpschrge).to eq(27.23) - expect(case_log.wscharge).to eq(28) - expect(case_log.wrent).to eq(91.26) - expect(case_log.wtcharge).to eq(173.72) + lettings_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(27.22) + expect(lettings_log.wpschrge).to eq(27.23) + expect(lettings_log.wscharge).to eq(28) + expect(lettings_log.wrent).to eq(91.26) + expect(lettings_log.wtcharge).to eq(173.72) expect(record_from_db["wsupchrg"]).to eq(27.22) expect(record_from_db["wpschrge"]).to eq(27.23) expect(record_from_db["wscharge"]).to eq(28) @@ -872,77 +868,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 46 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(115.0) + lettings_log.update!(brent: 130, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(115.0) expect(record_from_db["wrent"]).to eq(115.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 30, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(26.54) + lettings_log.update!(scharge: 30, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(26.54) expect(record_from_db["wscharge"]).to eq(26.54) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 30, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(26.54) + lettings_log.update!(pscharge: 30, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(26.54) expect(record_from_db["wpschrge"]).to eq(26.54) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 30, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(26.54) + lettings_log.update!(supcharg: 30, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(26.54) expect(record_from_db["wsupchrg"]).to eq(26.54) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 130, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(115.0) + lettings_log.update!(tcharge: 130, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(115.0) expect(record_from_db["wtcharge"]).to eq(115.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(115.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(115.0) expect(record_from_db["wtshortfall"]).to eq(115.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(115.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(115.0) expect(record_from_db["wtshortfall"]).to eq(115.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(115.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 9, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(115.0) expect(record_from_db["wtshortfall"]).to eq(115.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(26.64) - expect(case_log.wpschrge).to eq(26.65) - expect(case_log.wscharge).to eq(27.41) - expect(case_log.wrent).to eq(89.32) - expect(case_log.wtcharge).to eq(170.02) + lettings_log.update!(supcharg: 30.12, pscharge: 30.13, scharge: 30.98, brent: 100.97, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(26.64) + expect(lettings_log.wpschrge).to eq(26.65) + expect(lettings_log.wscharge).to eq(27.41) + expect(lettings_log.wrent).to eq(89.32) + expect(lettings_log.wtcharge).to eq(170.02) expect(record_from_db["wsupchrg"]).to eq(26.64) expect(record_from_db["wpschrge"]).to eq(26.65) expect(record_from_db["wscharge"]).to eq(27.41) @@ -953,77 +949,77 @@ RSpec.describe CaseLog do context "when rent is paid weekly for 52 weeks" do it "correctly derives and saves weekly rent" do - case_log.update!(brent: 130, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wrent).to eq(130.0) + lettings_log.update!(brent: 130, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wrent).to eq(130.0) expect(record_from_db["wrent"]).to eq(130.0) end it "correctly derives and saves weekly service charge" do - case_log.update!(scharge: 30, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wscharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wscharge).to eq(30.0) + lettings_log.update!(scharge: 30, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wscharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wscharge).to eq(30.0) expect(record_from_db["wscharge"]).to eq(30.0) end it "correctly derives and saves weekly personal service charge" do - case_log.update!(pscharge: 30, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wpschrge).to eq(30.0) + lettings_log.update!(pscharge: 30, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wpschrge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wpschrge).to eq(30.0) expect(record_from_db["wpschrge"]).to eq(30.0) end it "correctly derives and saves weekly support charge" do - case_log.update!(supcharg: 30, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(30.0) + lettings_log.update!(supcharg: 30, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wsupchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(30.0) expect(record_from_db["wsupchrg"]).to eq(30.0) end it "correctly derives and saves weekly total charge" do - case_log.update!(tcharge: 30, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtcharge).to eq(30.0) + lettings_log.update!(tcharge: 30, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtcharge).to eq(30.0) expect(record_from_db["wtcharge"]).to eq(30.0) end context "when the tenant has an outstanding amount after benefits" do context "when tenant is in receipt of housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(130.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(130.0) expect(record_from_db["wtshortfall"]).to eq(130.0) end end context "when tenant is in receipt of universal credit with housing element exc. housing benefit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(130.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(130.0) expect(record_from_db["wtshortfall"]).to eq(130.0) end end context "when tenant is in receipt of housing benefit and universal credit" do it "correctly derives and saves weekly total shortfall" do - case_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wtshortfall).to eq(130.0) + lettings_log.update!(hbrentshortfall: 1, tshortfall: 130, period: 1, hb: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wtshortfall from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wtshortfall).to eq(130.0) expect(record_from_db["wtshortfall"]).to eq(130.0) end end end it "correctly derives floats" do - case_log.update!(supcharg: 30.12, pscharge: 25.13, scharge: 30.98, brent: 100.97, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wsupchrg).to eq(30.12) - expect(case_log.wpschrge).to eq(25.13) - expect(case_log.wscharge).to eq(30.98) - expect(case_log.wrent).to eq(100.97) - expect(case_log.wtcharge).to eq(187.2) + lettings_log.update!(supcharg: 30.12, pscharge: 25.13, scharge: 30.98, brent: 100.97, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wtcharge, wsupchrg, wpschrge, wscharge, wrent from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wsupchrg).to eq(30.12) + expect(lettings_log.wpschrge).to eq(25.13) + expect(lettings_log.wscharge).to eq(30.98) + expect(lettings_log.wrent).to eq(100.97) + expect(lettings_log.wtcharge).to eq(187.2) expect(record_from_db["wsupchrg"]).to eq(30.12) expect(record_from_db["wpschrge"]).to eq(25.13) expect(record_from_db["wscharge"]).to eq(30.98) @@ -1034,58 +1030,58 @@ RSpec.describe CaseLog do end context "when the owning organisation is a LA" do - before { case_log.owning_organisation.update!(provider_type: "LA") } + before { lettings_log.owning_organisation.update!(provider_type: "LA") } context "when the rent type is intermediate rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 4, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(12) + lettings_log.update!(rent_type: 4, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(12) expect(record_from_db["lettype"]).to eq(12) end end context "when the rent type is intermediate rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 4, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(11) + lettings_log.update!(rent_type: 4, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(11) expect(record_from_db["lettype"]).to eq(11) end end context "when the rent type is affordable rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 2, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(8) + lettings_log.update!(rent_type: 2, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(8) expect(record_from_db["lettype"]).to eq(8) end end context "when the rent type is affordable rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 2, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(7) + lettings_log.update!(rent_type: 2, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(7) expect(record_from_db["lettype"]).to eq(7) end end context "when the rent type is social rent and supported housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 0, needstype: 2) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(4) + lettings_log.update!(rent_type: 0, needstype: 2) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(4) expect(record_from_db["lettype"]).to eq(4) end end context "when the rent type is social rent and general needs housing" do it "correctly derives and saves lettype" do - case_log.update!(rent_type: 0, needstype: 1) - record_from_db = ActiveRecord::Base.connection.execute("select lettype from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.lettype).to eq(3) + lettings_log.update!(rent_type: 0, needstype: 1) + record_from_db = ActiveRecord::Base.connection.execute("select lettype from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.lettype).to eq(3) expect(record_from_db["lettype"]).to eq(3) end end @@ -1093,7 +1089,7 @@ RSpec.describe CaseLog do end it "correctly derives and saves day, month, year from start date" do - record_from_db = ActiveRecord::Base.connection.execute("select startdate from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select startdate from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["startdate"].day).to eq(10) expect(record_from_db["startdate"].month).to eq(10) expect(record_from_db["startdate"].year).to eq(2021) @@ -1101,25 +1097,25 @@ RSpec.describe CaseLog do context "when any charge field is set" do before do - case_log.update!(pscharge: 10) + lettings_log.update!(pscharge: 10) end it "derives that any blank ones are 0" do - record_from_db = ActiveRecord::Base.connection.execute("select supcharg, scharge from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select supcharg, scharge from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["supcharg"].to_f).to eq(0.0) expect(record_from_db["scharge"].to_f).to eq(0.0) end end def check_postcode_fields(postcode_field) - record_from_db = ActiveRecord::Base.connection.execute("select #{postcode_field} from case_logs where id=#{address_case_log.id}").to_a[0] - expect(address_case_log[postcode_field]).to eq("M1 1AE") + record_from_db = ActiveRecord::Base.connection.execute("select #{postcode_field} from lettings_logs where id=#{address_lettings_log.id}").to_a[0] + expect(address_lettings_log[postcode_field]).to eq("M1 1AE") expect(record_from_db[postcode_field]).to eq("M1 1AE") end def check_previous_postcode_fields(postcode_field) - record_from_db = ActiveRecord::Base.connection.execute("select #{postcode_field} from case_logs where id=#{address_case_log.id}").to_a[0] - expect(address_case_log[postcode_field]).to eq("M1 1AE") + record_from_db = ActiveRecord::Base.connection.execute("select #{postcode_field} from lettings_logs where id=#{address_lettings_log.id}").to_a[0] + expect(address_lettings_log[postcode_field]).to eq("M1 1AE") expect(record_from_db[postcode_field]).to eq("M1 1AE") end @@ -1129,7 +1125,7 @@ RSpec.describe CaseLog do .to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\",\"codes\":{\"admin_district\": \"E08000003\"}}}", headers: {}) end - let!(:address_case_log) do + let!(:address_lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1144,32 +1140,32 @@ RSpec.describe CaseLog do end it "correctly formats previous postcode" do - address_case_log.update!(postcode_full: "M1 1AE") + address_lettings_log.update!(postcode_full: "M1 1AE") check_property_postcode_fields - address_case_log.update!(postcode_full: "m1 1ae") + address_lettings_log.update!(postcode_full: "m1 1ae") check_property_postcode_fields - address_case_log.update!(postcode_full: "m11Ae") + address_lettings_log.update!(postcode_full: "m11Ae") check_property_postcode_fields - address_case_log.update!(postcode_full: "m11ae") + address_lettings_log.update!(postcode_full: "m11ae") check_property_postcode_fields end it "correctly infers la" do - record_from_db = ActiveRecord::Base.connection.execute("select la from case_logs where id=#{address_case_log.id}").to_a[0] - expect(address_case_log.la).to eq("E08000003") + record_from_db = ActiveRecord::Base.connection.execute("select la from lettings_logs where id=#{address_lettings_log.id}").to_a[0] + expect(address_lettings_log.la).to eq("E08000003") expect(record_from_db["la"]).to eq("E08000003") end it "errors if the property postcode is emptied" do - expect { address_case_log.update!({ postcode_full: "" }) } + expect { address_lettings_log.update!({ postcode_full: "" }) } .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/) end it "errors if the property postcode is not valid" do - expect { address_case_log.update!({ postcode_full: "invalid_postcode" }) } + expect { address_lettings_log.update!({ postcode_full: "invalid_postcode" }) } .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/) end @@ -1180,33 +1176,33 @@ RSpec.describe CaseLog do it "logs a warning" do expect(Rails.logger).to receive(:warn).with("Postcodes.io lookup timed out") - address_case_log.update!({ postcode_known: 1, postcode_full: "M1 1AD" }) + address_lettings_log.update!({ postcode_known: 1, postcode_full: "M1 1AD" }) end end it "correctly resets all fields if property postcode not known" do - address_case_log.update!({ postcode_known: 0 }) + address_lettings_log.update!({ postcode_known: 0 }) - record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["postcode_full"]).to eq(nil) - expect(address_case_log.la).to eq(nil) + expect(address_lettings_log.la).to eq(nil) expect(record_from_db["la"]).to eq(nil) end it "changes the LA if property postcode changes from not known to known and provided" do - address_case_log.update!({ postcode_known: 0 }) - address_case_log.update!({ la: "E09000033" }) + address_lettings_log.update!({ postcode_known: 0 }) + address_lettings_log.update!({ la: "E09000033" }) - record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["postcode_full"]).to eq(nil) - expect(address_case_log.la).to eq("E09000033") + expect(address_lettings_log.la).to eq("E09000033") expect(record_from_db["la"]).to eq("E09000033") - address_case_log.update!({ postcode_known: 1, postcode_full: "M1 1AD" }) + address_lettings_log.update!({ postcode_known: 1, postcode_full: "M1 1AD" }) - record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select la, postcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["postcode_full"]).to eq("M1 1AD") - expect(address_case_log.la).to eq("E08000003") + expect(address_lettings_log.la).to eq("E08000003") expect(record_from_db["la"]).to eq("E08000003") end end @@ -1217,7 +1213,7 @@ RSpec.describe CaseLog do .to_return(status: 200, body: "{\"status\":200,\"result\":{\"admin_district\":\"Manchester\", \"codes\":{\"admin_district\": \"E08000003\"}}}", headers: {}) end - let!(:address_case_log) do + let!(:address_lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1232,77 +1228,77 @@ RSpec.describe CaseLog do end it "correctly formats previous postcode" do - address_case_log.update!(ppostcode_full: "M1 1AE") + address_lettings_log.update!(ppostcode_full: "M1 1AE") previous_postcode_fields - address_case_log.update!(ppostcode_full: "m1 1ae") + address_lettings_log.update!(ppostcode_full: "m1 1ae") previous_postcode_fields - address_case_log.update!(ppostcode_full: "m11Ae") + address_lettings_log.update!(ppostcode_full: "m11Ae") previous_postcode_fields - address_case_log.update!(ppostcode_full: "m11ae") + address_lettings_log.update!(ppostcode_full: "m11ae") previous_postcode_fields end it "correctly infers prevloc" do - record_from_db = ActiveRecord::Base.connection.execute("select prevloc from case_logs where id=#{address_case_log.id}").to_a[0] - expect(address_case_log.prevloc).to eq("E08000003") + record_from_db = ActiveRecord::Base.connection.execute("select prevloc from lettings_logs where id=#{address_lettings_log.id}").to_a[0] + expect(address_lettings_log.prevloc).to eq("E08000003") expect(record_from_db["prevloc"]).to eq("E08000003") end it "errors if the previous postcode is emptied" do - expect { address_case_log.update!({ ppostcode_full: "" }) } + expect { address_lettings_log.update!({ ppostcode_full: "" }) } .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/) end it "errors if the previous postcode is not valid" do - expect { address_case_log.update!({ ppostcode_full: "invalid_postcode" }) } + expect { address_lettings_log.update!({ ppostcode_full: "invalid_postcode" }) } .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t("validations.postcode")}/) end it "correctly resets all fields if previous postcode not known" do - address_case_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ ppcodenk: 0 }) - record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["ppostcode_full"]).to eq(nil) - expect(address_case_log.prevloc).to eq(nil) + expect(address_lettings_log.prevloc).to eq(nil) expect(record_from_db["prevloc"]).to eq(nil) end it "correctly resets la if la is not known" do - address_case_log.update!({ ppcodenk: 0 }) - address_case_log.update!({ previous_la_known: 1, prevloc: "S92000003" }) - record_from_db = ActiveRecord::Base.connection.execute("select prevloc from case_logs where id=#{address_case_log.id}").to_a[0] + address_lettings_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ previous_la_known: 1, prevloc: "S92000003" }) + record_from_db = ActiveRecord::Base.connection.execute("select prevloc from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["prevloc"]).to eq("S92000003") - expect(address_case_log.prevloc).to eq("S92000003") + expect(address_lettings_log.prevloc).to eq("S92000003") - address_case_log.update!({ previous_la_known: 0 }) - record_from_db = ActiveRecord::Base.connection.execute("select prevloc from case_logs where id=#{address_case_log.id}").to_a[0] - expect(address_case_log.prevloc).to eq(nil) + address_lettings_log.update!({ previous_la_known: 0 }) + record_from_db = ActiveRecord::Base.connection.execute("select prevloc from lettings_logs where id=#{address_lettings_log.id}").to_a[0] + expect(address_lettings_log.prevloc).to eq(nil) expect(record_from_db["prevloc"]).to eq(nil) end it "changes the prevloc if previous postcode changes from not known to known and provided" do - address_case_log.update!({ ppcodenk: 0 }) - address_case_log.update!({ previous_la_known: 1, prevloc: "E09000033" }) + address_lettings_log.update!({ ppcodenk: 0 }) + address_lettings_log.update!({ previous_la_known: 1, prevloc: "E09000033" }) - record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["ppostcode_full"]).to eq(nil) - expect(address_case_log.prevloc).to eq("E09000033") + expect(address_lettings_log.prevloc).to eq("E09000033") expect(record_from_db["prevloc"]).to eq("E09000033") - address_case_log.update!({ ppcodenk: 0, ppostcode_full: "M1 1AD" }) + address_lettings_log.update!({ ppcodenk: 0, ppostcode_full: "M1 1AD" }) - record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from case_logs where id=#{address_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select prevloc, ppostcode_full from lettings_logs where id=#{address_lettings_log.id}").to_a[0] expect(record_from_db["ppostcode_full"]).to eq("M1 1AD") - expect(address_case_log.prevloc).to eq("E08000003") + expect(address_lettings_log.prevloc).to eq("E08000003") expect(record_from_db["prevloc"]).to eq("E08000003") end end context "when saving rent and charges" do - let!(:case_log) do + let!(:lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1315,13 +1311,13 @@ RSpec.describe CaseLog do end it "correctly sums rental charges" do - record_from_db = ActiveRecord::Base.connection.execute("select tcharge from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select tcharge from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["tcharge"]).to eq(30.98) end end context "when validating household members derived vars" do - let!(:household_case_log) do + let!(:household_lettings_log) do described_class.create!({ managing_organisation: owning_organisation, owning_organisation:, @@ -1343,39 +1339,39 @@ RSpec.describe CaseLog do end it "correctly derives and saves totchild" do - record_from_db = ActiveRecord::Base.connection.execute("select totchild from case_logs where id=#{household_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select totchild from lettings_logs where id=#{household_lettings_log.id}").to_a[0] expect(record_from_db["totchild"]).to eq(3) end it "correctly derives and saves totelder" do - record_from_db = ActiveRecord::Base.connection.execute("select totelder from case_logs where id=#{household_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select totelder from lettings_logs where id=#{household_lettings_log.id}").to_a[0] expect(record_from_db["totelder"]).to eq(2) end it "correctly derives and saves totadult" do - record_from_db = ActiveRecord::Base.connection.execute("select totadult from case_logs where id=#{household_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select totadult from lettings_logs where id=#{household_lettings_log.id}").to_a[0] expect(record_from_db["totadult"]).to eq(3) end it "correctly derives economic status for tenants under 16" do - record_from_db = ActiveRecord::Base.connection.execute("select ecstat7 from case_logs where id=#{household_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select ecstat7 from lettings_logs where id=#{household_lettings_log.id}").to_a[0] expect(record_from_db["ecstat7"]).to eq(9) end it "correctly resets economic status when age changes from under 16" do - household_case_log.update!(age7_known: 0, age7: 17) - record_from_db = ActiveRecord::Base.connection.execute("select ecstat7 from case_logs where id=#{household_case_log.id}").to_a[0] + household_lettings_log.update!(age7_known: 0, age7: 17) + record_from_db = ActiveRecord::Base.connection.execute("select ecstat7 from lettings_logs where id=#{household_lettings_log.id}").to_a[0] expect(record_from_db["ecstat7"]).to eq(nil) end end it "correctly derives and saves has_benefits" do - record_from_db = ActiveRecord::Base.connection.execute("select has_benefits from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select has_benefits from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["has_benefits"]).to eq(1) end context "when it is a renewal" do - let!(:case_log) do + let!(:lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1386,42 +1382,42 @@ RSpec.describe CaseLog do end it "correctly derives and saves waityear" do - record_from_db = ActiveRecord::Base.connection.execute("select waityear from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select waityear from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["waityear"]).to eq(2) - expect(case_log["waityear"]).to eq(2) + expect(lettings_log["waityear"]).to eq(2) end it "correctly derives and saves underoccupation_benefitcap if year is 2021" do - record_from_db = ActiveRecord::Base.connection.execute("select underoccupation_benefitcap from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select underoccupation_benefitcap from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["underoccupation_benefitcap"]).to eq(2) - expect(case_log["underoccupation_benefitcap"]).to eq(2) + expect(lettings_log["underoccupation_benefitcap"]).to eq(2) end it "correctly derives and saves prevten" do - case_log.managing_organisation.update!({ provider_type: "PRP" }) - case_log.update!({ needstype: 1 }) + lettings_log.managing_organisation.update!({ provider_type: "PRP" }) + lettings_log.update!({ needstype: 1 }) - record_from_db = ActiveRecord::Base.connection.execute("select prevten from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select prevten from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["prevten"]).to eq(32) - expect(case_log["prevten"]).to eq(32) + expect(lettings_log["prevten"]).to eq(32) - case_log.managing_organisation.update!({ provider_type: "LA" }) - case_log.update!({ needstype: 1 }) + lettings_log.managing_organisation.update!({ provider_type: "LA" }) + lettings_log.update!({ needstype: 1 }) - record_from_db = ActiveRecord::Base.connection.execute("select prevten from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select prevten from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["prevten"]).to eq(30) - expect(case_log["prevten"]).to eq(30) + expect(lettings_log["prevten"]).to eq(30) end it "correctly derives and saves referral" do - record_from_db = ActiveRecord::Base.connection.execute("select referral from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select referral from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["referral"]).to eq(0) - expect(case_log["referral"]).to eq(0) + expect(lettings_log["referral"]).to eq(0) end end context "when answering the household characteristics questions" do - let!(:case_log) do + let!(:lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1434,42 +1430,14 @@ RSpec.describe CaseLog do end it "correctly derives and saves refused" do - record_from_db = ActiveRecord::Base.connection.execute("select refused from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select refused from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["refused"]).to eq(1) - expect(case_log["refused"]).to eq(1) - end - end - - context "when the data provider is filling in household needs" do - let!(:case_log) do - described_class.create({ - managing_organisation: owning_organisation, - owning_organisation:, - created_by: created_by_user, - }) - end - - it "correctly derives and saves housing neeeds as 1" do - case_log.update!(housingneeds_a: 1) - record_from_db = ActiveRecord::Base.connection.execute("select housingneeds from case_logs where id=#{case_log.id}").to_a[0] - expect(record_from_db["housingneeds"]).to eq(1) - end - - it "correctly derives and saves housing neeeds as 2" do - case_log.update!(housingneeds_g: 1) - record_from_db = ActiveRecord::Base.connection.execute("select housingneeds from case_logs where id=#{case_log.id}").to_a[0] - expect(record_from_db["housingneeds"]).to eq(2) - end - - it "correctly derives and saves housing neeeds as 3" do - case_log.update!(housingneeds_h: 1) - record_from_db = ActiveRecord::Base.connection.execute("select housingneeds from case_logs where id=#{case_log.id}").to_a[0] - expect(record_from_db["housingneeds"]).to eq(3) + expect(lettings_log["refused"]).to eq(1) end end context "when it is supported housing and a care home charge has been supplied" do - let!(:case_log) do + let!(:lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1480,151 +1448,151 @@ RSpec.describe CaseLog do context "when the care home charge is paid bi-weekly" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 100, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(50.0) + lettings_log.update!(chcharge: 100, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(50.0) expect(record_from_db["wchchrg"]).to eq(50.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 2) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(50.06) + lettings_log.update!(chcharge: 100.12, period: 2) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(50.06) expect(record_from_db["wchchrg"]).to eq(50.06) end end context "when the care home charge is paid every 4 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 120, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(30.0) + lettings_log.update!(chcharge: 120, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(30.0) expect(record_from_db["wchchrg"]).to eq(30.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 3) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(25.03) + lettings_log.update!(chcharge: 100.12, period: 3) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(25.03) expect(record_from_db["wchchrg"]).to eq(25.03) end end context "when the care home charge is paid every calendar month" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(30.0) + lettings_log.update!(chcharge: 130, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(30.0) expect(record_from_db["wchchrg"]).to eq(30.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 4) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(23.10) + lettings_log.update!(chcharge: 100.12, period: 4) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(23.10) expect(record_from_db["wchchrg"]).to eq(23.10) end end context "when the care home charge is paid weekly for 50 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(125.0) + lettings_log.update!(chcharge: 130, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(125.0) expect(record_from_db["wchchrg"]).to eq(125.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 5) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(96.27) + lettings_log.update!(chcharge: 100.12, period: 5) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(96.27) expect(record_from_db["wchchrg"]).to eq(96.27) end end context "when the care home charge is paid weekly for 49 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(122.5) + lettings_log.update!(chcharge: 130, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(122.5) expect(record_from_db["wchchrg"]).to eq(122.5) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 6) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(94.34) + lettings_log.update!(chcharge: 100.12, period: 6) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(94.34) expect(record_from_db["wchchrg"]).to eq(94.34) end end context "when the care home charge is paid weekly for 48 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(120.0) + lettings_log.update!(chcharge: 130, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(120.0) expect(record_from_db["wchchrg"]).to eq(120.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 7) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(92.42) + lettings_log.update!(chcharge: 100.12, period: 7) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(92.42) expect(record_from_db["wchchrg"]).to eq(92.42) end end context "when the care home charge is paid weekly for 47 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(117.5) + lettings_log.update!(chcharge: 130, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(117.5) expect(record_from_db["wchchrg"]).to eq(117.5) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 8) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(90.49) + lettings_log.update!(chcharge: 100.12, period: 8) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(90.49) expect(record_from_db["wchchrg"]).to eq(90.49) end end context "when the care home charge is paid weekly for 46 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(115.0) + lettings_log.update!(chcharge: 130, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(115.0) expect(record_from_db["wchchrg"]).to eq(115.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 9) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(88.57) + lettings_log.update!(chcharge: 100.12, period: 9) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(88.57) expect(record_from_db["wchchrg"]).to eq(88.57) end end context "when the care home charge is paid weekly for 52 weeks" do it "correctly derives and saves weekly care home charge" do - case_log.update!(chcharge: 130, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(130.0) + lettings_log.update!(chcharge: 130, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(130.0) expect(record_from_db["wchchrg"]).to eq(130.0) end it "correctly derives floats" do - case_log.update!(chcharge: 100.12, period: 1) - record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from case_logs where id=#{case_log.id}").to_a[0] - expect(case_log.wchchrg).to eq(100.12) + lettings_log.update!(chcharge: 100.12, period: 1) + record_from_db = ActiveRecord::Base.connection.execute("select wchchrg from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(lettings_log.wchchrg).to eq(100.12) expect(record_from_db["wchchrg"]).to eq(100.12) end end end context "when the data provider is filling in the reason for the property being vacant" do - let!(:first_let_case_log) do + let!(:first_let_lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1633,7 +1601,7 @@ RSpec.describe CaseLog do }) end - let!(:relet_case_log) do + let!(:relet_lettings_log) do described_class.create({ managing_organisation: owning_organisation, owning_organisation:, @@ -1643,34 +1611,34 @@ RSpec.describe CaseLog do end it "the newprop variable is correctly derived and saved as 1 for a first let vacancy reason" do - first_let_case_log.update!({ rsnvac: 15 }) - record_from_db = ActiveRecord::Base.connection.execute("select newprop from case_logs where id=#{first_let_case_log.id}").to_a[0] + first_let_lettings_log.update!({ rsnvac: 15 }) + record_from_db = ActiveRecord::Base.connection.execute("select newprop from lettings_logs where id=#{first_let_lettings_log.id}").to_a[0] expect(record_from_db["newprop"]).to eq(1) - expect(first_let_case_log["newprop"]).to eq(1) + expect(first_let_lettings_log["newprop"]).to eq(1) end it "the newprop variable is correctly derived and saved as 2 for anything that is not a first let vacancy reason" do - relet_case_log.update!({ rsnvac: 2 }) - record_from_db = ActiveRecord::Base.connection.execute("select newprop from case_logs where id=#{relet_case_log.id}").to_a[0] + relet_lettings_log.update!({ rsnvac: 2 }) + record_from_db = ActiveRecord::Base.connection.execute("select newprop from lettings_logs where id=#{relet_lettings_log.id}").to_a[0] expect(record_from_db["newprop"]).to eq(2) - expect(relet_case_log["newprop"]).to eq(2) + expect(relet_lettings_log["newprop"]).to eq(2) end end context "when a total shortfall is provided" do it "derives that tshortfall is known" do - case_log.update!({ tshortfall: 10 }) - record_from_db = ActiveRecord::Base.connection.execute("select tshortfall_known from case_logs where id=#{case_log.id}").to_a[0] + lettings_log.update!({ tshortfall: 10 }) + record_from_db = ActiveRecord::Base.connection.execute("select tshortfall_known from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["tshortfall_known"]).to eq(0) - expect(case_log["tshortfall_known"]).to eq(0) + expect(lettings_log["tshortfall_known"]).to eq(0) end end - context "when a case log is a supported housing log" do + context "when a lettings log is a supported housing log" do let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } before do - case_log.needstype = 2 + lettings_log.needstype = 2 allow(FormHandler.instance).to receive(:get_form).and_return(real_2021_2022_form) end @@ -1678,12 +1646,12 @@ RSpec.describe CaseLog do let(:scheme) { FactoryBot.create(:scheme) } let!(:location) { FactoryBot.create(:location, scheme:) } - before { case_log.update!(scheme:) } + before { lettings_log.update!(scheme:) } it "derives the scheme location" do - record_from_db = ActiveRecord::Base.connection.execute("select location_id from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select location_id from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["location_id"]).to eq(location.id) - expect(case_log["location_id"]).to eq(location.id) + expect(lettings_log["location_id"]).to eq(location.id) end end @@ -1691,7 +1659,7 @@ RSpec.describe CaseLog do let(:scheme) { FactoryBot.create(:scheme) } let(:location) { FactoryBot.create(:location, scheme:, postcode: "M11AE", type_of_unit: 1, mobility_type: "W") } - let(:supported_housing_case_log) do + let(:supported_housing_lettings_log) do described_class.create!({ managing_organisation: owning_organisation, owning_organisation:, @@ -1709,23 +1677,23 @@ RSpec.describe CaseLog do end it "correctly infers and saves la" do - record_from_db = ActiveRecord::Base.connection.execute("SELECT la from case_logs WHERE id=#{supported_housing_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("SELECT la from lettings_logs WHERE id=#{supported_housing_lettings_log.id}").to_a[0] expect(record_from_db["la"]).to be_nil - expect(supported_housing_case_log.la).to eq("E08000003") + expect(supported_housing_lettings_log.la).to eq("E08000003") end it "correctly infers and saves postcode" do - record_from_db = ActiveRecord::Base.connection.execute("SELECT postcode_full from case_logs WHERE id=#{supported_housing_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("SELECT postcode_full from lettings_logs WHERE id=#{supported_housing_lettings_log.id}").to_a[0] expect(record_from_db["postcode_full"]).to be_nil - expect(supported_housing_case_log.postcode_full).to eq("M1 1AE") + expect(supported_housing_lettings_log.postcode_full).to eq("M1 1AE") end it "unittype_sh method returns the type_of_unit of the location" do - expect(supported_housing_case_log.unittype_sh).to eq(1) + expect(supported_housing_lettings_log.unittype_sh).to eq(1) end it "correctly infers and saves wchair" do - record_from_db = ActiveRecord::Base.connection.execute("SELECT wchair from case_logs WHERE id=#{supported_housing_case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("SELECT wchair from lettings_logs WHERE id=#{supported_housing_lettings_log.id}").to_a[0] expect(record_from_db["wchair"]).to eq(1) end end @@ -1734,7 +1702,7 @@ RSpec.describe CaseLog do let(:scheme) { FactoryBot.create(:scheme) } let(:location) { FactoryBot.create(:location, scheme:) } - let!(:supported_housing_case_log) do + let!(:supported_housing_lettings_log) do described_class.create!({ managing_organisation: owning_organisation, owning_organisation:, @@ -1748,170 +1716,263 @@ RSpec.describe CaseLog do end it "correcly infers and saves the renewal date" do - record_from_db = ActiveRecord::Base.connection.execute("SELECT voiddate from case_logs where id=#{supported_housing_case_log.id}").to_a[0] - expect(record_from_db["voiddate"].to_i).to eq(supported_housing_case_log.startdate.to_i) + record_from_db = ActiveRecord::Base.connection.execute("SELECT voiddate from lettings_logs where id=#{supported_housing_lettings_log.id}").to_a[0] + expect(record_from_db["voiddate"].to_i).to eq(supported_housing_lettings_log.startdate.to_i) + end + end + end + + context "when saving accessibility needs" do + it "derives housingneeds_h as true if 'Don't know' is selected for housingneeds" do + lettings_log.update!({ housingneeds: 3 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_b housingneeds_c housingneeds_f housingneeds_g] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_h"]).to eq(1) + expect(lettings_log["housingneeds_h"]).to eq(1) + end + + it "derives housingneeds_g as true if 'No' is selected for housingneeds" do + lettings_log.update!({ housingneeds: 2 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_b housingneeds_c housingneeds_f housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_g"]).to eq(1) + expect(lettings_log["housingneeds_g"]).to eq(1) + end + + it "derives housingneeds_a as true if 'Fully wheelchair accessible' is selected for housingneeds_type" do + lettings_log.update!({ housingneeds: 1, housingneeds_type: 0 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_b housingneeds_c housingneeds_f housingneeds_g housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_a"]).to eq(1) + expect(lettings_log["housingneeds_a"]).to eq(1) + end + + it "derives housingneeds_b as true if 'Wheelchair access to essential rooms' is selected for housingneeds_type" do + lettings_log.update!({ housingneeds: 1, housingneeds_type: 1 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_c housingneeds_f housingneeds_g housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_b"]).to eq(1) + expect(lettings_log["housingneeds_b"]).to eq(1) + end + + it "derives housingneeds_c if 'Level access housing' is selected for housingneeds_type" do + lettings_log.update!({ housingneeds: 1, housingneeds_type: 2 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_b housingneeds_f housingneeds_g housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_c"]).to eq(1) + expect(lettings_log["housingneeds_c"]).to eq(1) + end + + it "derives housingneeds_f if 'Yes' is selected for housingneeds_other" do + lettings_log.update!({ housingneeds: 1, housingneeds_other: 1 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_b housingneeds_c housingneeds_g housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) + end + expect(record_from_db["housingneeds_f"]).to eq(1) + expect(lettings_log["housingneeds_f"]).to eq(1) + end + + it "clears previously set housingneeds if 'No' is selected for housingneeds" do + lettings_log.update!({ housingneeds: 1, housingneeds_type: 2, housingneeds_other: 1 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + expect(record_from_db["housingneeds_c"]).to eq(1) + expect(lettings_log["housingneeds_c"]).to eq(1) + expect(record_from_db["housingneeds_f"]).to eq(1) + expect(lettings_log["housingneeds_f"]).to eq(1) + + lettings_log.update!({ housingneeds: 2 }) + record_from_db = ActiveRecord::Base.connection.execute("select housingneeds_a, housingneeds_b, housingneeds_c, housingneeds_f, housingneeds_g, housingneeds_h from lettings_logs where id=#{lettings_log.id}").to_a[0] + not_selected_housingneeds = %w[housingneeds_a housingneeds_b housingneeds_c housingneeds_f housingneeds_h] + not_selected_housingneeds.each do |housingneed| + expect(record_from_db[housingneed]).to eq(0) + expect(lettings_log[housingneed]).to eq(0) end + expect(record_from_db["housingneeds_g"]).to eq(1) + expect(lettings_log["housingneeds_g"]).to eq(1) end end end describe "optional fields" do - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } context "when tshortfall is marked as not known" do it "makes tshortfall optional" do - case_log.update!({ tshortfall: nil, tshortfall_known: 1 }) - expect(case_log.optional_fields).to include("tshortfall") + lettings_log.update!({ tshortfall: nil, tshortfall_known: 1 }) + expect(lettings_log.optional_fields).to include("tshortfall") end end end describe "resetting invalidated fields" do context "when a question that has already been answered, no longer has met dependencies" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, cbl: 1, preg_occ: 2, wchair: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, cbl: 1, preg_occ: 2, wchair: 1) } it "clears the answer" do - expect { case_log.update!(preg_occ: nil) }.to change(case_log, :cbl).from(1).to(nil) + expect { lettings_log.update!(preg_occ: nil) }.to change(lettings_log, :cbl).from(1).to(nil) end context "when the question type does not have answer options" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, housingneeds_a: 1, age1: 19) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, housingneeds_a: 1, age1: 19) } it "clears the answer" do - expect { case_log.update!(housingneeds_a: 0) }.to change(case_log, :age1).from(19).to(nil) + expect { lettings_log.update!(housingneeds_a: 0) }.to change(lettings_log, :age1).from(19).to(nil) end end context "when the question type has answer options" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, illness: 1, illness_type_1: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, illness: 1, illness_type_1: 1) } it "clears the answer" do - expect { case_log.update!(illness: 0) }.to change(case_log, :illness_type_1).from(1).to(nil) + expect { lettings_log.update!(illness: 0) }.to change(lettings_log, :illness_type_1).from(1).to(nil) end end end context "with two pages having the same question key, only one's dependency is met" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, cbl: 0, preg_occ: 2, wchair: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, cbl: 0, preg_occ: 2, wchair: 1) } it "does not clear the value for answers that apply to both pages" do - expect(case_log.cbl).to eq(0) + expect(lettings_log.cbl).to eq(0) end it "does clear the value for answers that do not apply for invalidated page" do - case_log.update!({ wchair: 1, sex2: "F", age2: 33 }) - case_log.update!({ cbl: 1 }) - case_log.update!({ preg_occ: 1 }) + lettings_log.update!({ wchair: 1, sex2: "F", age2: 33 }) + lettings_log.update!({ cbl: 1 }) + lettings_log.update!({ preg_occ: 1 }) - expect(case_log.cbl).to eq(nil) + expect(lettings_log.cbl).to eq(nil) end end context "when a non select question associated with several pages is routed to" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, period: 2) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, period: 2) } it "does not clear the answer value" do - case_log.update!({ offered: 4 }) - case_log.reload - expect(case_log.offered).to eq(4) + lettings_log.update!({ offered: 4 }) + lettings_log.reload + expect(lettings_log.offered).to eq(4) end end - context "when the case log does not have a valid form set yet" do - let(:case_log) { FactoryBot.create(:case_log) } + context "when the lettings log does not have a valid form set yet" do + let(:lettings_log) { FactoryBot.create(:lettings_log) } it "does not throw an error" do - expect { case_log.update(startdate: Time.zone.local(2015, 1, 1)) }.not_to raise_error + expect { lettings_log.update(startdate: Time.zone.local(2015, 1, 1)) }.not_to raise_error end end context "when it changes from a renewal to not a renewal" do - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } it "resets inferred waityear value" do - case_log.update!({ renewal: 1 }) + lettings_log.update!({ renewal: 1 }) - record_from_db = ActiveRecord::Base.connection.execute("select waityear from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select waityear from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["waityear"]).to eq(2) - expect(case_log["waityear"]).to eq(2) + expect(lettings_log["waityear"]).to eq(2) - case_log.update!({ renewal: 0 }) - record_from_db = ActiveRecord::Base.connection.execute("select waityear from case_logs where id=#{case_log.id}").to_a[0] + lettings_log.update!({ renewal: 0 }) + record_from_db = ActiveRecord::Base.connection.execute("select waityear from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["waityear"]).to eq(nil) - expect(case_log["waityear"]).to eq(nil) + expect(lettings_log["waityear"]).to eq(nil) end end context "when it changes from a supported housing to not a supported housing" do let(:location) { FactoryBot.create(:location, mobility_type: "A", postcode: "SW1P 4DG") } - let(:case_log) { FactoryBot.create(:case_log, location:) } + let(:lettings_log) { FactoryBot.create(:lettings_log, location:) } it "resets inferred wchair value" do - case_log.update!({ needstype: 2 }) + lettings_log.update!({ needstype: 2 }) - record_from_db = ActiveRecord::Base.connection.execute("select wchair from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select wchair from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["wchair"]).to eq(2) - expect(case_log["wchair"]).to eq(2) + expect(lettings_log["wchair"]).to eq(2) - case_log.update!({ needstype: 1 }) - record_from_db = ActiveRecord::Base.connection.execute("select needstype from case_logs where id=#{case_log.id}").to_a[0] + lettings_log.update!({ needstype: 1 }) + record_from_db = ActiveRecord::Base.connection.execute("select needstype from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["wchair"]).to eq(nil) - expect(case_log["wchair"]).to eq(nil) + expect(lettings_log["wchair"]).to eq(nil) end it "resets location" do - case_log.update!({ needstype: 2 }) + lettings_log.update!({ needstype: 2 }) - record_from_db = ActiveRecord::Base.connection.execute("select location_id from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select location_id from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["location_id"]).to eq(location.id) - expect(case_log["location_id"]).to eq(location.id) - case_log.update!({ needstype: 1 }) - record_from_db = ActiveRecord::Base.connection.execute("select location_id from case_logs where id=#{case_log.id}").to_a[0] + expect(lettings_log["location_id"]).to eq(location.id) + lettings_log.update!({ needstype: 1 }) + record_from_db = ActiveRecord::Base.connection.execute("select location_id from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["location_id"]).to eq(nil) - expect(case_log["location_id"]).to eq(nil) + expect(lettings_log["location_id"]).to eq(nil) end end context "when it is not a renewal" do - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } it "saves waityear value" do - case_log.update!({ renewal: 0, waityear: 2 }) + lettings_log.update!({ renewal: 0, waityear: 2 }) - record_from_db = ActiveRecord::Base.connection.execute("select waityear from case_logs where id=#{case_log.id}").to_a[0] + record_from_db = ActiveRecord::Base.connection.execute("select waityear from lettings_logs where id=#{lettings_log.id}").to_a[0] expect(record_from_db["waityear"]).to eq(2) - expect(case_log["waityear"]).to eq(2) + expect(lettings_log["waityear"]).to eq(2) end end context "when a support user changes the owning organisation of the log" do - let(:case_log) { FactoryBot.create(:case_log, created_by: created_by_user) } + let(:lettings_log) { FactoryBot.create(:lettings_log, created_by: created_by_user) } let(:organisation_2) { FactoryBot.create(:organisation) } it "clears the created by user set" do - expect { case_log.update!(owning_organisation: organisation_2) } - .to change { case_log.reload.created_by }.from(created_by_user).to(nil) + expect { lettings_log.update!(owning_organisation: organisation_2) } + .to change { lettings_log.reload.created_by }.from(created_by_user).to(nil) end context "when the organisation selected doesn't match the scheme set" do let(:scheme) { FactoryBot.create(:scheme, owning_organisation: created_by_user.organisation) } let(:location) { FactoryBot.create(:location, scheme:) } - let(:case_log) { FactoryBot.create(:case_log, owning_organisation: nil, needstype: 2, scheme_id: scheme.id) } + let(:lettings_log) { FactoryBot.create(:lettings_log, owning_organisation: nil, needstype: 2, scheme_id: scheme.id) } it "clears the scheme value" do - case_log.update!(owning_organisation: organisation_2) - expect(case_log.reload.scheme).to be nil + lettings_log.update!(owning_organisation: organisation_2) + expect(lettings_log.reload.scheme).to be nil end end context "when the organisation selected still matches the scheme set" do let(:scheme) { FactoryBot.create(:scheme, owning_organisation: organisation_2) } let(:location) { FactoryBot.create(:location, scheme:) } - let(:case_log) { FactoryBot.create(:case_log, owning_organisation: nil, needstype: 2, scheme_id: scheme.id) } + let(:lettings_log) { FactoryBot.create(:lettings_log, owning_organisation: nil, needstype: 2, scheme_id: scheme.id) } it "does not clear the scheme value" do - case_log.update!(owning_organisation: organisation_2) - expect(case_log.reload.scheme_id).to eq(scheme.id) + lettings_log.update!(owning_organisation: organisation_2) + expect(lettings_log.reload.scheme_id).to eq(scheme.id) end end end @@ -1919,45 +1980,45 @@ RSpec.describe CaseLog do describe "tshortfall_unknown?" do context "when tshortfall is nil" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, tshortfall_known: nil) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, tshortfall_known: nil) } it "returns false" do - expect(case_log.tshortfall_unknown?).to be false + expect(lettings_log.tshortfall_unknown?).to be false end end context "when tshortfall is No" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, tshortfall_known: 1) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, tshortfall_known: 1) } it "returns false" do - expect(case_log.tshortfall_unknown?).to be true + expect(lettings_log.tshortfall_unknown?).to be true end end context "when tshortfall is Yes" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress, tshortfall_known: 0) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, tshortfall_known: 0) } it "returns false" do - expect(case_log.tshortfall_unknown?).to be false + expect(lettings_log.tshortfall_unknown?).to be false end end end describe "paper trail" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } it "creates a record of changes to a log" do - expect { case_log.update!(age1: 64) }.to change(case_log.versions, :count).by(1) + expect { lettings_log.update!(age1: 64) }.to change(lettings_log.versions, :count).by(1) end - it "allows case logs to be restored to a previous version" do - case_log.update!(age1: 63) - expect(case_log.paper_trail.previous_version.age1).to eq(17) + it "allows lettings logs to be restored to a previous version" do + lettings_log.update!(age1: 63) + expect(lettings_log.paper_trail.previous_version.age1).to eq(17) end end describe "soft values for period" do - let(:case_log) { FactoryBot.create(:case_log) } + let(:lettings_log) { FactoryBot.create(:lettings_log) } before do LaRentRange.create!( @@ -1972,44 +2033,44 @@ RSpec.describe CaseLog do start_year: 2021, ) - case_log.la = "E07000223" - case_log.lettype = 1 - case_log.beds = 1 - case_log.startdate = Time.zone.local(2021, 10, 10) + lettings_log.la = "E07000223" + lettings_log.lettype = 1 + lettings_log.beds = 1 + lettings_log.startdate = Time.zone.local(2021, 10, 10) end context "when period is weekly for 52 weeks" do it "returns weekly soft min for 52 weeks" do - case_log.period = 1 - expect(case_log.soft_min_for_period).to eq("100.0 every week") + lettings_log.period = 1 + expect(lettings_log.soft_min_for_period).to eq("100.0 every week") end it "returns weekly soft max for 52 weeks" do - case_log.period = 1 - expect(case_log.soft_max_for_period).to eq("400.0 every week") + lettings_log.period = 1 + expect(lettings_log.soft_max_for_period).to eq("400.0 every week") end end context "when period is weekly for 47 weeks" do it "returns weekly soft min for 47 weeks" do - case_log.period = 8 - expect(case_log.soft_min_for_period).to eq("110.64 every week") + lettings_log.period = 8 + expect(lettings_log.soft_min_for_period).to eq("110.64 every week") end it "returns weekly soft max for 47 weeks" do - case_log.period = 8 - expect(case_log.soft_max_for_period).to eq("442.55 every week") + lettings_log.period = 8 + expect(lettings_log.soft_max_for_period).to eq("442.55 every week") end end end describe "scopes" do - let!(:case_log_1) { FactoryBot.create(:case_log, :in_progress, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) } - let!(:case_log_2) { FactoryBot.create(:case_log, :completed, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) } + let!(:lettings_log_1) { FactoryBot.create(:lettings_log, :in_progress, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) } + let!(:lettings_log_2) { FactoryBot.create(:lettings_log, :completed, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) } before do Timecop.freeze(Time.utc(2022, 6, 3)) - FactoryBot.create(:case_log, startdate: Time.utc(2022, 6, 3)) + FactoryBot.create(:lettings_log, startdate: Time.utc(2022, 6, 3)) end after do @@ -2017,124 +2078,124 @@ RSpec.describe CaseLog do end context "when searching logs" do - let!(:case_log_to_search) { FactoryBot.create(:case_log, :completed) } + let!(:lettings_log_to_search) { FactoryBot.create(:lettings_log, :completed) } before do - FactoryBot.create_list(:case_log, 5, :completed) + FactoryBot.create_list(:lettings_log, 5, :completed) end describe "#filter_by_id" do it "allows searching by a log ID" do - result = described_class.filter_by_id(case_log_to_search.id.to_s) + result = described_class.filter_by_id(lettings_log_to_search.id.to_s) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end describe "#filter_by_tenant_code" do it "allows searching by a Tenant Code" do - result = described_class.filter_by_tenant_code(case_log_to_search.tenancycode) + result = described_class.filter_by_tenant_code(lettings_log_to_search.tenancycode) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end context "when tenant_code has lower case letters" do - let(:matching_tenant_code_lower_case) { case_log_to_search.tenancycode.downcase } + let(:matching_tenant_code_lower_case) { lettings_log_to_search.tenancycode.downcase } it "allows searching by a Tenant Code" do result = described_class.filter_by_tenant_code(matching_tenant_code_lower_case) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end end describe "#filter_by_propcode" do it "allows searching by a Property Reference" do - result = described_class.filter_by_propcode(case_log_to_search.propcode) + result = described_class.filter_by_propcode(lettings_log_to_search.propcode) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end context "when propcode has lower case letters" do - let(:matching_propcode_lower_case) { case_log_to_search.propcode.downcase } + let(:matching_propcode_lower_case) { lettings_log_to_search.propcode.downcase } it "allows searching by a Property Reference" do result = described_class.filter_by_propcode(matching_propcode_lower_case) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end end describe "#filter_by_postcode" do it "allows searching by a Property Postcode" do - result = described_class.filter_by_postcode(case_log_to_search.postcode_full) + result = described_class.filter_by_postcode(lettings_log_to_search.postcode_full) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end - context "when case log is supported housing" do + context "when lettings log is supported housing" do let(:location) { FactoryBot.create(:location, postcode: "W6 0ST") } before do - case_log_to_search.update!(needstype: 2, location:) + lettings_log_to_search.update!(needstype: 2, location:) end it "allows searching by a Property Postcode" do result = described_class.filter_by_location_postcode("W6 0ST") expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end end describe "#search_by" do it "allows searching using ID" do - result = described_class.search_by(case_log_to_search.id.to_s) + result = described_class.search_by(lettings_log_to_search.id.to_s) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end it "allows searching using tenancy code" do - result = described_class.search_by(case_log_to_search.tenancycode) + result = described_class.search_by(lettings_log_to_search.tenancycode) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end it "allows searching by a Property Reference" do - result = described_class.search_by(case_log_to_search.propcode) + result = described_class.search_by(lettings_log_to_search.propcode) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end it "allows searching by a Property Postcode" do - result = described_class.search_by(case_log_to_search.postcode_full) + result = described_class.search_by(lettings_log_to_search.postcode_full) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end - context "when case log is supported housing" do + context "when lettings log is supported housing" do let(:location) { FactoryBot.create(:location, postcode: "W6 0ST") } before do - case_log_to_search.update!(needstype: 2, location:) + lettings_log_to_search.update!(needstype: 2, location:) end it "allows searching by a Property Postcode" do result = described_class.search_by("W6 0ST") expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end context "when postcode has spaces and lower case letters" do - let(:matching_postcode_lower_case_with_spaces) { case_log_to_search.postcode_full.downcase.chars.insert(3, " ").join } + let(:matching_postcode_lower_case_with_spaces) { lettings_log_to_search.postcode_full.downcase.chars.insert(3, " ").join } it "allows searching by a Property Postcode" do result = described_class.search_by(matching_postcode_lower_case_with_spaces) expect(result.count).to eq(1) - expect(result.first.id).to eq case_log_to_search.id + expect(result.first.id).to eq lettings_log_to_search.id end end end @@ -2162,10 +2223,10 @@ RSpec.describe CaseLog do end it "filters based on date boundaries correctly" do - case_log_1.startdate = Time.zone.local(2022, 4, 1) - case_log_1.save!(validate: false) - case_log_2.startdate = Time.zone.local(2022, 3, 31) - case_log_2.save!(validate: false) + lettings_log_1.startdate = Time.zone.local(2022, 4, 1) + lettings_log_1.save!(validate: false) + lettings_log_2.startdate = Time.zone.local(2022, 3, 31) + lettings_log_2.save!(validate: false) expect(described_class.filter_by_years(%w[2021]).count).to eq(1) expect(described_class.filter_by_years(%w[2022]).count).to eq(2) @@ -2178,10 +2239,10 @@ RSpec.describe CaseLog do let(:organisation_3) { FactoryBot.create(:organisation) } before do - FactoryBot.create(:case_log, :in_progress, owning_organisation: organisation_1, managing_organisation: organisation_1) - FactoryBot.create(:case_log, :completed, owning_organisation: organisation_1, managing_organisation: organisation_2) - FactoryBot.create(:case_log, :completed, owning_organisation: organisation_2, managing_organisation: organisation_1) - FactoryBot.create(:case_log, :completed, owning_organisation: organisation_2, managing_organisation: organisation_2) + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: organisation_1, managing_organisation: organisation_1) + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation_1, managing_organisation: organisation_2) + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation_2, managing_organisation: organisation_1) + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation_2, managing_organisation: organisation_2) end it "filters by given organisation id" do @@ -2209,8 +2270,8 @@ RSpec.describe CaseLog do context "when filtering by user" do before do - PaperTrail::Version.find_by(item_id: case_log_1.id, event: "create").update!(whodunnit: created_by_user.to_global_id.uri.to_s) - PaperTrail::Version.find_by(item_id: case_log_2.id, event: "create").update!(whodunnit: created_by_user.to_global_id.uri.to_s) + PaperTrail::Version.find_by(item_id: lettings_log_1.id, event: "create").update!(whodunnit: created_by_user.to_global_id.uri.to_s) + PaperTrail::Version.find_by(item_id: lettings_log_2.id, event: "create").update!(whodunnit: created_by_user.to_global_id.uri.to_s) end it "allows filtering on current user" do @@ -2229,58 +2290,58 @@ RSpec.describe CaseLog do describe "#retirement_age_for_person" do context "when a person gender is Male" do - let(:case_log) { FactoryBot.build(:case_log, sex1: "M") } + let(:lettings_log) { FactoryBot.build(:lettings_log, sex1: "M") } it "returns the expected retirement age" do - expect(case_log.retirement_age_for_person_1).to eq(67) + expect(lettings_log.retirement_age_for_person_1).to eq(67) end it "returns the expected plural" do - expect(case_log.plural_gender_for_person_1).to eq("male and non-binary people") + expect(lettings_log.plural_gender_for_person_1).to eq("male and non-binary people") end end context "when a person gender is Female" do - let(:case_log) { FactoryBot.build(:case_log, sex2: "F") } + let(:lettings_log) { FactoryBot.build(:lettings_log, sex2: "F") } it "returns the expected retirement age" do - expect(case_log.retirement_age_for_person_2).to eq(60) + expect(lettings_log.retirement_age_for_person_2).to eq(60) end it "returns the expected plural" do - expect(case_log.plural_gender_for_person_2).to eq("females") + expect(lettings_log.plural_gender_for_person_2).to eq("females") end end context "when a person gender is Non-Binary" do - let(:case_log) { FactoryBot.build(:case_log, sex3: "X") } + let(:lettings_log) { FactoryBot.build(:lettings_log, sex3: "X") } it "returns the expected retirement age" do - expect(case_log.retirement_age_for_person_3).to eq(67) + expect(lettings_log.retirement_age_for_person_3).to eq(67) end it "returns the expected plural" do - expect(case_log.plural_gender_for_person_3).to eq("male and non-binary people") + expect(lettings_log.plural_gender_for_person_3).to eq("male and non-binary people") end end context "when the person gender is not set" do - let(:case_log) { FactoryBot.build(:case_log) } + let(:lettings_log) { FactoryBot.build(:lettings_log) } it "returns nil" do - expect(case_log.retirement_age_for_person_3).to be_nil + expect(lettings_log.retirement_age_for_person_3).to be_nil end it "returns the expected plural" do - expect(case_log.plural_gender_for_person_3).to be_nil + expect(lettings_log.plural_gender_for_person_3).to be_nil end end context "when a postcode contains unicode characters" do - let(:case_log) { FactoryBot.build(:case_log, postcode_full: "SR81LS\u00A0") } + let(:lettings_log) { FactoryBot.build(:lettings_log, postcode_full: "SR81LS\u00A0") } it "triggers a validation error" do - expect { case_log.save! }.to raise_error(ActiveRecord::RecordInvalid, /Enter a postcode in the correct format/) + expect { lettings_log.save! }.to raise_error(ActiveRecord::RecordInvalid, /Enter a postcode in the correct format/) end end end @@ -2293,8 +2354,8 @@ RSpec.describe CaseLog do before do Timecop.freeze(Time.utc(2022, 6, 5)) - case_log = FactoryBot.create(:case_log, needstype: 2, scheme:, location:, owning_organisation: scheme.owning_organisation, created_by: user) - expected_content.sub!(/\{id\}/, case_log["id"].to_s) + lettings_log = FactoryBot.create(:lettings_log, needstype: 2, scheme:, location:, owning_organisation: scheme.owning_organisation, created_by: user) + expected_content.sub!(/\{id\}/, lettings_log["id"].to_s) expected_content.sub!(/\{scheme_code\}/, "S#{scheme['id']}") expected_content.sub!(/\{scheme_service_name\}/, scheme["service_name"].to_s) expected_content.sub!(/\{scheme_sensitive\}/, scheme["sensitive"].to_s) @@ -2309,17 +2370,17 @@ RSpec.describe CaseLog do end context "with a support user" do - let(:csv_export_file) { File.open("spec/fixtures/files/case_logs_download.csv", "r:UTF-8") } + let(:csv_export_file) { File.open("spec/fixtures/files/lettings_logs_download.csv", "r:UTF-8") } - it "generates a correct csv from a case log" do + it "generates a correct csv from a lettings log" do expect(described_class.to_csv).to eq(expected_content) end end context "with a non support user" do - let(:csv_export_file) { File.open("spec/fixtures/files/case_logs_download_non_support.csv", "r:UTF-8") } + let(:csv_export_file) { File.open("spec/fixtures/files/lettings_logs_download_non_support.csv", "r:UTF-8") } - it "generates a correct csv from a case log" do + it "generates a correct csv from a lettings log" do expect(described_class.to_csv(user)).to eq(expected_content) end end diff --git a/spec/models/location_spec.rb b/spec/models/location_spec.rb index 0b932b915..856575932 100644 --- a/spec/models/location_spec.rb +++ b/spec/models/location_spec.rb @@ -64,7 +64,7 @@ RSpec.describe Location, type: :model do expect { location.update!(name: "new test name") }.to change(location.versions, :count).by(1) end - it "allows case logs to be restored to a previous version" do + it "allows lettings logs to be restored to a previous version" do location.update!(name: "new test name") expect(location.paper_trail.previous_version.name).to eq(name) end diff --git a/spec/models/organisation_spec.rb b/spec/models/organisation_spec.rb index 3adcf0a64..9340e1b3a 100644 --- a/spec/models/organisation_spec.rb +++ b/spec/models/organisation_spec.rb @@ -80,40 +80,40 @@ RSpec.describe Organisation, type: :model do end end - context "with case logs" do + context "with lettings logs" do let(:other_organisation) { FactoryBot.create(:organisation) } - let!(:owned_case_log) do + let!(:owned_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :completed, owning_organisation: organisation, managing_organisation: other_organisation, created_by: user, ) end - let!(:managed_case_log) do + let!(:managed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: other_organisation, managing_organisation: organisation, ) end - it "has owned case logs" do - expect(organisation.owned_case_logs.first).to eq(owned_case_log) + it "has owned lettings logs" do + expect(organisation.owned_lettings_logs.first).to eq(owned_lettings_log) end - it "has managed case logs" do - expect(organisation.managed_case_logs.first).to eq(managed_case_log) + it "has managed lettings logs" do + expect(organisation.managed_lettings_logs.first).to eq(managed_lettings_log) end - it "has case logs" do - expect(organisation.case_logs.to_a).to match_array([owned_case_log, managed_case_log]) + it "has lettings logs" do + expect(organisation.lettings_logs.to_a).to match_array([owned_lettings_log, managed_lettings_log]) end - it "has case log status helper methods" do - expect(organisation.completed_case_logs.to_a).to eq([owned_case_log]) - expect(organisation.not_completed_case_logs.to_a).to eq([managed_case_log]) + it "has lettings log status helper methods" do + expect(organisation.completed_lettings_logs.to_a).to eq([owned_lettings_log]) + expect(organisation.not_completed_lettings_logs.to_a).to eq([managed_lettings_log]) end end end @@ -125,7 +125,7 @@ RSpec.describe Organisation, type: :model do expect { organisation.update!(name: "new test name") }.to change(organisation.versions, :count).by(1) end - it "allows case logs to be restored to a previous version" do + it "allows lettings logs to be restored to a previous version" do organisation.update!(name: "new test name") expect(organisation.paper_trail.previous_version.name).to eq("DLUHC") end diff --git a/spec/models/scheme_spec.rb b/spec/models/scheme_spec.rb index 3aff19b36..9d17d888c 100644 --- a/spec/models/scheme_spec.rb +++ b/spec/models/scheme_spec.rb @@ -16,7 +16,7 @@ RSpec.describe Scheme, type: :model do expect { scheme.update!(service_name: "new test name") }.to change(scheme.versions, :count).by(1) end - it "allows case logs to be restored to a previous version" do + it "allows lettings logs to be restored to a previous version" do scheme.update!(service_name: "new test name") expect(scheme.paper_trail.previous_version.service_name).to eq(name) end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 5b68a736e..3fa6354a8 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -4,18 +4,18 @@ RSpec.describe User, type: :model do describe "#new" do let(:user) { FactoryBot.create(:user) } let(:other_organisation) { FactoryBot.create(:organisation) } - let!(:owned_case_log) do + let!(:owned_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :completed, owning_organisation: user.organisation, managing_organisation: other_organisation, created_by: user, ) end - let!(:managed_case_log) do + let!(:managed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: other_organisation, managing_organisation: user.organisation, ) @@ -25,21 +25,21 @@ RSpec.describe User, type: :model do expect(user.organisation).to be_a(Organisation) end - it "has owned case logs through their organisation" do - expect(user.owned_case_logs.first).to eq(owned_case_log) + it "has owned lettings logs through their organisation" do + expect(user.owned_lettings_logs.first).to eq(owned_lettings_log) end - it "has managed case logs through their organisation" do - expect(user.managed_case_logs.first).to eq(managed_case_log) + it "has managed lettings logs through their organisation" do + expect(user.managed_lettings_logs.first).to eq(managed_lettings_log) end - it "has case logs through their organisation" do - expect(user.case_logs.to_a).to match_array([owned_case_log, managed_case_log]) + it "has lettings logs through their organisation" do + expect(user.lettings_logs.to_a).to match_array([owned_lettings_log, managed_lettings_log]) end - it "has case log status helper methods" do - expect(user.completed_case_logs.to_a).to match_array([owned_case_log]) - expect(user.not_completed_case_logs.to_a).to match_array([managed_case_log]) + it "has lettings log status helper methods" do + expect(user.completed_lettings_logs.to_a).to match_array([owned_lettings_log]) + expect(user.not_completed_lettings_logs.to_a).to match_array([managed_lettings_log]) end it "has a role" do @@ -114,17 +114,17 @@ RSpec.describe User, type: :model do }) end - it "can filter case logs by user, year and status" do - expect(user.case_logs_filters).to eq(%w[status years user]) + it "can filter lettings logs by user, year and status" do + expect(user.lettings_logs_filters).to eq(%w[status years user]) end end context "when the user is a Customer Support person" do let(:user) { FactoryBot.create(:user, :support) } - let!(:other_orgs_log) { FactoryBot.create(:case_log) } + let!(:other_orgs_log) { FactoryBot.create(:lettings_log) } it "has access to logs from all organisations" do - expect(user.case_logs.to_a).to match_array([owned_case_log, managed_case_log, other_orgs_log]) + expect(user.lettings_logs.to_a).to match_array([owned_lettings_log, managed_lettings_log, other_orgs_log]) end it "requires 2FA" do @@ -139,8 +139,8 @@ RSpec.describe User, type: :model do }) end - it "can filter case logs by user, year, status and organisation" do - expect(user.case_logs_filters).to eq(%w[status years user organisation]) + it "can filter lettings logs by user, year, status and organisation" do + expect(user.lettings_logs_filters).to eq(%w[status years user organisation]) end end @@ -164,7 +164,7 @@ RSpec.describe User, type: :model do expect { user.update!(name: "new test name") }.to change(user.versions, :count).by(1) end - it "allows case logs to be restored to a previous version" do + it "allows lettings logs to be restored to a previous version" do user.update!(name: "new test name") expect(user.paper_trail.previous_version.name).to eq("Danny Rojas") end diff --git a/spec/models/validations/date_validations_spec.rb b/spec/models/validations/date_validations_spec.rb index 3370f9cc0..35ff79b99 100644 --- a/spec/models/validations/date_validations_spec.rb +++ b/spec/models/validations/date_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::DateValidations do subject(:date_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::DateValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } let(:scheme) { FactoryBot.create(:scheme, end_date: Time.zone.today - 5.days) } let(:scheme_no_end_date) { FactoryBot.create(:scheme, end_date: nil) } diff --git a/spec/models/validations/financial_validations_spec.rb b/spec/models/validations/financial_validations_spec.rb index e4a266684..3a97afe94 100644 --- a/spec/models/validations/financial_validations_spec.rb +++ b/spec/models/validations/financial_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::FinancialValidations do subject(:financial_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::FinancialValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "earnings and income frequency" do it "when earnings are provided it validates that income frequency must be provided" do @@ -77,7 +77,7 @@ RSpec.describe Validations::FinancialValidations do end context "when outstanding rent or charges is yes" do - let(:record) { FactoryBot.create(:case_log, :about_completed) } + let(:record) { FactoryBot.create(:lettings_log, :about_completed) } it "expects that a shortfall is provided" do record.hbrentshortfall = 1 @@ -117,7 +117,7 @@ RSpec.describe Validations::FinancialValidations do describe "rent period validations" do let(:organisation) { FactoryBot.create(:organisation) } - let(:record) { FactoryBot.create(:case_log, owning_organisation: organisation) } + let(:record) { FactoryBot.create(:lettings_log, owning_organisation: organisation) } before do FactoryBot.create(:organisation_rent_period, organisation:, rent_period: 2) diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 5201adb6e..c5e523c2b 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::HouseholdValidations do subject(:household_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::HouseholdValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "reasonable preference validations" do context "when reasonable preference is homeless" do @@ -575,46 +575,6 @@ RSpec.describe Validations::HouseholdValidations do end end - describe "accessibility requirement validations" do - it "validates that mutually exclusive options can't be selected together" do - record.housingneeds_a = 1 - record.housingneeds_b = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]) - .to include(match I18n.t("validations.household.housingneeds_a.one_or_two_choices")) - record.housingneeds_a = 0 - record.housingneeds_b = 0 - record.housingneeds_g = 1 - record.housingneeds_f = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]) - .to include(match I18n.t("validations.household.housingneeds_a.one_or_two_choices")) - record.housingneeds_a = 1 - record.housingneeds_g = 1 - record.housingneeds_f = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]) - .to include(match I18n.t("validations.household.housingneeds_a.one_or_two_choices")) - end - - it "validates that non-mutually exclusive options can be selected together" do - record.housingneeds_a = 1 - record.housingneeds_f = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]).to be_empty - record.housingneeds_a = 0 - record.housingneeds_b = 1 - record.housingneeds_f = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]).to be_empty - record.housingneeds_b = 0 - record.housingneeds_c = 1 - record.housingneeds_f = 1 - household_validator.validate_accessibility_requirements(record) - expect(record.errors["accessibility_requirements"]).to be_empty - end - end - describe "referral validations" do context "when homelessness is assessed" do it "can be internal transfer" do diff --git a/spec/models/validations/local_authority_validations_spec.rb b/spec/models/validations/local_authority_validations_spec.rb index 83a7a7c83..1c0388c34 100644 --- a/spec/models/validations/local_authority_validations_spec.rb +++ b/spec/models/validations/local_authority_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::LocalAuthorityValidations do subject(:local_auth_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::LocalAuthorityValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "#validate_previous_accommodation_postcode" do it "does not add an error if the record ppostcode_full is missing" do diff --git a/spec/models/validations/property_validations_spec.rb b/spec/models/validations/property_validations_spec.rb index 5d8b6f51e..86f2b256e 100644 --- a/spec/models/validations/property_validations_spec.rb +++ b/spec/models/validations/property_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::PropertyValidations do subject(:property_validator) { property_validator_class.new } let(:property_validator_class) { Class.new { include Validations::PropertyValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "#validate_property_number_of_times_relet" do let(:expected_error) { I18n.t("validations.property.offered.relet_number") } diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index 56b335464..378aef904 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::SetupValidations do subject(:setup_validator) { setup_validator_class.new } let(:setup_validator_class) { Class.new { include Validations::SetupValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "#validate_irproduct" do it "adds an error when the intermediate rent product name is not provided but the rent type was given as other intermediate rent product" do diff --git a/spec/models/validations/shared_validations_spec.rb b/spec/models/validations/shared_validations_spec.rb index 043f3d057..0a6ab16c6 100644 --- a/spec/models/validations/shared_validations_spec.rb +++ b/spec/models/validations/shared_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::SharedValidations do subject(:household_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::SharedValidations } } - let(:record) { FactoryBot.create(:case_log) } + let(:record) { FactoryBot.create(:lettings_log) } describe "numeric min max validations" do context "when validating age" do diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index 64d7ba2ab..93ed01a20 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -2,7 +2,7 @@ require "rails_helper" RSpec.describe Validations::SoftValidations do let(:organisation) { FactoryBot.create(:organisation, provider_type: "PRP") } - let(:record) { FactoryBot.create(:case_log, owning_organisation: organisation) } + let(:record) { FactoryBot.create(:lettings_log, owning_organisation: organisation) } describe "rent min max validations" do before do diff --git a/spec/models/validations/tenancy_validations_spec.rb b/spec/models/validations/tenancy_validations_spec.rb index fe2792243..ccb5503d0 100644 --- a/spec/models/validations/tenancy_validations_spec.rb +++ b/spec/models/validations/tenancy_validations_spec.rb @@ -4,7 +4,7 @@ RSpec.describe Validations::TenancyValidations do subject(:tenancy_validator) { validator_class.new } let(:validator_class) { Class.new { include Validations::TenancyValidations } } - let(:record) { FactoryBot.create(:case_log, startdate: Time.zone.local(2021, 5, 1)) } + let(:record) { FactoryBot.create(:lettings_log, startdate: Time.zone.local(2021, 5, 1)) } describe "fixed term tenancy validations" do context "when fixed term tenancy" do @@ -107,7 +107,7 @@ RSpec.describe Validations::TenancyValidations do end context "when the collection start year is 2022 or later" do - let(:record) { FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 5, 1)) } + let(:record) { FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 5, 1)) } context "when type of tenancy is Secure - fixed term" do let(:expected_error) { I18n.t("validations.tenancy.length.secure") } @@ -240,7 +240,7 @@ RSpec.describe Validations::TenancyValidations do describe "joint tenancy validation" do context "when the data inputter has said that there is only one member in the household" do - let(:record) { FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 5, 1)) } + let(:record) { FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 5, 1)) } let(:expected_error) { I18n.t("validations.tenancy.not_joint") } let(:hhmemb_expected_error) { I18n.t("validations.tenancy.joint_more_than_one_member") } diff --git a/spec/requests/bulk_upload_controller_spec.rb b/spec/requests/bulk_upload_controller_spec.rb index 5e8a43124..9869079af 100644 --- a/spec/requests/bulk_upload_controller_spec.rb +++ b/spec/requests/bulk_upload_controller_spec.rb @@ -22,7 +22,7 @@ RSpec.describe BulkUploadController, type: :request do end describe "POST #bulk upload" do - before { post url, params: { bulk_upload: { case_log_bulk_upload: valid_file } } } + before { post url, params: { bulk_upload: { lettings_log_bulk_upload: valid_file } } } it "does not let you submit bulk uploads" do expect(response).to redirect_to("/account/sign-in") @@ -45,26 +45,26 @@ RSpec.describe BulkUploadController, type: :request do end it "returns a page with a file upload form" do - expect(response.body).to match(/ 31, "startdate(2i)" => 6, @@ -271,7 +271,7 @@ RSpec.describe FormController, type: :request do end it "validates the date correctly" do - post "/logs/#{case_log.id}/form", params: params + post "/logs/#{lettings_log.id}/form", params: params follow_redirect! expect(page).to have_content("There is a problem") end @@ -282,8 +282,8 @@ RSpec.describe FormController, type: :request do let(:answer) { 20 } let(:params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: page_id, age1: answer, age2: 2000, @@ -292,7 +292,7 @@ RSpec.describe FormController, type: :request do end before do - post "/logs/#{case_log.id}/form", params: + post "/logs/#{lettings_log.id}/form", params: end it "re-renders the same page with errors if validation fails" do @@ -300,14 +300,14 @@ RSpec.describe FormController, type: :request do end it "only updates answers that apply to the page being submitted" do - case_log.reload - expect(case_log.age1).to eq(answer) - expect(case_log.age2).to be nil + lettings_log.reload + expect(lettings_log.age1).to eq(answer) + expect(lettings_log.age2).to be nil end it "tracks who updated the record" do - case_log.reload - whodunnit_actor = case_log.versions.last.actor + lettings_log.reload + whodunnit_actor = lettings_log.versions.last.actor expect(whodunnit_actor).to be_a(User) expect(whodunnit_actor.id).to eq(user.id) end @@ -319,8 +319,8 @@ RSpec.describe FormController, type: :request do let(:page_id) { "property_postcode" } let(:valid_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: page_id, postcode_known: "0", postcode_full: "", @@ -329,12 +329,12 @@ RSpec.describe FormController, type: :request do end before do - case_log.update!(postcode_known: 1, postcode_full: "NW1 8RR") - post "/logs/#{case_log.id}/form", params: valid_params + lettings_log.update!(postcode_known: 1, postcode_full: "NW1 8RR") + post "/logs/#{lettings_log.id}/form", params: valid_params end it "does not require you to answer that question" do - expect(response).to redirect_to("/logs/#{case_log.id}/do-you-know-the-local-authority") + expect(response).to redirect_to("/logs/#{lettings_log.id}/do-you-know-the-local-authority") end end end @@ -342,10 +342,10 @@ RSpec.describe FormController, type: :request do end context "with checkbox questions" do - let(:case_log_form_params) do + let(:lettings_log_form_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "accessibility_requirements", accessibility_requirements: %w[housingneeds_b], @@ -353,10 +353,10 @@ RSpec.describe FormController, type: :request do } end - let(:new_case_log_form_params) do + let(:new_lettings_log_form_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "accessibility_requirements", accessibility_requirements: %w[housingneeds_c], }, @@ -364,26 +364,26 @@ RSpec.describe FormController, type: :request do end it "sets checked items to true" do - post "/logs/#{case_log.id}/form", params: case_log_form_params - case_log.reload + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_params + lettings_log.reload - expect(case_log.housingneeds_b).to eq(1) + expect(lettings_log.housingneeds_b).to eq(1) end it "sets previously submitted items to false when resubmitted with new values" do - post "/logs/#{case_log.id}/form", params: new_case_log_form_params - case_log.reload + post "/logs/#{lettings_log.id}/form", params: new_lettings_log_form_params + lettings_log.reload - expect(case_log.housingneeds_b).to eq(0) - expect(case_log.housingneeds_c).to eq(1) + expect(lettings_log.housingneeds_b).to eq(0) + expect(lettings_log.housingneeds_c).to eq(1) end context "with a page having checkbox and non-checkbox questions" do let(:tenant_code) { "BZ355" } - let(:case_log_form_params) do + let(:lettings_log_form_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "accessibility_requirements", accessibility_requirements: %w[ housingneeds_a @@ -411,44 +411,44 @@ RSpec.describe FormController, type: :request do Form::Question.new("tenancycode", { "type" => "text" }, nil), ] end - let(:page) { case_log.form.get_page("accessibility_requirements") } + let(:page) { lettings_log.form.get_page("accessibility_requirements") } it "updates both question fields" do allow(page).to receive(:questions).and_return(questions_for_page) - post "/logs/#{case_log.id}/form", params: case_log_form_params - case_log.reload + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_params + lettings_log.reload - expect(case_log.housingneeds_a).to eq(1) - expect(case_log.housingneeds_f).to eq(1) - expect(case_log.tenancycode).to eq(tenant_code) + expect(lettings_log.housingneeds_a).to eq(1) + expect(lettings_log.housingneeds_f).to eq(1) + expect(lettings_log.tenancycode).to eq(tenant_code) end end end context "with conditional routing" do - let(:validator) { case_log._validators[nil].first } - let(:case_log_form_conditional_question_yes_params) do + let(:validator) { lettings_log._validators[nil].first } + let(:lettings_log_form_conditional_question_yes_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "conditional_question", preg_occ: 1, }, } end - let(:case_log_form_conditional_question_no_params) do + let(:lettings_log_form_conditional_question_no_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "conditional_question", preg_occ: 2, }, } end - let(:case_log_form_conditional_question_wchair_yes_params) do + let(:lettings_log_form_conditional_question_wchair_yes_params) do { - id: case_log.id, - case_log: { + id: lettings_log.id, + lettings_log: { page: "property_wheelchair_accessible", wchair: 1, }, @@ -460,17 +460,17 @@ RSpec.describe FormController, type: :request do end it "routes to the appropriate conditional page based on the question answer of the current page" do - post "/logs/#{case_log.id}/form", params: case_log_form_conditional_question_yes_params - expect(response).to redirect_to("/logs/#{case_log.id}/conditional-question-yes-page") + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_conditional_question_yes_params + expect(response).to redirect_to("/logs/#{lettings_log.id}/conditional-question-yes-page") - post "/logs/#{case_log.id}/form", params: case_log_form_conditional_question_no_params - expect(response).to redirect_to("/logs/#{case_log.id}/conditional-question-no-page") + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_conditional_question_no_params + expect(response).to redirect_to("/logs/#{lettings_log.id}/conditional-question-no-page") end it "routes to the page if at least one of the condition sets is met" do - post "/logs/#{case_log.id}/form", params: case_log_form_conditional_question_wchair_yes_params - post "/logs/#{case_log.id}/form", params: case_log_form_conditional_question_no_params - expect(response).to redirect_to("/logs/#{case_log.id}/conditional-question-yes-page") + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_conditional_question_wchair_yes_params + post "/logs/#{lettings_log.id}/form", params: lettings_log_form_conditional_question_no_params + expect(response).to redirect_to("/logs/#{lettings_log.id}/conditional-question-yes-page") end end @@ -478,26 +478,26 @@ RSpec.describe FormController, type: :request do context "and navigating to an interruption screen" do let(:interrupt_params) do { - id: completed_case_log.id, - case_log: { + id: completed_lettings_log.id, + lettings_log: { page: "net_income_value_check", net_income_value_check: value, }, } end - let(:referrer) { "/logs/#{completed_case_log.id}/net-income-value-check?referrer=check_answers" } + let(:referrer) { "/logs/#{completed_lettings_log.id}/net-income-value-check?referrer=check_answers" } before do - completed_case_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared?§ - allow(completed_case_log).to receive(:net_income_soft_validation_triggered?).and_return(true) - post "/logs/#{completed_case_log.id}/form", params: interrupt_params, headers: headers.merge({ "HTTP_REFERER" => referrer }) + completed_lettings_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared?§ + allow(completed_lettings_log).to receive(:net_income_soft_validation_triggered?).and_return(true) + post "/logs/#{completed_lettings_log.id}/form", params: interrupt_params, headers: headers.merge({ "HTTP_REFERER" => referrer }) end context "when yes is answered" do let(:value) { 0 } it "redirects back to check answers if 'yes' is selected" do - expect(response).to redirect_to("/logs/#{completed_case_log.id}/income-and-benefits/check-answers") + expect(response).to redirect_to("/logs/#{completed_lettings_log.id}/income-and-benefits/check-answers") end end @@ -505,28 +505,28 @@ RSpec.describe FormController, type: :request do let(:value) { 1 } it "redirects to the previous question if 'no' is selected" do - expect(response).to redirect_to("/logs/#{completed_case_log.id}/net-income?referrer=check_answers") + expect(response).to redirect_to("/logs/#{completed_lettings_log.id}/net-income?referrer=check_answers") end end end end - context "with case logs that are not owned or managed by your organisation" do + context "with lettings logs that are not owned or managed by your organisation" do let(:answer) { 25 } let(:other_organisation) { FactoryBot.create(:organisation) } - let(:unauthorized_case_log) do + let(:unauthorized_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: other_organisation, managing_organisation: other_organisation, ) end before do - post "/logs/#{unauthorized_case_log.id}/form", params: {} + post "/logs/#{unauthorized_lettings_log.id}/form", params: {} end - it "does not let you post form answers to case logs you don't have access to" do + it "does not let you post form answers to lettings logs you don't have access to" do expect(response).to have_http_status(:not_found) end end diff --git a/spec/requests/case_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb similarity index 72% rename from spec/requests/case_logs_controller_spec.rb rename to spec/requests/lettings_logs_controller_spec.rb index 6ed0854ed..3063b3fb3 100644 --- a/spec/requests/case_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe CaseLogsController, type: :request do +RSpec.describe LettingsLogsController, type: :request do let(:user) { FactoryBot.create(:user) } let(:owning_organisation) { user.organisation } let(:managing_organisation) { owning_organisation } @@ -56,12 +56,12 @@ RSpec.describe CaseLogsController, type: :request do expect(response).to have_http_status(:success) end - it "returns a serialized Case Log" do + it "returns a serialized lettings log" do json_response = JSON.parse(response.body) - expect(json_response.keys).to match_array(CaseLog.new.attributes.keys) + expect(json_response.keys).to match_array(LettingsLog.new.attributes.keys) end - it "creates a case log with the values passed" do + it "creates a lettings log with the values passed" do json_response = JSON.parse(response.body) expect(json_response["tenancycode"]).to eq(tenant_code) expect(json_response["age1"]).to eq(age1) @@ -72,33 +72,33 @@ RSpec.describe CaseLogsController, type: :request do let(:age1) { 2000 } let(:offered) { 21 } - it "validates case log parameters" do + it "validates lettings log parameters" do json_response = JSON.parse(response.body) expect(response).to have_http_status(:unprocessable_entity) expect(json_response["errors"]).to match_array([["offered", [I18n.t("validations.property.offered.relet_number")]], ["age1", [I18n.t("validations.numeric.valid", field: "Lead tenant’s age", min: 16, max: 120)]]]) end end - context "with a partial case log submission" do + context "with a partial lettings log submission" do it "marks the record as in_progress" do json_response = JSON.parse(response.body) expect(json_response["status"]).to eq(in_progress) end end - context "with a complete case log submission" do + context "with a complete lettings log submission" do let(:org_params) do { - "case_log" => { + "lettings_log" => { "owning_organisation_id" => owning_organisation.id, "managing_organisation_id" => managing_organisation.id, "created_by_id" => user.id, }, } end - let(:case_log_params) { JSON.parse(File.open("spec/fixtures/complete_case_log.json").read) } + let(:lettings_log_params) { JSON.parse(File.open("spec/fixtures/complete_lettings_log.json").read) } let(:params) do - case_log_params.merge(org_params) { |_k, a_val, b_val| a_val.merge(b_val) } + lettings_log_params.merge(org_params) { |_k, a_val, b_val| a_val.merge(b_val) } end it "marks the record as completed" do @@ -132,7 +132,7 @@ RSpec.describe CaseLogsController, type: :request do it "tracks who created the record" do created_id = response.location.match(/[0-9]+/)[0] - whodunnit_actor = CaseLog.find_by(id: created_id).versions.last.actor + whodunnit_actor = LettingsLog.find_by(id: created_id).versions.last.actor expect(whodunnit_actor).to be_a(User) expect(whodunnit_actor.id).to eq(user.id) end @@ -144,17 +144,17 @@ RSpec.describe CaseLogsController, type: :request do let(:user) { FactoryBot.create(:user) } let(:organisation) { user.organisation } let(:other_organisation) { FactoryBot.create(:organisation) } - let!(:case_log) do + let!(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: organisation, managing_organisation: organisation, tenancycode: "LC783", ) end - let!(:unauthorized_case_log) do + let!(:unauthorized_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: other_organisation, managing_organisation: other_organisation, tenancycode: "UA984", @@ -178,7 +178,7 @@ RSpec.describe CaseLogsController, type: :request do expect(page).to have_content("Managed by") end - it "shows case logs for all organisations" do + it "shows lettings logs for all organisations" do get "/logs", headers: headers, params: {} expect(page).to have_content("LC783") expect(page).to have_content("UA984") @@ -186,7 +186,7 @@ RSpec.describe CaseLogsController, type: :request do context "when there are no logs in the database" do before do - CaseLog.destroy_all + LettingsLog.destroy_all end it "page has correct title" do @@ -199,76 +199,76 @@ RSpec.describe CaseLogsController, type: :request do context "with status filter" do let(:organisation_2) { FactoryBot.create(:organisation) } let(:user_2) { FactoryBot.create(:user, organisation: organisation_2) } - let!(:in_progress_case_log) do - FactoryBot.create(:case_log, :in_progress, + let!(:in_progress_lettings_log) do + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: organisation, managing_organisation: organisation, created_by: user) end - let!(:completed_case_log) do - FactoryBot.create(:case_log, :completed, + let!(:completed_lettings_log) do + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation_2, managing_organisation: organisation, created_by: user_2) end - it "shows case logs for multiple selected statuses" do + it "shows lettings logs for multiple selected statuses" do get "/logs?status[]=in_progress&status[]=completed", headers: headers, params: {} - expect(page).to have_link(in_progress_case_log.id.to_s) - expect(page).to have_link(completed_case_log.id.to_s) + expect(page).to have_link(in_progress_lettings_log.id.to_s) + expect(page).to have_link(completed_lettings_log.id.to_s) end - it "shows case logs for one selected status" do + it "shows lettings logs for one selected status" do get "/logs?status[]=in_progress", headers: headers, params: {} - expect(page).to have_link(in_progress_case_log.id.to_s) - expect(page).not_to have_link(completed_case_log.id.to_s) + expect(page).to have_link(in_progress_lettings_log.id.to_s) + expect(page).not_to have_link(completed_lettings_log.id.to_s) end it "filters on organisation" do get "/logs?organisation[]=#{organisation_2.id}", headers: headers, params: {} - expect(page).to have_link(completed_case_log.id.to_s) - expect(page).not_to have_link(in_progress_case_log.id.to_s) + expect(page).to have_link(completed_lettings_log.id.to_s) + expect(page).not_to have_link(in_progress_lettings_log.id.to_s) end it "does not reset the filters" do get "/logs?status[]=in_progress", headers: headers, params: {} - expect(page).to have_link(in_progress_case_log.id.to_s) - expect(page).not_to have_link(completed_case_log.id.to_s) + expect(page).to have_link(in_progress_lettings_log.id.to_s) + expect(page).not_to have_link(completed_lettings_log.id.to_s) get "/logs", headers: headers, params: {} - expect(page).to have_link(in_progress_case_log.id.to_s) - expect(page).not_to have_link(completed_case_log.id.to_s) + expect(page).to have_link(in_progress_lettings_log.id.to_s) + expect(page).not_to have_link(completed_lettings_log.id.to_s) end end context "with year filter" do - let!(:case_log_2021) do - FactoryBot.create(:case_log, :in_progress, + let!(:lettings_log_2021) do + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: organisation, startdate: Time.zone.local(2022, 3, 1), managing_organisation: organisation) end - let!(:case_log_2022) do - case_log = FactoryBot.build(:case_log, :completed, - owning_organisation: organisation, - mrcdate: Time.zone.local(2022, 2, 1), - startdate: Time.zone.local(2022, 12, 1), - tenancy: 6, - managing_organisation: organisation) - case_log.save!(validate: false) - case_log + let!(:lettings_log_2022) do + lettings_log = FactoryBot.build(:lettings_log, :completed, + owning_organisation: organisation, + mrcdate: Time.zone.local(2022, 2, 1), + startdate: Time.zone.local(2022, 12, 1), + tenancy: 6, + managing_organisation: organisation) + lettings_log.save!(validate: false) + lettings_log end - it "shows case logs for multiple selected years" do + it "shows lettings logs for multiple selected years" do get "/logs?years[]=2021&years[]=2022", headers: headers, params: {} - expect(page).to have_link(case_log_2021.id.to_s) - expect(page).to have_link(case_log_2022.id.to_s) + expect(page).to have_link(lettings_log_2021.id.to_s) + expect(page).to have_link(lettings_log_2022.id.to_s) end - it "shows case logs for one selected year" do + it "shows lettings logs for one selected year" do get "/logs?years[]=2021", headers: headers, params: {} - expect(page).to have_link(case_log_2021.id.to_s) - expect(page).not_to have_link(case_log_2022.id.to_s) + expect(page).to have_link(lettings_log_2021.id.to_s) + expect(page).not_to have_link(lettings_log_2022.id.to_s) end end @@ -281,15 +281,15 @@ RSpec.describe CaseLogsController, type: :request do Timecop.unfreeze end - let!(:case_log_2021) do - FactoryBot.create(:case_log, :in_progress, + let!(:lettings_log_2021) do + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: organisation, startdate: Time.zone.local(2022, 3, 1), managing_organisation: organisation, created_by: user) end - let!(:case_log_2022) do - FactoryBot.create(:case_log, :completed, + let!(:lettings_log_2022) do + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation, mrcdate: Time.zone.local(2022, 2, 1), startdate: Time.zone.local(2022, 12, 1), @@ -297,8 +297,8 @@ RSpec.describe CaseLogsController, type: :request do managing_organisation: organisation, created_by: user) end - let!(:case_log_2022_in_progress) do - FactoryBot.build(:case_log, :in_progress, + let!(:lettings_log_2022_in_progress) do + FactoryBot.build(:lettings_log, :in_progress, owning_organisation: organisation, mrcdate: Time.zone.local(2022, 2, 1), startdate: Time.zone.local(2022, 12, 1), @@ -308,18 +308,18 @@ RSpec.describe CaseLogsController, type: :request do created_by: user) end - it "shows case logs for multiple selected statuses and years" do + it "shows lettings logs for multiple selected statuses and years" do get "/logs?years[]=2021&years[]=2022&status[]=in_progress&status[]=completed", headers: headers, params: {} - expect(page).to have_link(case_log_2021.id.to_s) - expect(page).to have_link(case_log_2022.id.to_s) - expect(page).to have_link(case_log_2022_in_progress.id.to_s) + expect(page).to have_link(lettings_log_2021.id.to_s) + expect(page).to have_link(lettings_log_2022.id.to_s) + expect(page).to have_link(lettings_log_2022_in_progress.id.to_s) end - it "shows case logs for one selected status" do + it "shows lettings logs for one selected status" do get "/logs?years[]=2022&status[]=in_progress", headers: headers, params: {} - expect(page).to have_link(case_log_2022_in_progress.id.to_s) - expect(page).not_to have_link(case_log_2021.id.to_s) - expect(page).not_to have_link(case_log_2022.id.to_s) + expect(page).to have_link(lettings_log_2022_in_progress.id.to_s) + expect(page).not_to have_link(lettings_log_2021.id.to_s) + expect(page).not_to have_link(lettings_log_2022.id.to_s) end end end @@ -337,16 +337,16 @@ RSpec.describe CaseLogsController, type: :request do end context "when using a search query" do - let(:logs) { FactoryBot.create_list(:case_log, 3, :completed, owning_organisation: user.organisation, created_by: user) } - let(:log_to_search) { FactoryBot.create(:case_log, :completed, owning_organisation: user.organisation, created_by: user) } - let(:log_total_count) { CaseLog.where(owning_organisation: user.organisation).count } + let(:logs) { FactoryBot.create_list(:lettings_log, 3, :completed, owning_organisation: user.organisation, created_by: user) } + let(:log_to_search) { FactoryBot.create(:lettings_log, :completed, owning_organisation: user.organisation, created_by: user) } + let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count } it "has search results in the title" do get "/logs?search=#{log_to_search.id}", headers: headers, params: {} expect(page).to have_title("Logs (1 log matching ‘#{log_to_search.id}’) - Submit social housing lettings and sales data (CORE) - GOV.UK") end - it "shows case logs matching the id" do + it "shows lettings logs matching the id" do get "/logs?search=#{log_to_search.id}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -354,7 +354,7 @@ RSpec.describe CaseLogsController, type: :request do end end - it "shows case logs matching the tenant code" do + it "shows lettings logs matching the tenant code" do get "/logs?search=#{log_to_search.tenancycode}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -362,7 +362,7 @@ RSpec.describe CaseLogsController, type: :request do end end - it "shows case logs matching the property reference" do + it "shows lettings logs matching the property reference" do get "/logs?search=#{log_to_search.propcode}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -370,7 +370,7 @@ RSpec.describe CaseLogsController, type: :request do end end - it "shows case logs matching the property postcode" do + it "shows lettings logs matching the property postcode" do get "/logs?search=#{log_to_search.postcode_full}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -379,7 +379,7 @@ RSpec.describe CaseLogsController, type: :request do end context "when more than one results with matching postcode" do - let!(:matching_postcode_log) { FactoryBot.create(:case_log, :completed, owning_organisation: user.organisation, postcode_full: log_to_search.postcode_full) } + let!(:matching_postcode_log) { FactoryBot.create(:lettings_log, :completed, owning_organisation: user.organisation, postcode_full: log_to_search.postcode_full) } it "displays all matching logs" do get "/logs?search=#{log_to_search.postcode_full}", headers: headers, params: {} @@ -393,8 +393,8 @@ RSpec.describe CaseLogsController, type: :request do context "when there are more than 1 page of search results" do let(:postcode) { "XX11YY" } - let(:logs) { FactoryBot.create_list(:case_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode, created_by: user) } - let(:log_total_count) { CaseLog.where(owning_organisation: user.organisation).count } + let(:logs) { FactoryBot.create_list(:lettings_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode, created_by: user) } + let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count } it "has title with pagination details for page 1" do get "/logs?search=#{logs[0].postcode_full}", headers: headers, params: {} @@ -430,7 +430,7 @@ RSpec.describe CaseLogsController, type: :request do context "when search and filter is present" do let(:matching_postcode) { log_to_search.postcode_full } let(:matching_status) { "in_progress" } - let!(:log_matching_filter_and_search) { FactoryBot.create(:case_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode, created_by: user) } + let!(:log_matching_filter_and_search) { FactoryBot.create(:lettings_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode, created_by: user) } it "shows only logs matching both search and filters" do get "/logs?search=#{matching_postcode}&status[]=#{matching_status}", headers: headers, params: {} @@ -453,20 +453,20 @@ RSpec.describe CaseLogsController, type: :request do expect(CGI.unescape_html(response.body)).to match(/logs/) end - it "only shows case logs for your organisation" do - expected_case_row_log = "Log #{case_log.id}" - unauthorized_case_row_log = "Log #{unauthorized_case_log.id}" + it "only shows lettings logs for your organisation" do + expected_case_row_log = "Log #{lettings_log.id}" + unauthorized_case_row_log = "Log #{unauthorized_lettings_log.id}" expect(CGI.unescape_html(response.body)).to include(expected_case_row_log) expect(CGI.unescape_html(response.body)).not_to include(unauthorized_case_row_log) end it "shows the formatted created at date for each log" do - formatted_date = case_log.created_at.to_formatted_s(:govuk_date) + formatted_date = lettings_log.created_at.to_formatted_s(:govuk_date) expect(CGI.unescape_html(response.body)).to include(formatted_date) end it "shows the log's status" do - expect(CGI.unescape_html(response.body)).to include(case_log.status.humanize) + expect(CGI.unescape_html(response.body)).to include(lettings_log.status.humanize) end it "shows the total log count" do @@ -503,8 +503,8 @@ RSpec.describe CaseLogsController, type: :request do let(:tenant_code_2) { "TC8745" } before do - FactoryBot.create(:case_log, :in_progress, owning_organisation: org_1, tenancycode: tenant_code_1) - FactoryBot.create(:case_log, :in_progress, owning_organisation: org_2, tenancycode: tenant_code_2) + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: org_1, tenancycode: tenant_code_1) + FactoryBot.create(:lettings_log, :in_progress, owning_organisation: org_2, tenancycode: tenant_code_2) allow(user).to receive(:need_two_factor_authentication?).and_return(false) sign_in user end @@ -539,7 +539,7 @@ RSpec.describe CaseLogsController, type: :request do context "when there are more than 20 logs" do before do - FactoryBot.create_list(:case_log, 25, owning_organisation: organisation, managing_organisation: organisation) + FactoryBot.create_list(:lettings_log, 25, owning_organisation: organisation, managing_organisation: organisation) end context "when on the first page" do @@ -591,9 +591,9 @@ RSpec.describe CaseLogsController, type: :request do end end - context "when requesting a specific case log" do - let(:completed_case_log) { FactoryBot.create(:case_log, :completed) } - let(:id) { completed_case_log.id } + context "when requesting a specific lettings log" do + let(:completed_lettings_log) { FactoryBot.create(:lettings_log, :completed) } + let(:id) { completed_lettings_log.id } before do get "/logs/#{id}", headers: @@ -603,42 +603,42 @@ RSpec.describe CaseLogsController, type: :request do expect(response).to have_http_status(:success) end - it "returns a serialized Case Log" do + it "returns a serialized lettings log" do json_response = JSON.parse(response.body) - expect(json_response["status"]).to eq(completed_case_log.status) + expect(json_response["status"]).to eq(completed_lettings_log.status) end - context "when requesting an invalid case log id" do - let(:id) { (CaseLog.order(:id).last&.id || 0) + 1 } + context "when requesting an invalid lettings log id" do + let(:id) { (LettingsLog.order(:id).last&.id || 0) + 1 } it "returns 404" do expect(response).to have_http_status(:not_found) end end - context "when editing a case log" do + context "when editing a lettings log" do let(:headers) { { "Accept" => "text/html" } } context "with a user that is not signed in" do - it "does not let the user get case log tasklist pages they don't have access to" do - get "/logs/#{case_log.id}", headers: headers, params: {} + it "does not let the user get lettings log tasklist pages they don't have access to" do + get "/logs/#{lettings_log.id}", headers: headers, params: {} expect(response).to redirect_to("/account/sign-in") end end context "with a signed in user" do - context "with case logs that are owned or managed by your organisation" do + context "with lettings logs that are owned or managed by your organisation" do before do sign_in user - get "/logs/#{case_log.id}", headers:, params: {} + get "/logs/#{lettings_log.id}", headers:, params: {} end - it "shows the tasklist for case logs you have access to" do + it "shows the tasklist for lettings logs you have access to" do expect(response.body).to match("Log") - expect(response.body).to match(case_log.id.to_s) + expect(response.body).to match(lettings_log.id.to_s) end - it "displays a section status for a case log" do + it "displays a section status for a lettings log" do assert_select ".govuk-tag", text: /Not started/, count: 6 assert_select ".govuk-tag", text: /In progress/, count: 2 assert_select ".govuk-tag", text: /Completed/, count: 0 @@ -646,10 +646,10 @@ RSpec.describe CaseLogsController, type: :request do end end - context "with a case log with a single section complete" do - let(:section_completed_case_log) do + context "with a lettings log with a single section complete" do + let(:section_completed_lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, :conditional_section_complete, owning_organisation: organisation, managing_organisation: organisation, @@ -658,23 +658,23 @@ RSpec.describe CaseLogsController, type: :request do before do sign_in user - get "/logs/#{section_completed_case_log.id}", headers:, params: {} + get "/logs/#{section_completed_lettings_log.id}", headers:, params: {} end - it "displays a section status for a case log" do + it "displays a section status for a lettings log" do assert_select ".govuk-tag", text: /Not started/, count: 6 assert_select ".govuk-tag", text: /Completed/, count: 1 assert_select ".govuk-tag", text: /Cannot start yet/, count: 1 end end - context "with case logs that are not owned or managed by your organisation" do + context "with lettings logs that are not owned or managed by your organisation" do before do sign_in user - get "/logs/#{unauthorized_case_log.id}", headers:, params: {} + get "/logs/#{unauthorized_lettings_log.id}", headers:, params: {} end - it "does not show the tasklist for case logs you don't have access to" do + it "does not show the tasklist for lettings logs you don't have access to" do expect(response).to have_http_status(:not_found) end end @@ -683,13 +683,13 @@ RSpec.describe CaseLogsController, type: :request do end context "when accessing the check answers page" do - let(:postcode_case_log) do - FactoryBot.create(:case_log, + let(:postcode_lettings_log) do + FactoryBot.create(:lettings_log, owning_organisation: organisation, managing_organisation: organisation, postcode_known: "No") end - let(:id) { postcode_case_log.id } + let(:id) { postcode_lettings_log.id } before do stub_request(:get, /api.postcodes.io/) @@ -698,12 +698,12 @@ RSpec.describe CaseLogsController, type: :request do end it "shows the inferred la" do - case_log = FactoryBot.create(:case_log, - owning_organisation: organisation, - managing_organisation: organisation, - postcode_known: 1, - postcode_full: "PO5 3TE") - id = case_log.id + lettings_log = FactoryBot.create(:lettings_log, + owning_organisation: organisation, + managing_organisation: organisation, + postcode_known: 1, + postcode_full: "PO5 3TE") + id = lettings_log.id get "/logs/#{id}/property-information/check-answers" expected_inferred_answer = "Manchester" expect(CGI.unescape_html(response.body)).to include(expected_inferred_answer) @@ -733,9 +733,9 @@ RSpec.describe CaseLogsController, type: :request do let(:other_organisation) { FactoryBot.create(:organisation) } context "when a log exists" do - let!(:case_log) do + let!(:lettings_log) do FactoryBot.create( - :case_log, + :lettings_log, owning_organisation: organisation, managing_organisation: organisation, ecstat1: 1, @@ -744,8 +744,8 @@ RSpec.describe CaseLogsController, type: :request do before do sign_in user - FactoryBot.create(:case_log) - FactoryBot.create(:case_log, + FactoryBot.create(:lettings_log) + FactoryBot.create(:lettings_log, :completed, owning_organisation: organisation, managing_organisation: organisation, @@ -756,7 +756,7 @@ RSpec.describe CaseLogsController, type: :request do it "downloads a CSV file with headers" do csv = CSV.parse(response.body) expect(csv.first.first).to eq("\uFEFFid") - expect(csv.second.first).to eq(case_log.id.to_s) + expect(csv.second.first).to eq(lettings_log.id.to_s) end it "does not download other orgs logs" do @@ -776,17 +776,17 @@ RSpec.describe CaseLogsController, type: :request do end it "dowloads searched logs" do - get "/logs?search=#{case_log.id}", headers:, params: {} + get "/logs?search=#{lettings_log.id}", headers:, params: {} csv = CSV.parse(response.body) - expect(csv.count).to eq(CaseLog.search_by(case_log.id.to_s).count + 1) + expect(csv.count).to eq(LettingsLog.search_by(lettings_log.id.to_s).count + 1) end context "when both filter and search applied" do let(:postcode) { "XX1 1TG" } before do - FactoryBot.create(:case_log, :in_progress, postcode_full: postcode, owning_organisation: organisation, created_by: user) - FactoryBot.create(:case_log, :completed, postcode_full: postcode, owning_organisation: organisation, created_by: user) + FactoryBot.create(:lettings_log, :in_progress, postcode_full: postcode, owning_organisation: organisation, created_by: user) + FactoryBot.create(:lettings_log, :completed, postcode_full: postcode, owning_organisation: organisation, created_by: user) end it "downloads logs matching both csv and filter logs" do @@ -800,7 +800,7 @@ RSpec.describe CaseLogsController, type: :request do context "when there are more than 20 logs" do before do sign_in user - FactoryBot.create_list(:case_log, 26, owning_organisation: organisation) + FactoryBot.create_list(:lettings_log, 26, owning_organisation: organisation) get "/logs", headers:, params: {} end @@ -812,13 +812,13 @@ RSpec.describe CaseLogsController, type: :request do end describe "PATCH" do - let(:case_log) do - FactoryBot.create(:case_log, :in_progress, tenancycode: "Old Value", postcode_full: "M1 1AE") + let(:lettings_log) do + FactoryBot.create(:lettings_log, :in_progress, tenancycode: "Old Value", postcode_full: "M1 1AE") end let(:params) do { tenancycode: "New Value" } end - let(:id) { case_log.id } + let(:id) { lettings_log.id } before do patch "/logs/#{id}", headers:, params: params.to_json @@ -828,21 +828,21 @@ RSpec.describe CaseLogsController, type: :request do expect(response).to have_http_status(:success) end - it "updates the case log with the given fields and keeps original values where none are passed" do - case_log.reload - expect(case_log.tenancycode).to eq("New Value") - expect(case_log.postcode_full).to eq("M1 1AE") + it "updates the lettings log with the given fields and keeps original values where none are passed" do + lettings_log.reload + expect(lettings_log.tenancycode).to eq("New Value") + expect(lettings_log.postcode_full).to eq("M1 1AE") end - context "with an invalid case log id" do - let(:id) { (CaseLog.order(:id).last&.id || 0) + 1 } + context "with an invalid lettings log id" do + let(:id) { (LettingsLog.order(:id).last&.id || 0) + 1 } it "returns 404" do expect(response).to have_http_status(:not_found) end end - context "with an invalid case log params" do + context "with an invalid lettings log params" do let(:params) { { age1: 200 } } it "returns 422" do @@ -870,13 +870,13 @@ RSpec.describe CaseLogsController, type: :request do # fields in both cases, and both route to #Update. Rails generally recommends PATCH as it more closely matches # what actually happens to an ActiveRecord object and what we're doing here, but either is allowed. describe "PUT" do - let(:case_log) do - FactoryBot.create(:case_log, :in_progress, tenancycode: "Old Value", postcode_full: "SW1A 2AA") + let(:lettings_log) do + FactoryBot.create(:lettings_log, :in_progress, tenancycode: "Old Value", postcode_full: "SW1A 2AA") end let(:params) do { tenancycode: "New Value" } end - let(:id) { case_log.id } + let(:id) { lettings_log.id } before do put "/logs/#{id}", headers:, params: params.to_json @@ -886,14 +886,14 @@ RSpec.describe CaseLogsController, type: :request do expect(response).to have_http_status(:success) end - it "updates the case log with the given fields and keeps original values where none are passed" do - case_log.reload - expect(case_log.tenancycode).to eq("New Value") - expect(case_log.postcode_full).to eq("SW1A 2AA") + it "updates the lettings log with the given fields and keeps original values where none are passed" do + lettings_log.reload + expect(lettings_log.tenancycode).to eq("New Value") + expect(lettings_log.postcode_full).to eq("SW1A 2AA") end - context "with an invalid case log id" do - let(:id) { (CaseLog.order(:id).last&.id || 0) + 1 } + context "with an invalid lettings log id" do + let(:id) { (LettingsLog.order(:id).last&.id || 0) + 1 } it "returns 404" do expect(response).to have_http_status(:not_found) @@ -912,12 +912,12 @@ RSpec.describe CaseLogsController, type: :request do end describe "DELETE" do - let!(:case_log) do - FactoryBot.create(:case_log, :in_progress) + let!(:lettings_log) do + FactoryBot.create(:lettings_log, :in_progress) end - let(:id) { case_log.id } + let(:id) { lettings_log.id } - context "when deleting a case log" do + context "when deleting a lettings log" do before do delete "/logs/#{id}", headers: end @@ -926,12 +926,12 @@ RSpec.describe CaseLogsController, type: :request do expect(response).to have_http_status(:success) end - it "deletes the case log" do - expect { CaseLog.find(id) }.to raise_error(ActiveRecord::RecordNotFound) + it "deletes the lettings log" do + expect { LettingsLog.find(id) }.to raise_error(ActiveRecord::RecordNotFound) end - context "with an invalid case log id" do - let(:id) { (CaseLog.order(:id).last&.id || 0) + 1 } + context "with an invalid lettings log id" do + let(:id) { (LettingsLog.order(:id).last&.id || 0) + 1 } it "returns 404" do expect(response).to have_http_status(:not_found) @@ -949,10 +949,10 @@ RSpec.describe CaseLogsController, type: :request do end end - context "when a case log deletion fails" do + context "when a lettings log deletion fails" do before do - allow(CaseLog).to receive(:find_by).and_return(case_log) - allow(case_log).to receive(:delete).and_return(false) + allow(LettingsLog).to receive(:find_by).and_return(lettings_log) + allow(lettings_log).to receive(:delete).and_return(false) delete "/logs/#{id}", headers: end diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index c467cd585..20197f468 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -567,24 +567,24 @@ RSpec.describe OrganisationsController, type: :request do end context "when viewing a specific organisation's logs" do - let(:number_of_org1_case_logs) { 2 } - let(:number_of_org2_case_logs) { 4 } + let(:number_of_org1_lettings_logs) { 2 } + let(:number_of_org2_lettings_logs) { 4 } before do - FactoryBot.create_list(:case_log, number_of_org1_case_logs, owning_organisation_id: organisation.id, managing_organisation_id: organisation.id) - FactoryBot.create_list(:case_log, number_of_org2_case_logs, owning_organisation_id: unauthorised_organisation.id, managing_organisation_id: unauthorised_organisation.id) + FactoryBot.create_list(:lettings_log, number_of_org1_lettings_logs, owning_organisation_id: organisation.id, managing_organisation_id: organisation.id) + FactoryBot.create_list(:lettings_log, number_of_org2_lettings_logs, owning_organisation_id: unauthorised_organisation.id, managing_organisation_id: unauthorised_organisation.id) get "/organisations/#{organisation.id}/logs", headers:, params: {} end it "only shows logs for that organisation" do - expect(page).to have_content("#{number_of_org1_case_logs} total logs") - organisation.case_logs.map(&:id).each do |case_log_id| - expect(page).to have_link case_log_id.to_s, href: "/logs/#{case_log_id}" + expect(page).to have_content("#{number_of_org1_lettings_logs} total logs") + organisation.lettings_logs.map(&:id).each do |lettings_log_id| + expect(page).to have_link lettings_log_id.to_s, href: "/logs/#{lettings_log_id}" end - unauthorised_organisation.case_logs.map(&:id).each do |case_log_id| - expect(page).not_to have_link case_log_id.to_s, href: "/logs/#{case_log_id}" + unauthorised_organisation.lettings_logs.map(&:id).each do |lettings_log_id| + expect(page).not_to have_link lettings_log_id.to_s, href: "/logs/#{lettings_log_id}" end end @@ -603,16 +603,16 @@ RSpec.describe OrganisationsController, type: :request do end context "when using a search query" do - let(:logs) { FactoryBot.create_list(:case_log, 3, :completed, owning_organisation: user.organisation, created_by: user) } - let(:log_to_search) { FactoryBot.create(:case_log, :completed, owning_organisation: user.organisation, created_by: user) } - let(:log_total_count) { CaseLog.where(owning_organisation: user.organisation).count } + let(:logs) { FactoryBot.create_list(:lettings_log, 3, :completed, owning_organisation: user.organisation, created_by: user) } + let(:log_to_search) { FactoryBot.create(:lettings_log, :completed, owning_organisation: user.organisation, created_by: user) } + let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count } it "has search results in the title" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.id}", headers: headers, params: {} expect(page).to have_title("#{organisation.name} (1 log matching ‘#{log_to_search.id}’) - Submit social housing lettings and sales data (CORE) - GOV.UK") end - it "shows case logs matching the id" do + it "shows lettings logs matching the id" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.id}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -620,7 +620,7 @@ RSpec.describe OrganisationsController, type: :request do end end - it "shows case logs matching the tenant code" do + it "shows lettings logs matching the tenant code" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.tenancycode}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -628,7 +628,7 @@ RSpec.describe OrganisationsController, type: :request do end end - it "shows case logs matching the property reference" do + it "shows lettings logs matching the property reference" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.propcode}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -636,7 +636,7 @@ RSpec.describe OrganisationsController, type: :request do end end - it "shows case logs matching the property postcode" do + it "shows lettings logs matching the property postcode" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.postcode_full}", headers: headers, params: {} expect(page).to have_link(log_to_search.id.to_s) logs.each do |log| @@ -645,7 +645,7 @@ RSpec.describe OrganisationsController, type: :request do end context "when more than one results with matching postcode" do - let!(:matching_postcode_log) { FactoryBot.create(:case_log, :completed, owning_organisation: user.organisation, postcode_full: log_to_search.postcode_full) } + let!(:matching_postcode_log) { FactoryBot.create(:lettings_log, :completed, owning_organisation: user.organisation, postcode_full: log_to_search.postcode_full) } it "displays all matching logs" do get "/organisations/#{organisation.id}/logs?search=#{log_to_search.postcode_full}", headers: headers, params: {} @@ -659,8 +659,8 @@ RSpec.describe OrganisationsController, type: :request do context "when there are more than 1 page of search results" do let(:postcode) { "XX11YY" } - let(:logs) { FactoryBot.create_list(:case_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode) } - let(:log_total_count) { CaseLog.where(owning_organisation: user.organisation).count } + let(:logs) { FactoryBot.create_list(:lettings_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode) } + let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count } it "has title with pagination details for page 1" do get "/organisations/#{organisation.id}/logs?search=#{logs[0].postcode_full}", headers: headers, params: {} @@ -696,7 +696,7 @@ RSpec.describe OrganisationsController, type: :request do context "when search and filter is present" do let(:matching_postcode) { log_to_search.postcode_full } let(:matching_status) { "in_progress" } - let!(:log_matching_filter_and_search) { FactoryBot.create(:case_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode, created_by: user) } + let!(:log_matching_filter_and_search) { FactoryBot.create(:lettings_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode, created_by: user) } it "shows only logs matching both search and filters" do get "/organisations/#{organisation.id}/logs?search=#{matching_postcode}&status[]=#{matching_status}", headers: headers, params: {} @@ -1043,8 +1043,8 @@ RSpec.describe OrganisationsController, type: :request do let(:other_organisation) { FactoryBot.create(:organisation) } before do - FactoryBot.create_list(:case_log, 3, owning_organisation: organisation) - FactoryBot.create_list(:case_log, 2, owning_organisation: other_organisation) + FactoryBot.create_list(:lettings_log, 3, owning_organisation: organisation) + FactoryBot.create_list(:lettings_log, 2, owning_organisation: other_organisation) end it "only includes logs from that organisation" do diff --git a/spec/services/csv/case_log_csv_service_spec.rb b/spec/services/csv/lettings_log_csv_service_spec.rb similarity index 98% rename from spec/services/csv/case_log_csv_service_spec.rb rename to spec/services/csv/lettings_log_csv_service_spec.rb index 1335bf930..49d990f5c 100644 --- a/spec/services/csv/case_log_csv_service_spec.rb +++ b/spec/services/csv/lettings_log_csv_service_spec.rb @@ -1,12 +1,12 @@ require "rails_helper" -RSpec.describe Csv::CaseLogCsvService do +RSpec.describe Csv::LettingsLogCsvService do context "when the user is support" do let(:user) { FactoryBot.create(:user, :support) } let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } before do - CaseLog.create!(startdate: "2021-10-10") + LettingsLog.create!(startdate: "2021-10-10") allow(FormHandler.instance).to receive(:get_form).and_return(real_2021_2022_form) end @@ -106,12 +106,9 @@ RSpec.describe Csv::CaseLogCsvService do leftreg reservist preg_occ - housingneeds_a - housingneeds_b - housingneeds_c - housingneeds_f - housingneeds_g - housingneeds_h + housingneeds + housingneeds_type + housingneeds_other illness illness_type_4 illness_type_5 @@ -167,6 +164,12 @@ RSpec.describe Csv::CaseLogCsvService do hbrentshortfall tshortfall_known tshortfall + housingneeds_a + housingneeds_b + housingneeds_c + housingneeds_f + housingneeds_g + housingneeds_h property_owner_organisation property_manager_organisation sale_or_letting @@ -189,7 +192,6 @@ RSpec.describe Csv::CaseLogCsvService do wtcharge wtshortfall refused - housingneeds wchchrg newprop old_form_id @@ -200,11 +202,7 @@ RSpec.describe Csv::CaseLogCsvService do hhtype new_old vacdays - housingneeds_type - housingneeds_other unittype_sh - scheme_id - location_id scheme_code scheme_service_name scheme_sensitive diff --git a/spec/services/exports/case_log_export_service_spec.rb b/spec/services/exports/lettings_log_export_service_spec.rb similarity index 69% rename from spec/services/exports/case_log_export_service_spec.rb rename to spec/services/exports/lettings_log_export_service_spec.rb index 82124f288..f419ba30c 100644 --- a/spec/services/exports/case_log_export_service_spec.rb +++ b/spec/services/exports/lettings_log_export_service_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe Exports::CaseLogExportService do +RSpec.describe Exports::LettingsLogExportService do subject(:export_service) { described_class.new(storage_service) } let(:storage_service) { instance_double(Storage::S3Service) } @@ -18,10 +18,10 @@ RSpec.describe Exports::CaseLogExportService do let(:expected_manifest_filename) { "manifest.xml" } let(:start_time) { Time.zone.local(2022, 5, 1) } - def replace_entity_ids(case_log, export_template) - export_template.sub!(/\{id\}/, (case_log["id"] + Exports::CaseLogExportService::LOG_ID_OFFSET).to_s) - export_template.sub!(/\{owning_org_id\}/, (case_log["owning_organisation_id"] + Exports::CaseLogExportService::LOG_ID_OFFSET).to_s) - export_template.sub!(/\{managing_org_id\}/, (case_log["managing_organisation_id"] + Exports::CaseLogExportService::LOG_ID_OFFSET).to_s) + def replace_entity_ids(lettings_log, export_template) + export_template.sub!(/\{id\}/, (lettings_log["id"] + Exports::LettingsLogExportService::LOG_ID_OFFSET).to_s) + export_template.sub!(/\{owning_org_id\}/, (lettings_log["owning_organisation_id"] + Exports::LettingsLogExportService::LOG_ID_OFFSET).to_s) + export_template.sub!(/\{managing_org_id\}/, (lettings_log["managing_organisation_id"] + Exports::LettingsLogExportService::LOG_ID_OFFSET).to_s) end def replace_record_number(export_template, record_number) @@ -37,11 +37,11 @@ RSpec.describe Exports::CaseLogExportService do allow(FormHandler.instance).to receive(:get_form).with("2022_2023").and_return(real_2022_2023_form) end - context "when exporting daily case logs in XML" do - context "and no case logs is available for export" do + context "when exporting daily lettings logs in XML" do + context "and no lettings logs is available for export" do it "generates a master manifest with the correct name" do expect(storage_service).to receive(:write_file).with(expected_master_manifest_filename, any_args) - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "generates a master manifest with CSV headers but no data" do @@ -49,17 +49,17 @@ RSpec.describe Exports::CaseLogExportService do expected_content = "zip-name,date-time zipped folder generated,zip-file-uri\n" allow(storage_service).to receive(:write_file).with(expected_master_manifest_filename, any_args) { |_, arg2| actual_content = arg2&.string } - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs expect(actual_content).to eq(expected_content) end end - context "and one case log is available for export" do - let!(:case_log) { FactoryBot.create(:case_log, :completed, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737") } + context "and one lettings log is available for export" do + let!(:lettings_log) { FactoryBot.create(:lettings_log, :completed, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737") } it "generates a ZIP export file with the expected filename" do expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "generates an XML manifest file with the expected filename within the ZIP file" do @@ -68,7 +68,7 @@ RSpec.describe Exports::CaseLogExportService do expect(entry).not_to be_nil expect(entry.name).to eq(expected_manifest_filename) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "generates an XML export file with the expected filename within the ZIP file" do @@ -77,7 +77,7 @@ RSpec.describe Exports::CaseLogExportService do expect(entry).not_to be_nil expect(entry.name).to eq(expected_data_filename) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "generates an XML manifest file with the expected content within the ZIP file" do @@ -88,43 +88,43 @@ RSpec.describe Exports::CaseLogExportService do expect(entry.get_input_stream.read).to eq(expected_content) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "generates an XML export file with the expected content within the ZIP file" do - expected_content = replace_entity_ids(case_log, xml_export_file.read) + expected_content = replace_entity_ids(lettings_log, xml_export_file.read) expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content| entry = Zip::File.open_buffer(content).find_entry(expected_data_filename) expect(entry).not_to be_nil expect(entry.get_input_stream.read).to eq(expected_content) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end end - context "and multiple case logs are available for export on different periods" do + context "and multiple lettings logs are available for export on different periods" do let(:expected_zip_filename2) { "core_2022_2023_apr_jun_f0001_inc0001.zip" } before do - FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 2, 1)) - FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 4, 1)) + FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 2, 1)) + FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 4, 1)) end - context "when case logs are across multiple quarters" do + context "when lettings logs are across multiple quarters" do it "generates multiple ZIP export files with the expected filenames" do expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) expect(storage_service).to receive(:write_file).with(expected_zip_filename2, any_args) - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end end end - context "and multiple case logs are available for export on same quarter" do + context "and multiple lettings logs are available for export on same quarter" do before do - FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 2, 1)) - FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 3, 20)) + FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 2, 1)) + FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 3, 20)) end it "generates an XML manifest file with the expected content within the ZIP file" do @@ -135,23 +135,23 @@ RSpec.describe Exports::CaseLogExportService do expect(entry.get_input_stream.read).to eq(expected_content) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end it "creates a logs export record in a database with correct time" do - expect { export_service.export_xml_case_logs } + expect { export_service.export_xml_lettings_logs } .to change(LogsExport, :count).by(1) expect(LogsExport.last.started_at).to eq(start_time) end context "when this is the first export (full)" do - it "records a ZIP archive in the master manifest (existing case logs)" do + it "records a ZIP archive in the master manifest (existing lettings logs)" do expect(storage_service).to receive(:write_file).with(expected_master_manifest_filename, any_args) do |_, csv_content| csv = CSV.parse(csv_content, headers: true) expect(csv&.count).to be > 0 end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end end @@ -161,58 +161,58 @@ RSpec.describe Exports::CaseLogExportService do LogsExport.new(started_at: start_time).save! end - it "does not add any entry in the master manifest (no case logs)" do + it "does not add any entry in the master manifest (no lettings logs)" do expect(storage_service).to receive(:write_file).with(expected_master_manifest_rerun, any_args) do |_, csv_content| csv = CSV.parse(csv_content, headers: true) expect(csv&.count).to eq(0) end - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end end end - context "and a previous export has run the same day having case logs" do + context "and a previous export has run the same day having lettings logs" do before do - FactoryBot.create(:case_log, startdate: Time.zone.local(2022, 2, 1)) - export_service.export_xml_case_logs + FactoryBot.create(:lettings_log, startdate: Time.zone.local(2022, 2, 1)) + export_service.export_xml_lettings_logs end it "increments the master manifest number by 1" do expect(storage_service).to receive(:write_file).with(expected_master_manifest_rerun, any_args) - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs end context "and we trigger another full update" do it "increments the base number" do - export_service.export_xml_case_logs(full_update: true) + export_service.export_xml_lettings_logs(full_update: true) expect(LogsExport.last.base_number).to eq(2) end it "resets the increment number" do - export_service.export_xml_case_logs(full_update: true) + export_service.export_xml_lettings_logs(full_update: true) expect(LogsExport.last.increment_number).to eq(1) end - it "records a ZIP archive in the master manifest (existing case logs)" do + it "records a ZIP archive in the master manifest (existing lettings logs)" do expect(storage_service).to receive(:write_file).with(expected_master_manifest_rerun, any_args) do |_, csv_content| csv = CSV.parse(csv_content, headers: true) expect(csv&.count).to be > 0 end - export_service.export_xml_case_logs(full_update: true) + export_service.export_xml_lettings_logs(full_update: true) end it "generates a ZIP export file with the expected filename" do expect(storage_service).to receive(:write_file).with("core_2021_2022_jan_mar_f0002_inc0001.zip", any_args) - export_service.export_xml_case_logs(full_update: true) + export_service.export_xml_lettings_logs(full_update: true) end end end - context "and a previous export has run having no case logs" do - before { export_service.export_xml_case_logs } + context "and a previous export has run having no lettings logs" do + before { export_service.export_xml_lettings_logs } it "doesn't increment the manifest number by 1" do - export_service.export_xml_case_logs + export_service.export_xml_lettings_logs expect(LogsExport.last.increment_number).to eq(1) end @@ -222,46 +222,46 @@ RSpec.describe Exports::CaseLogExportService do before { allow(storage_service).to receive(:write_file).and_raise(StandardError.new("This is an exception")) } it "does not save a record in the database" do - expect { export_service.export_xml_case_logs } + expect { export_service.export_xml_lettings_logs } .to raise_error(StandardError) .and(change(LogsExport, :count).by(0)) end end end - context "when exporting a general needs case logs in CSV" do + context "when exporting a general needs lettings logs in CSV" do let(:csv_export_file) { File.open("spec/fixtures/exports/general_needs_log.csv", "r:UTF-8") } let(:expected_csv_filename) { "export_2022_05_01.csv" } - let(:case_log) { FactoryBot.create(:case_log, :completed, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737") } + let(:lettings_log) { FactoryBot.create(:lettings_log, :completed, propcode: "123", ppostcode_full: "SE2 6RT", postcode_full: "NW1 5TY", tenancycode: "BZ737") } it "generates an CSV export file with the expected content" do - expected_content = replace_entity_ids(case_log, csv_export_file.read) + expected_content = replace_entity_ids(lettings_log, csv_export_file.read) expect(storage_service).to receive(:write_file).with(expected_csv_filename, any_args) do |_, content| expect(content).not_to be_nil expect(content.read).to eq(expected_content) end - export_service.export_csv_case_logs + export_service.export_csv_lettings_logs end end - context "when exporting a supporting housing case logs in XML" do + context "when exporting a supporting housing lettings logs in XML" do let(:export_file) { File.open("spec/fixtures/exports/supported_housing_logs.xml", "r:UTF-8") } let(:organisation) { FactoryBot.create(:organisation, provider_type: "LA") } let(:user) { FactoryBot.create(:user, organisation:) } let(:scheme) { FactoryBot.create(:scheme, :export, owning_organisation: organisation) } let(:location) { FactoryBot.create(:location, :export, scheme:) } - let(:case_log) { FactoryBot.create(:case_log, :completed, :export, :sh, scheme:, location:, created_by: user, owning_organisation: organisation) } + let(:lettings_log) { FactoryBot.create(:lettings_log, :completed, :export, :sh, scheme:, location:, created_by: user, owning_organisation: organisation) } it "generates an XML export file with the expected content" do - expected_content = replace_entity_ids(case_log, export_file.read) + expected_content = replace_entity_ids(lettings_log, export_file.read) expect(storage_service).to receive(:write_file).with(expected_zip_filename, any_args) do |_, content| entry = Zip::File.open_buffer(content).find_entry(expected_data_filename) expect(entry).not_to be_nil expect(entry.get_input_stream.read).to eq(expected_content) end - export_service.export_xml_case_logs(full_update: true) + export_service.export_xml_lettings_logs(full_update: true) end end end diff --git a/spec/services/imports/case_logs_field_import_service_spec.rb b/spec/services/imports/case_logs_field_import_service_spec.rb deleted file mode 100644 index e703c3786..000000000 --- a/spec/services/imports/case_logs_field_import_service_spec.rb +++ /dev/null @@ -1,243 +0,0 @@ -require "rails_helper" - -RSpec.describe Imports::CaseLogsFieldImportService do - subject(:import_service) { described_class.new(storage_service, logger) } - - let(:storage_service) { instance_double(Storage::S3Service) } - let(:logger) { instance_double(ActiveSupport::Logger) } - - let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } - let(:fixture_directory) { "spec/fixtures/imports/logs" } - - let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } - let(:case_log_file) { open_file(fixture_directory, case_log_id) } - let(:case_log_xml) { Nokogiri::XML(case_log_file) } - let(:remote_folder) { "case_logs" } - let(:old_user_id) { "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa" } - let(:organisation) { FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP") } - - def open_file(directory, filename) - File.open("#{directory}/#{filename}.xml") - end - - before do - allow(Organisation).to receive(:find_by).and_return(organisation) - - # Created by users - FactoryBot.create(:user, old_user_id:, organisation:) - - # Stub the form handler to use the real form - allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form) - - WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/) - .to_return(status: 200, body: '{"status":200,"result":{"codes":{"admin_district":"E08000035"}}}', headers: {}) - - # Stub the S3 file listing and download - allow(storage_service).to receive(:list_files) - .and_return(["#{remote_folder}/#{case_log_id}.xml"]) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id}.xml") - .and_return(case_log_file) - end - - context "when updating tenant code" do - let(:field) { "tenancycode" } - - context "and the case log was previously imported" do - let(:case_log) { CaseLog.find_by(old_id: case_log_id) } - - before do - Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) - case_log_file.rewind - end - - it "logs that the tenancycode already has a value and does not update the case_log" do - expect(logger).to receive(:info).with(/Case Log \d+ has a value for tenancycode, skipping update/) - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.tenancycode }) - end - end - - context "and the case log was previously imported with empty fields" do - let(:case_log) { CaseLog.find_by(old_id: case_log_id) } - - before do - Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) - case_log_file.rewind - case_log.update!(tenancycode: nil) - end - - it "updates the case_log" do - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.tenancycode }) - end - end - end - - context "when updating letings allocation values" do - let(:field) { "lettings_allocation" } - let(:case_log) { CaseLog.find_by(old_id: case_log_id) } - - before do - allow(logger).to receive(:warn) - Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) - case_log_file.rewind - end - - context "when cbl" do - let(:case_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } - - context "when it was incorrectly set" do - before do - case_log.update!(cbl: 1) - end - - it "updates the value" do - expect(logger).to receive(:info).with(/Case Log \d+'s cbl value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.cbl }.from(1).to(0)) - end - end - - context "when it was correctly set" do - before do - case_log.update!(cbl: 0) - end - - it "does not update the value" do - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.cbl }) - end - end - end - - context "when chr" do - let(:case_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } - - context "when it was incorrectly set" do - before do - case_log.update!(chr: 1) - end - - it "updates the value" do - expect(logger).to receive(:info).with(/Case Log \d+'s chr value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.chr }.from(1).to(0)) - end - end - - context "when it was correctly set" do - before do - case_log.update!(chr: 0) - end - - it "does not update the value" do - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.chr }) - end - end - end - - context "when cap" do - let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } - - context "when it was incorrectly set" do - before do - case_log.update!(cap: 1) - end - - it "updates the value" do - expect(logger).to receive(:info).with(/Case Log \d+'s cap value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.cap }.from(1).to(0)) - end - end - - context "when it was correctly set" do - before do - case_log.update!(cap: 0) - end - - it "does not update the value" do - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.cap }) - end - end - end - - context "when allocation type is none of cap, chr, cbl" do - let(:case_log_id) { "893ufj2s-lq77-42m4-rty6-ej09gh585uy1" } - - context "when it did not have a value set for letting_allocation_unknown" do - before do - case_log.update!(letting_allocation_unknown: nil) - end - - it "updates the value" do - expect(logger).to receive(:info).with(/Case Log \d+'s letting_allocation_unknown value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.letting_allocation_unknown }.from(nil).to(1)) - end - end - - context "when it had a value set for letting_allocation_unknown" do - before do - case_log.update!(letting_allocation_unknown: 1) - end - - it "updates the value" do - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.letting_allocation_unknown }) - end - end - end - end - - context "when updating major repairs" do - let(:field) { "major_repairs" } - - context "and the case log already has a value" do - let(:case_log) { CaseLog.find_by(old_id: case_log_id) } - - before do - Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) - case_log_file.rewind - case_log.update!(majorrepairs: 0, mrcdate: Time.zone.local(2021, 10, 30, 10, 10, 10)) - end - - it "logs that major repairs already has a value and does not update major repairs" do - expect(logger).to receive(:info).with(/Case Log \d+ has a value for major repairs, skipping update/) - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.majorrepairs }) - end - - it "logs that major repairs already has a value and does not update the major repairs date" do - expect(logger).to receive(:info).with(/Case Log \d+ has a value for major repairs, skipping update/) - expect { import_service.send(:update_field, field, remote_folder) } - .not_to(change { case_log.reload.mrcdate }) - end - end - - context "and the case log was previously imported with empty fields" do - let(:case_log) { CaseLog.find_by(old_id: case_log_id) } - - before do - Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) - case_log_file.rewind - case_log.update!(mrcdate: nil, majorrepairs: nil) - end - - it "updates the case_log major repairs date" do - expect(logger).to receive(:info).with(/Case Log \d+'s major repair value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.mrcdate }) - end - - it "updates the case_log major repairs" do - expect(logger).to receive(:info).with(/Case Log \d+'s major repair value has been updated/) - expect { import_service.send(:update_field, field, remote_folder) } - .to(change { case_log.reload.majorrepairs }) - end - end - end -end diff --git a/spec/services/imports/case_logs_import_service_spec.rb b/spec/services/imports/case_logs_import_service_spec.rb deleted file mode 100644 index 075244ecf..000000000 --- a/spec/services/imports/case_logs_import_service_spec.rb +++ /dev/null @@ -1,299 +0,0 @@ -require "rails_helper" - -RSpec.describe Imports::CaseLogsImportService do - subject(:case_log_service) { described_class.new(storage_service, logger) } - - let(:storage_service) { instance_double(Storage::S3Service) } - let(:logger) { instance_double(ActiveSupport::Logger) } - - let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } - let(:real_2022_2023_form) { Form.new("config/forms/2022_2023.json", "2022_2023") } - let(:fixture_directory) { "spec/fixtures/imports/logs" } - - let(:organisation) { FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP") } - let(:scheme1) { FactoryBot.create(:scheme, old_visible_id: 123, owning_organisation: organisation) } - let(:scheme2) { FactoryBot.create(:scheme, old_visible_id: 456, owning_organisation: organisation) } - - def open_file(directory, filename) - File.open("#{directory}/#{filename}.xml") - end - - before do - WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/) - .to_return(status: 200, body: '{"status":200,"result":{"admin_district":"Westminster","codes":{"admin_district":"E08000035"}}}', headers: {}) - - allow(Organisation).to receive(:find_by).and_return(nil) - allow(Organisation).to receive(:find_by).with(old_visible_id: organisation.old_visible_id.to_i).and_return(organisation) - - # Created by users - FactoryBot.create(:user, old_user_id: "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa", organisation:) - FactoryBot.create(:user, old_user_id: "e29c492473446dca4d50224f2bb7cf965a261d6f", organisation:) - - # Location setup - FactoryBot.create(:location, old_visible_id: 10, postcode: "LS166FT", scheme_id: scheme1.id, mobility_type: "W") - FactoryBot.create(:location, scheme_id: scheme1.id) - FactoryBot.create(:location, old_visible_id: 10, postcode: "LS166FT", scheme_id: scheme2.id, mobility_type: "W") - - # Stub the form handler to use the real form - allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form) - allow(FormHandler.instance).to receive(:get_form).with("2022_2023").and_return(real_2022_2023_form) - end - - context "when importing case logs" do - let(:remote_folder) { "case_logs" } - let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } - let(:case_log_id2) { "166fc004-392e-47a8-acb8-1c018734882b" } - let(:case_log_id3) { "00d2343e-d5fa-4c89-8400-ec3854b0f2b4" } - let(:case_log_id4) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } - - before do - # Stub the S3 file listing and download - allow(storage_service).to receive(:list_files) - .and_return(%W[#{remote_folder}/#{case_log_id}.xml #{remote_folder}/#{case_log_id2}.xml #{remote_folder}/#{case_log_id3}.xml #{remote_folder}/#{case_log_id4}.xml]) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id}.xml") - .and_return(open_file(fixture_directory, case_log_id), open_file(fixture_directory, case_log_id)) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id2}.xml") - .and_return(open_file(fixture_directory, case_log_id2), open_file(fixture_directory, case_log_id2)) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id3}.xml") - .and_return(open_file(fixture_directory, case_log_id3), open_file(fixture_directory, case_log_id3)) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id4}.xml") - .and_return(open_file(fixture_directory, case_log_id4), open_file(fixture_directory, case_log_id4)) - end - - it "successfully create all case logs" do - expect(logger).not_to receive(:error) - expect(logger).not_to receive(:warn) - expect(logger).not_to receive(:info) - expect { case_log_service.create_logs(remote_folder) } - .to change(CaseLog, :count).by(4) - end - - it "only updates existing case logs" do - expect(logger).not_to receive(:error) - expect(logger).not_to receive(:warn) - expect(logger).to receive(:info).with(/Updating case log/).exactly(4).times - expect { 2.times { case_log_service.create_logs(remote_folder) } } - .to change(CaseLog, :count).by(4) - end - - context "when there are status discrepancies" do - let(:case_log_id5) { "893ufj2s-lq77-42m4-rty6-ej09gh585uy1" } - let(:case_log_id6) { "5ybz29dj-l33t-k1l0-hj86-n4k4ma77xkcd" } - let(:case_log_file) { open_file(fixture_directory, case_log_id5) } - let(:case_log_xml) { Nokogiri::XML(case_log_file) } - - before do - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id5}.xml") - .and_return(open_file(fixture_directory, case_log_id5), open_file(fixture_directory, case_log_id5)) - allow(storage_service).to receive(:get_file_io) - .with("#{remote_folder}/#{case_log_id6}.xml") - .and_return(open_file(fixture_directory, case_log_id6), open_file(fixture_directory, case_log_id6)) - end - - it "the logger logs a warning with the case log's old id/filename" do - expect(logger).to receive(:warn).with(/is not completed/).once - expect(logger).to receive(:warn).with(/Case log with old id:#{case_log_id5} is incomplete but status should be complete/).once - - case_log_service.send(:create_log, case_log_xml) - end - - it "on completion the ids of all logs with status discrepancies are logged in a warning" do - allow(storage_service).to receive(:list_files) - .and_return(%W[#{remote_folder}/#{case_log_id5}.xml #{remote_folder}/#{case_log_id6}.xml]) - expect(logger).to receive(:warn).with(/is not completed/).twice - expect(logger).to receive(:warn).with(/is incomplete but status should be complete/).twice - expect(logger).to receive(:warn).with(/The following case logs had status discrepancies: \[893ufj2s-lq77-42m4-rty6-ej09gh585uy1, 5ybz29dj-l33t-k1l0-hj86-n4k4ma77xkcd\]/) - - case_log_service.create_logs(remote_folder) - end - end - end - - context "when importing a specific log" do - let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } - let(:case_log_file) { open_file(fixture_directory, case_log_id) } - let(:case_log_xml) { Nokogiri::XML(case_log_file) } - - context "and the void date is after the start date" do - before { case_log_xml.at_xpath("//xmlns:VYEAR").content = 2023 } - - it "does not import the voiddate" do - expect(logger).to receive(:warn).with(/is not completed/) - expect(logger).to receive(:warn).with(/Case log with old id:#{case_log_id} is incomplete but status should be complete/) - - case_log_service.send(:create_log, case_log_xml) - - case_log = CaseLog.where(old_id: case_log_id).first - expect(case_log&.voiddate).to be_nil - end - end - - context "and the organisation legacy ID does not exist" do - before { case_log_xml.at_xpath("//xmlns:OWNINGORGID").content = 99_999 } - - it "raises an exception" do - expect { case_log_service.send(:create_log, case_log_xml) } - .to raise_error(RuntimeError, "Organisation not found with legacy ID 99999") - end - end - - context "and a person is under 16" do - before { case_log_xml.at_xpath("//xmlns:P2Age").content = 14 } - - context "when the economic status is set to refuse" do - before { case_log_xml.at_xpath("//xmlns:P2Eco").content = "10) Refused" } - - it "sets the economic status to child under 16" do - # The update is done when calculating derived variables - expect(logger).to receive(:warn).with(/Differences found when saving log/) - case_log_service.send(:create_log, case_log_xml) - - case_log = CaseLog.where(old_id: case_log_id).first - expect(case_log&.ecstat2).to be(9) - end - end - - context "when the relationship to lead tenant is set to refuse" do - before { case_log_xml.at_xpath("//xmlns:P2Rel").content = "Refused" } - - it "sets the relationship to lead tenant to child" do - case_log_service.send(:create_log, case_log_xml) - - case_log = CaseLog.where(old_id: case_log_id).first - expect(case_log&.relat2).to eq("C") - end - end - end - - context "and this is an internal transfer from a non social housing" do - before do - case_log_xml.at_xpath("//xmlns:Q11").content = "9 Residential care home" - case_log_xml.at_xpath("//xmlns:Q16").content = "1 Internal Transfer" - end - - it "intercepts the relevant validation error" do - expect(logger).to receive(:warn).with(/Removing internal transfer referral since previous tenancy is a non social housing/) - expect { case_log_service.send(:create_log, case_log_xml) } - .not_to raise_error - end - - it "clears out the referral answer" do - allow(logger).to receive(:warn) - - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - - expect(case_log).not_to be_nil - expect(case_log.referral).to be_nil - end - - context "and this is an internal transfer from a previous fixed term tenancy" do - before do - case_log_xml.at_xpath("//xmlns:Q11").content = "30 Fixed term Local Authority General Needs tenancy" - case_log_xml.at_xpath("//xmlns:Q16").content = "1 Internal Transfer" - end - - it "intercepts the relevant validation error" do - expect(logger).to receive(:warn).with(/Removing internal transfer referral since previous tenancy is fixed terms or lifetime/) - expect { case_log_service.send(:create_log, case_log_xml) } - .not_to raise_error - end - - it "clears out the referral answer" do - allow(logger).to receive(:warn) - - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - - expect(case_log).not_to be_nil - expect(case_log.referral).to be_nil - end - end - end - - context "and the net income soft validation is triggered (net_income_value_check)" do - before do - case_log_xml.at_xpath("//xmlns:Q8a").content = "1 Weekly" - case_log_xml.at_xpath("//xmlns:Q8Money").content = 890.00 - end - - it "completes the log" do - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - expect(case_log.status).to eq("completed") - end - end - - context "and the rent soft validation is triggered (rent_value_check)" do - before do - case_log_xml.at_xpath("//xmlns:Q18ai").content = 200.00 - case_log_xml.at_xpath("//xmlns:Q18av").content = 232.02 - case_log_xml.at_xpath("//xmlns:Q17").content = "1 Weekly for 52 weeks" - LaRentRange.create!( - start_year: 2021, - la: "E08000035", - beds: 2, - lettype: 1, - soft_max: 900, - hard_max: 1500, - soft_min: 500, - hard_min: 100, - ) - end - - it "completes the log" do - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - expect(case_log.status).to eq("completed") - end - end - - context "and the retirement soft validation is triggered (retirement_value_check)" do - before do - case_log_xml.at_xpath("//xmlns:P1Age").content = 68 - case_log_xml.at_xpath("//xmlns:P1Eco").content = "6) Not Seeking Work" - end - - it "completes the log" do - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - expect(case_log.status).to eq("completed") - end - end - - context "and this is a supported housing log with multiple locations under a scheme" do - let(:case_log_id) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } - - it "sets the scheme and location values" do - expect(logger).not_to receive(:warn) - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - - expect(case_log.scheme_id).not_to be_nil - expect(case_log.location_id).not_to be_nil - expect(case_log.status).to eq("completed") - end - end - - context "and this is a supported housing log with a single location under a scheme" do - let(:case_log_id) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } - - before { case_log_xml.at_xpath("//xmlns:_1cmangroupcode").content = scheme2.old_visible_id } - - it "sets the scheme and location values" do - expect(logger).not_to receive(:warn) - case_log_service.send(:create_log, case_log_xml) - case_log = CaseLog.find_by(old_id: case_log_id) - - expect(case_log.scheme_id).not_to be_nil - expect(case_log.location_id).not_to be_nil - expect(case_log.status).to eq("completed") - end - end - end -end diff --git a/spec/services/imports/lettings_logs_field_import_service_spec.rb b/spec/services/imports/lettings_logs_field_import_service_spec.rb new file mode 100644 index 000000000..386cde725 --- /dev/null +++ b/spec/services/imports/lettings_logs_field_import_service_spec.rb @@ -0,0 +1,243 @@ +require "rails_helper" + +RSpec.describe Imports::LettingsLogsFieldImportService do + subject(:import_service) { described_class.new(storage_service, logger) } + + let(:storage_service) { instance_double(Storage::S3Service) } + let(:logger) { instance_double(ActiveSupport::Logger) } + + let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } + let(:fixture_directory) { "spec/fixtures/imports/logs" } + + let(:lettings_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } + let(:lettings_log_file) { open_file(fixture_directory, lettings_log_id) } + let(:lettings_log_xml) { Nokogiri::XML(lettings_log_file) } + let(:remote_folder) { "lettings_logs" } + let(:old_user_id) { "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa" } + let(:organisation) { FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP") } + + def open_file(directory, filename) + File.open("#{directory}/#{filename}.xml") + end + + before do + allow(Organisation).to receive(:find_by).and_return(organisation) + + # Created by users + FactoryBot.create(:user, old_user_id:, organisation:) + + # Stub the form handler to use the real form + allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form) + + WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/) + .to_return(status: 200, body: '{"status":200,"result":{"codes":{"admin_district":"E08000035"}}}', headers: {}) + + # Stub the S3 file listing and download + allow(storage_service).to receive(:list_files) + .and_return(["#{remote_folder}/#{lettings_log_id}.xml"]) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id}.xml") + .and_return(lettings_log_file) + end + + context "when updating tenant code" do + let(:field) { "tenancycode" } + + context "and the lettings log was previously imported" do + let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) } + + before do + Imports::LettingsLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + lettings_log_file.rewind + end + + it "logs that the tenancycode already has a value and does not update the lettings_log" do + expect(logger).to receive(:info).with(/lettings log \d+ has a value for tenancycode, skipping update/) + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.tenancycode }) + end + end + + context "and the lettings log was previously imported with empty fields" do + let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) } + + before do + Imports::LettingsLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + lettings_log_file.rewind + lettings_log.update!(tenancycode: nil) + end + + it "updates the lettings_log" do + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.tenancycode }) + end + end + end + + context "when updating letings allocation values" do + let(:field) { "lettings_allocation" } + let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) } + + before do + allow(logger).to receive(:warn) + Imports::LettingsLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + lettings_log_file.rewind + end + + context "when cbl" do + let(:lettings_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } + + context "when it was incorrectly set" do + before do + lettings_log.update!(cbl: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/lettings log \d+'s cbl value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.cbl }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + lettings_log.update!(cbl: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.cbl }) + end + end + end + + context "when chr" do + let(:lettings_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } + + context "when it was incorrectly set" do + before do + lettings_log.update!(chr: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/lettings log \d+'s chr value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.chr }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + lettings_log.update!(chr: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.chr }) + end + end + end + + context "when cap" do + let(:lettings_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } + + context "when it was incorrectly set" do + before do + lettings_log.update!(cap: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/lettings log \d+'s cap value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.cap }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + lettings_log.update!(cap: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.cap }) + end + end + end + + context "when allocation type is none of cap, chr, cbl" do + let(:lettings_log_id) { "893ufj2s-lq77-42m4-rty6-ej09gh585uy1" } + + context "when it did not have a value set for letting_allocation_unknown" do + before do + lettings_log.update!(letting_allocation_unknown: nil) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/lettings log \d+'s letting_allocation_unknown value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.letting_allocation_unknown }.from(nil).to(1)) + end + end + + context "when it had a value set for letting_allocation_unknown" do + before do + lettings_log.update!(letting_allocation_unknown: 1) + end + + it "updates the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.letting_allocation_unknown }) + end + end + end + end + + context "when updating major repairs" do + let(:field) { "major_repairs" } + + context "and the lettings log already has a value" do + let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) } + + before do + Imports::LettingsLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + lettings_log_file.rewind + lettings_log.update!(majorrepairs: 0, mrcdate: Time.zone.local(2021, 10, 30, 10, 10, 10)) + end + + it "logs that major repairs already has a value and does not update major repairs" do + expect(logger).to receive(:info).with(/lettings log \d+ has a value for major repairs, skipping update/) + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.majorrepairs }) + end + + it "logs that major repairs already has a value and does not update the major repairs date" do + expect(logger).to receive(:info).with(/lettings log \d+ has a value for major repairs, skipping update/) + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { lettings_log.reload.mrcdate }) + end + end + + context "and the lettings log was previously imported with empty fields" do + let(:lettings_log) { LettingsLog.find_by(old_id: lettings_log_id) } + + before do + Imports::LettingsLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + lettings_log_file.rewind + lettings_log.update!(mrcdate: nil, majorrepairs: nil) + end + + it "updates the lettings_log major repairs date" do + expect(logger).to receive(:info).with(/lettings log \d+'s major repair value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.mrcdate }) + end + + it "updates the lettings_log major repairs" do + expect(logger).to receive(:info).with(/lettings log \d+'s major repair value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { lettings_log.reload.majorrepairs }) + end + end + end +end diff --git a/spec/services/imports/lettings_logs_import_service_spec.rb b/spec/services/imports/lettings_logs_import_service_spec.rb new file mode 100644 index 000000000..3af3601a2 --- /dev/null +++ b/spec/services/imports/lettings_logs_import_service_spec.rb @@ -0,0 +1,299 @@ +require "rails_helper" + +RSpec.describe Imports::LettingsLogsImportService do + subject(:lettings_log_service) { described_class.new(storage_service, logger) } + + let(:storage_service) { instance_double(Storage::S3Service) } + let(:logger) { instance_double(ActiveSupport::Logger) } + + let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } + let(:real_2022_2023_form) { Form.new("config/forms/2022_2023.json", "2022_2023") } + let(:fixture_directory) { "spec/fixtures/imports/logs" } + + let(:organisation) { FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP") } + let(:scheme1) { FactoryBot.create(:scheme, old_visible_id: 123, owning_organisation: organisation) } + let(:scheme2) { FactoryBot.create(:scheme, old_visible_id: 456, owning_organisation: organisation) } + + def open_file(directory, filename) + File.open("#{directory}/#{filename}.xml") + end + + before do + WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/) + .to_return(status: 200, body: '{"status":200,"result":{"admin_district":"Westminster","codes":{"admin_district":"E08000035"}}}', headers: {}) + + allow(Organisation).to receive(:find_by).and_return(nil) + allow(Organisation).to receive(:find_by).with(old_visible_id: organisation.old_visible_id.to_i).and_return(organisation) + + # Created by users + FactoryBot.create(:user, old_user_id: "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa", organisation:) + FactoryBot.create(:user, old_user_id: "e29c492473446dca4d50224f2bb7cf965a261d6f", organisation:) + + # Location setup + FactoryBot.create(:location, old_visible_id: 10, postcode: "LS166FT", scheme_id: scheme1.id, mobility_type: "W") + FactoryBot.create(:location, scheme_id: scheme1.id) + FactoryBot.create(:location, old_visible_id: 10, postcode: "LS166FT", scheme_id: scheme2.id, mobility_type: "W") + + # Stub the form handler to use the real form + allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form) + allow(FormHandler.instance).to receive(:get_form).with("2022_2023").and_return(real_2022_2023_form) + end + + context "when importing lettings logs" do + let(:remote_folder) { "lettings_logs" } + let(:lettings_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } + let(:lettings_log_id2) { "166fc004-392e-47a8-acb8-1c018734882b" } + let(:lettings_log_id3) { "00d2343e-d5fa-4c89-8400-ec3854b0f2b4" } + let(:lettings_log_id4) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } + + before do + # Stub the S3 file listing and download + allow(storage_service).to receive(:list_files) + .and_return(%W[#{remote_folder}/#{lettings_log_id}.xml #{remote_folder}/#{lettings_log_id2}.xml #{remote_folder}/#{lettings_log_id3}.xml #{remote_folder}/#{lettings_log_id4}.xml]) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id}.xml") + .and_return(open_file(fixture_directory, lettings_log_id), open_file(fixture_directory, lettings_log_id)) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id2}.xml") + .and_return(open_file(fixture_directory, lettings_log_id2), open_file(fixture_directory, lettings_log_id2)) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id3}.xml") + .and_return(open_file(fixture_directory, lettings_log_id3), open_file(fixture_directory, lettings_log_id3)) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id4}.xml") + .and_return(open_file(fixture_directory, lettings_log_id4), open_file(fixture_directory, lettings_log_id4)) + end + + it "successfully create all lettings logs" do + expect(logger).not_to receive(:error) + expect(logger).not_to receive(:warn) + expect(logger).not_to receive(:info) + expect { lettings_log_service.create_logs(remote_folder) } + .to change(LettingsLog, :count).by(4) + end + + it "only updates existing lettings logs" do + expect(logger).not_to receive(:error) + expect(logger).not_to receive(:warn) + expect(logger).to receive(:info).with(/Updating lettings log/).exactly(4).times + expect { 2.times { lettings_log_service.create_logs(remote_folder) } } + .to change(LettingsLog, :count).by(4) + end + + context "when there are status discrepancies" do + let(:lettings_log_id5) { "893ufj2s-lq77-42m4-rty6-ej09gh585uy1" } + let(:lettings_log_id6) { "5ybz29dj-l33t-k1l0-hj86-n4k4ma77xkcd" } + let(:lettings_log_file) { open_file(fixture_directory, lettings_log_id5) } + let(:lettings_log_xml) { Nokogiri::XML(lettings_log_file) } + + before do + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id5}.xml") + .and_return(open_file(fixture_directory, lettings_log_id5), open_file(fixture_directory, lettings_log_id5)) + allow(storage_service).to receive(:get_file_io) + .with("#{remote_folder}/#{lettings_log_id6}.xml") + .and_return(open_file(fixture_directory, lettings_log_id6), open_file(fixture_directory, lettings_log_id6)) + end + + it "the logger logs a warning with the lettings log's old id/filename" do + expect(logger).to receive(:warn).with(/is not completed/).once + expect(logger).to receive(:warn).with(/lettings log with old id:#{lettings_log_id5} is incomplete but status should be complete/).once + + lettings_log_service.send(:create_log, lettings_log_xml) + end + + it "on completion the ids of all logs with status discrepancies are logged in a warning" do + allow(storage_service).to receive(:list_files) + .and_return(%W[#{remote_folder}/#{lettings_log_id5}.xml #{remote_folder}/#{lettings_log_id6}.xml]) + expect(logger).to receive(:warn).with(/is not completed/).twice + expect(logger).to receive(:warn).with(/is incomplete but status should be complete/).twice + expect(logger).to receive(:warn).with(/The following lettings logs had status discrepancies: \[893ufj2s-lq77-42m4-rty6-ej09gh585uy1, 5ybz29dj-l33t-k1l0-hj86-n4k4ma77xkcd\]/) + + lettings_log_service.create_logs(remote_folder) + end + end + end + + context "when importing a specific log" do + let(:lettings_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } + let(:lettings_log_file) { open_file(fixture_directory, lettings_log_id) } + let(:lettings_log_xml) { Nokogiri::XML(lettings_log_file) } + + context "and the void date is after the start date" do + before { lettings_log_xml.at_xpath("//xmlns:VYEAR").content = 2023 } + + it "does not import the voiddate" do + expect(logger).to receive(:warn).with(/is not completed/) + expect(logger).to receive(:warn).with(/lettings log with old id:#{lettings_log_id} is incomplete but status should be complete/) + + lettings_log_service.send(:create_log, lettings_log_xml) + + lettings_log = LettingsLog.where(old_id: lettings_log_id).first + expect(lettings_log&.voiddate).to be_nil + end + end + + context "and the organisation legacy ID does not exist" do + before { lettings_log_xml.at_xpath("//xmlns:OWNINGORGID").content = 99_999 } + + it "raises an exception" do + expect { lettings_log_service.send(:create_log, lettings_log_xml) } + .to raise_error(RuntimeError, "Organisation not found with legacy ID 99999") + end + end + + context "and a person is under 16" do + before { lettings_log_xml.at_xpath("//xmlns:P2Age").content = 14 } + + context "when the economic status is set to refuse" do + before { lettings_log_xml.at_xpath("//xmlns:P2Eco").content = "10) Refused" } + + it "sets the economic status to child under 16" do + # The update is done when calculating derived variables + expect(logger).to receive(:warn).with(/Differences found when saving log/) + lettings_log_service.send(:create_log, lettings_log_xml) + + lettings_log = LettingsLog.where(old_id: lettings_log_id).first + expect(lettings_log&.ecstat2).to be(9) + end + end + + context "when the relationship to lead tenant is set to refuse" do + before { lettings_log_xml.at_xpath("//xmlns:P2Rel").content = "Refused" } + + it "sets the relationship to lead tenant to child" do + lettings_log_service.send(:create_log, lettings_log_xml) + + lettings_log = LettingsLog.where(old_id: lettings_log_id).first + expect(lettings_log&.relat2).to eq("C") + end + end + end + + context "and this is an internal transfer from a non social housing" do + before do + lettings_log_xml.at_xpath("//xmlns:Q11").content = "9 Residential care home" + lettings_log_xml.at_xpath("//xmlns:Q16").content = "1 Internal Transfer" + end + + it "intercepts the relevant validation error" do + expect(logger).to receive(:warn).with(/Removing internal transfer referral since previous tenancy is a non social housing/) + expect { lettings_log_service.send(:create_log, lettings_log_xml) } + .not_to raise_error + end + + it "clears out the referral answer" do + allow(logger).to receive(:warn) + + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + + expect(lettings_log).not_to be_nil + expect(lettings_log.referral).to be_nil + end + + context "and this is an internal transfer from a previous fixed term tenancy" do + before do + lettings_log_xml.at_xpath("//xmlns:Q11").content = "30 Fixed term Local Authority General Needs tenancy" + lettings_log_xml.at_xpath("//xmlns:Q16").content = "1 Internal Transfer" + end + + it "intercepts the relevant validation error" do + expect(logger).to receive(:warn).with(/Removing internal transfer referral since previous tenancy is fixed terms or lifetime/) + expect { lettings_log_service.send(:create_log, lettings_log_xml) } + .not_to raise_error + end + + it "clears out the referral answer" do + allow(logger).to receive(:warn) + + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + + expect(lettings_log).not_to be_nil + expect(lettings_log.referral).to be_nil + end + end + end + + context "and the net income soft validation is triggered (net_income_value_check)" do + before do + lettings_log_xml.at_xpath("//xmlns:Q8a").content = "1 Weekly" + lettings_log_xml.at_xpath("//xmlns:Q8Money").content = 890.00 + end + + it "completes the log" do + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + expect(lettings_log.status).to eq("completed") + end + end + + context "and the rent soft validation is triggered (rent_value_check)" do + before do + lettings_log_xml.at_xpath("//xmlns:Q18ai").content = 200.00 + lettings_log_xml.at_xpath("//xmlns:Q18av").content = 232.02 + lettings_log_xml.at_xpath("//xmlns:Q17").content = "1 Weekly for 52 weeks" + LaRentRange.create!( + start_year: 2021, + la: "E08000035", + beds: 2, + lettype: 1, + soft_max: 900, + hard_max: 1500, + soft_min: 500, + hard_min: 100, + ) + end + + it "completes the log" do + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + expect(lettings_log.status).to eq("completed") + end + end + + context "and the retirement soft validation is triggered (retirement_value_check)" do + before do + lettings_log_xml.at_xpath("//xmlns:P1Age").content = 68 + lettings_log_xml.at_xpath("//xmlns:P1Eco").content = "6) Not Seeking Work" + end + + it "completes the log" do + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + expect(lettings_log.status).to eq("completed") + end + end + + context "and this is a supported housing log with multiple locations under a scheme" do + let(:lettings_log_id) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } + + it "sets the scheme and location values" do + expect(logger).not_to receive(:warn) + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + + expect(lettings_log.scheme_id).not_to be_nil + expect(lettings_log.location_id).not_to be_nil + expect(lettings_log.status).to eq("completed") + end + end + + context "and this is a supported housing log with a single location under a scheme" do + let(:lettings_log_id) { "0b4a68df-30cc-474a-93c0-a56ce8fdad3b" } + + before { lettings_log_xml.at_xpath("//xmlns:_1cmangroupcode").content = scheme2.old_visible_id } + + it "sets the scheme and location values" do + expect(logger).not_to receive(:warn) + lettings_log_service.send(:create_log, lettings_log_xml) + lettings_log = LettingsLog.find_by(old_id: lettings_log_id) + + expect(lettings_log.scheme_id).not_to be_nil + expect(lettings_log.location_id).not_to be_nil + expect(lettings_log.status).to eq("completed") + end + end + end +end diff --git a/spec/views/form/page_view_spec.rb b/spec/views/form/page_view_spec.rb index 19072c3a3..2cedf6eba 100644 --- a/spec/views/form/page_view_spec.rb +++ b/spec/views/form/page_view_spec.rb @@ -1,8 +1,8 @@ require "rails_helper" RSpec.describe "form/page" do - let(:case_log) { FactoryBot.create(:case_log, :in_progress) } - let(:form) { case_log.form } + let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } + let(:form) { lettings_log.form } let(:subsection) { form.get_subsection("income_and_benefits") } let(:page) { form.get_page("net_income") } let(:question) { page.questions.find { |q| q.id == "earnings" } } @@ -18,7 +18,7 @@ RSpec.describe "form/page" do end before do - assign(:case_log, case_log) + assign(:lettings_log, lettings_log) assign(:page, page) assign(:subsection, subsection) assign_attributes(page, page_attributes)