require "rails_helper" RSpec.describe BulkUploadLettingsResultsController, type: :request do let(:user) { create(:user) } let(:support_user) { create(:user, :support) } let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:) } let(:bulk_upload_errors) { create_list(:bulk_upload_error, 2) } let(:viewing_user) { user } before do sign_in viewing_user end describe "GET /lettings-logs/bulk-upload-results/:ID/summary" do it "renders year combo" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response).to be_successful expect(response.body).to include("Bulk upload for lettings (#{bulk_upload.year_combo})") end it "renders the bulk upload filename" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include(bulk_upload.filename) end context "when viewed by support user" do before do allow(support_user).to receive(:need_two_factor_authentication?).and_return(false) end let(:viewing_user) { support_user } it "is accessible" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response).to be_successful expect(response.body).to include(bulk_upload.filename) end end context "when viewed by some other random user" do let(:other_user) { create(:user) } let(:viewing_user) { other_user } it "is not accessible" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response).to be_unauthorized end end context "when viewed by another user in the same org" do let(:other_user) { create(:user, organisation: user.organisation) } let(:viewing_user) { other_user } it "is accessible" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response).to be_successful expect(response.body).to include(bulk_upload.filename) end context "and bulk upload has been cancelled by not the current moved user" do let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:, choice: "cancelled-by-moved-user", moved_user_id: user.id) } it "is displays a correct banner" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") expect(response.body).to include("Some logs in this upload are assigned to #{user.name}, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") end end context "and bulk upload has been cancelled by the current moved user" do let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:, choice: "cancelled-by-moved-user", moved_user_id: other_user.id) } it "is displays a correct banner" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") expect(response.body).to include("You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") end end end end describe "GET /lettings-logs/bulk-upload-results/:ID" do it "renders correct year" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}" expect(response).to be_successful expect(response.body).to include("Bulk upload for lettings (#{bulk_upload.year_combo})") end it "renders correct number of errors" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}" expect(response).to be_successful expect(response.body).to include("We found 2 errors in your file") end it "renders filename of the upload" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}" expect(response).to be_successful expect(response.body).to include(bulk_upload.filename) end context "when there are errors for more than 1 row" do let(:bulk_upload_errors) { [bulk_upload_error_1, bulk_upload_error_2] } let(:bulk_upload_error_1) { create(:bulk_upload_error, row: 1) } let(:bulk_upload_error_2) { create(:bulk_upload_error, row: 2) } it "renders no. of tables equal to no. of rows with errors" do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}" expect(response.body).to include("