From 9750eed5d32021f0618a2be0c8fe37973fb4e79f Mon Sep 17 00:00:00 2001 From: Arthur Campbell Date: Thu, 25 May 2023 08:44:55 +0100 Subject: [PATCH] create basic tests for the view component for listing logs to delete --- spec/views/form/page_view_spec.rb | 4 +- spec/views/logs/delete_logs_spec.rb | 102 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 spec/views/logs/delete_logs_spec.rb diff --git a/spec/views/form/page_view_spec.rb b/spec/views/form/page_view_spec.rb index 074a7fd6a..614f56562 100644 --- a/spec/views/form/page_view_spec.rb +++ b/spec/views/form/page_view_spec.rb @@ -22,8 +22,6 @@ RSpec.describe "form/page" do Singleton.__init__(FormHandler) example.run end - Timecop.return - Singleton.__init__(FormHandler) end before do @@ -45,7 +43,7 @@ RSpec.describe "form/page" do context "with a page containing a description" do let(:description) { "Test description with link." } let(:page_attributes) { { description: } } - let(:expected_html) { '

Test description with link.

' } + let(:expected_html) { "

#{description}

" } it "renders the description" do expect(rendered).to match(expected_html) diff --git a/spec/views/logs/delete_logs_spec.rb b/spec/views/logs/delete_logs_spec.rb new file mode 100644 index 000000000..52a3e7064 --- /dev/null +++ b/spec/views/logs/delete_logs_spec.rb @@ -0,0 +1,102 @@ +require "rails_helper" + +RSpec.describe "logs/delete_logs.html.erb" do + let(:lettings_log_1) { create(:lettings_log, tenancycode: "Holistic", propcode: "Detective Agency") } + let(:lettings_logs) { [lettings_log_1] } + let(:delete_logs_form) { Forms::DeleteLogsForm.new(log_ids: lettings_logs.map(&:id), log_type: :lettings) } + + before do + sign_in create(:user, :support, name: "Dirk Gently") + assign(:delete_logs_form, delete_logs_form) + end + + it "has the correct h1 content" do + render + fragment = Capybara::Node::Simple.new(rendered) + h1 = fragment.find("h1") + expect(h1.text).to include "Review the logs you want to delete" + end + + context "when there is one log to delete" do + it "shows the informative text in the singular" do + render + fragment = Capybara::Node::Simple.new(rendered) + info_text = fragment.first("p").text + expect(info_text).to eq "You've selected 1 log to delete" + end + end + + context "when there is more than one log to delete" do + let(:lettings_log_2) { create(:lettings_log, tenancycode: "01-354", propcode: "9112") } + + before do + lettings_logs << lettings_log_2 + delete_logs_form = Forms::DeleteLogsForm.new(log_ids: lettings_logs.map(&:id), log_type: :lettings) + assign(:delete_logs_form, delete_logs_form) + end + + it "shows the informative text in the plural" do + render + fragment = Capybara::Node::Simple.new(rendered) + info_text = fragment.first("p").text + expect(info_text).to eq "You've selected #{lettings_logs.count} logs to delete" + end + end + + context "when the user is deletings lettings logs" do + it "shows the correct headers in the table" do + render + fragment = Capybara::Node::Simple.new(rendered) + headers = fragment.find_all("table thead tr th").map(&:text) + expect(headers).to eq ["Log ID", "Tenancy code", "Property reference", "Status", "Delete?"] + end + + it "shows the correct information in each row" do + render + fragment = Capybara::Node::Simple.new(rendered) + row_data = fragment.find_all("table tbody tr td").map(&:text)[0...-1] + expect(row_data).to eq [lettings_log_1.id.to_s, lettings_log_1.tenancycode, lettings_log_1.propcode, lettings_log_1.status.humanize.capitalize] + end + + it "shows a checkbox with the correct hidden label in the final cell of each row" do + render + fragment = Capybara::Node::Simple.new(rendered) + final_cell = fragment.find_all("table tbody tr td")[-1] + expect(final_cell.find("input")[:type]).to eq "checkbox" + checkbox_label = final_cell.find("label span") + expect(checkbox_label.text).to eq lettings_log_1.id.to_s + expect(checkbox_label[:class]).to include "govuk-visually-hidden" + end + end + + context "when the user is deletings sales logs" do + let(:organisation) { create(:organisation, name: "awgan-eye-zay-shun") } + let(:sales_log_1) { create(:sales_log, owning_organisation: organisation) } + let(:sales_logs) { [sales_log_1] } + let(:delete_logs_form) { Forms::DeleteLogsForm.new(log_ids: sales_logs.map(&:id), log_type: :sales) } + + it "shows the correct headers in the table" do + render + fragment = Capybara::Node::Simple.new(rendered) + headers = fragment.find_all("table thead tr th").map(&:text) + expect(headers).to eq ["Log ID", "Owning organisation", "Created", "Status", "Delete?"] + end + + it "shows the correct information in each row" do + render + fragment = Capybara::Node::Simple.new(rendered) + row_data = fragment.find_all("table tbody tr td").map(&:text)[0...-1] + expect(row_data).to eq [sales_log_1.id.to_s, sales_log_1.owning_organisation.name, sales_log_1.created_at.to_formatted_s(:govuk_date), sales_log_1.status.humanize.capitalize] + end + + it "shows a checkbox with the correct hidden label in the final cell of each row" do + render + fragment = Capybara::Node::Simple.new(rendered) + final_cell = fragment.find_all("table tbody tr td")[-1] + expect(final_cell.find("input")[:type]).to eq "checkbox" + checkbox_label = final_cell.find("label span") + expect(checkbox_label.text).to eq sales_log_1.id.to_s + expect(checkbox_label[:class]).to include "govuk-visually-hidden" + end + end +end