require "rails_helper" RSpec.describe UserHelper do let(:current_user) { FactoryBot.create(:user, :data_coordinator) } let(:user) { FactoryBot.create(:user, :data_coordinator) } describe "aliased_user_edit" do context "when the current logged in user is the same as the user being viewed" do let(:user) { current_user } it "returns the edit account path" do expect(aliased_user_edit(user, current_user)).to eq(edit_account_path) end end context "when the current logged in user is not the same as the user being viewed" do it "returns the edit user path" do expect(aliased_user_edit(user, current_user)).to eq(edit_user_path(user)) end end end describe "perspective" do context "when the current logged in user is the same as the user being viewed" do let(:user) { current_user } it "returns 'Are you'" do expect(perspective(user, current_user)).to eq("Are you") end end context "when the current logged in user is not the same as the user being viewed" do it "returns 'Is this person'" do expect(perspective(user, current_user)).to eq("Is this person") end end end describe "change button permissions" do context "when the user is a data provider viewing organisation details" do let(:current_user) { FactoryBot.create(:user, :data_provider) } it "does not allow changing details" do expect(can_edit_org?(current_user)).to be false end end context "when the user is a data coordinator viewing organisation details" do let(:current_user) { FactoryBot.create(:user, :data_coordinator) } it "does not allow changing details" do expect(can_edit_org?(current_user)).to be true end end context "when the user is a support user viewing organisation details" do let(:current_user) { FactoryBot.create(:user, :support) } it "does not allow changing details" do expect(can_edit_org?(current_user)).to be true end end end describe "organisation_change_warning" do context "when user doesn't own any logs" do it "returns a message with the number of logs" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. There are 0 logs assigned to them." expect(organisation_change_warning(user, current_user.organisation)).to eq(expected_text) end end context "when user owns 1 lettings log" do before do create(:lettings_log, assigned_to: user) end it "returns a message with the number of logs" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. There is 1 log assigned to them." expect(organisation_change_warning(user, current_user.organisation)).to eq(expected_text) end end context "when user owns 1 sales log" do before do create(:sales_log, assigned_to: user) end it "returns a message with the number of logs" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. There is 1 log assigned to them." expect(organisation_change_warning(user, current_user.organisation)).to eq(expected_text) end end context "when user owns multiple logs" do before do create(:lettings_log, assigned_to: user) create(:sales_log, assigned_to: user) end it "returns a message with the number of logs" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. There are 2 logs assigned to them." expect(organisation_change_warning(user, current_user.organisation)).to eq(expected_text) end end end describe "organisation_change_confirmation_warning" do context "when user owns logs" do before do create(:lettings_log, assigned_to: user) end context "with reassign all choice" do it "returns the correct message" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. The stock owner and managing agent on their logs will change to #{current_user.organisation.name}." expect(organisation_change_confirmation_warning(user, current_user.organisation, "reassign_all")).to eq(expected_text) end end context "with reassign stock owners choice" do it "returns the correct message" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. The stock owner on their logs will change to #{current_user.organisation.name}." expect(organisation_change_confirmation_warning(user, current_user.organisation, "reassign_stock_owner")).to eq(expected_text) end end context "with reassign managing agent choice" do it "returns the correct message" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. The managing agent on their logs will change to #{current_user.organisation.name}." expect(organisation_change_confirmation_warning(user, current_user.organisation, "reassign_managing_agent")).to eq(expected_text) end end context "with unassign choice" do it "returns the correct message" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. Their logs will be unassigned." expect(organisation_change_confirmation_warning(user, current_user.organisation, "unassign")).to eq(expected_text) end end end context "when user doesn't own logs" do it "returns the correct message" do expected_text = "You’re moving #{user.name} from #{user.organisation.name} to #{current_user.organisation.name}. There are no logs assigned to them." expect(organisation_change_confirmation_warning(user, current_user.organisation, "reassign_all")).to eq(expected_text) end end end end