Submit social housing lettings and sales data (CORE)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

876 lines
40 KiB

require "rails_helper"
RSpec.describe MergeRequestsController, type: :request do
let(:organisation) { user.organisation }
let(:other_organisation) { create(:organisation, name: "Other Test Org") }
let(:headers) { { "Accept" => "text/html" } }
let(:page) { Capybara::Node::Simple.new(response.body) }
let(:user) { create(:user, :data_coordinator) }
let(:support_user) { create(:user, :support, organisation:) }
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:other_merge_request) { MergeRequest.create!(requesting_organisation: other_organisation) }
context "when user is signed in with a support user" do
before do
allow(support_user).to receive(:need_two_factor_authentication?).and_return(false)
sign_in support_user
end
context "when creating a new merge request" do
let(:params) { { merge_request: { requesting_organisation_id: support_user.organisation_id } } }
before do
post "/merge-request", headers:, params:
end
it "creates merge request with requesting organisation" do
follow_redirect!
expect(page).to have_content("Which organisation is absorbing the others?")
expect(MergeRequest.first.requesting_organisation_id).to eq(support_user.organisation_id)
end
context "when passing a different requesting organisation id" do
let(:params) { { merge_request: { requesting_organisation_id: other_organisation.id } } }
it "creates merge request with current user organisation" do
follow_redirect!
expect(MergeRequest.count).to eq(1)
expect(MergeRequest.first.requesting_organisation_id).to eq(support_user.organisation_id)
expect(MergeRequest.first.merging_organisations.count).to eq(0)
end
end
end
describe "#merging-organisations" do
context "when viewing merging organisations page" do
before do
merge_request.update!(absorbing_organisation_id: organisation.id)
get "/merge-request/#{merge_request.id}/merging-organisations", headers:
end
it "shows the correct content" do
expect(page).to have_content("Which organisations are merging into #{organisation.name}?")
end
end
end
describe "#update_merging_organisations" do
let(:params) { { merge_request: { merging_organisation: other_organisation.id, new_merging_org_ids: [] } } }
context "when updating a merge request with a new merging organisation" do
before do
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "adds merging organisation to the page" do
merge_request.reload
expect(page).to have_content(organisation.name)
expect(page).to have_content("Other Test Org")
expect(page).to have_link("Remove")
end
end
context "when the user selects an organisation that requested another merge" do
let(:params) { { merge_request: { merging_organisation: other_organisation.id, new_merging_org_ids: [] } } }
before do
MergeRequest.create!(requesting_organisation_id: other_organisation.id, request_merged: true)
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not error" do
merge_request.reload
expect(page).not_to have_content(I18n.t("validations.merge_request.organisation_part_of_another_merge"))
end
end
context "when the user updates merge request with organisation that is already part of another merge" do
let(:another_organisation) { create(:organisation) }
let(:other_merge_request) { create(:merge_request, merge_date: Time.zone.local(2022, 5, 4)) }
let(:params) { { merge_request: { merging_organisation: another_organisation.id, new_merging_org_ids: [] } } }
before do
MergeRequestOrganisation.create!(merge_request_id: other_merge_request.id, merging_organisation_id: another_organisation.id)
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "displays the page with an error message" do
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("Another merge request records #{another_organisation.name} as merging into #{other_merge_request.absorbing_organisation&.name} on 4 May 2022. Select another organisation or remove this organisation from the other merge request.")
end
end
context "when the user selects an organisation that is a part of another merge" do
let(:another_organisation) { create(:organisation) }
let(:params) { { merge_request: { merging_organisation: another_organisation.id, new_merging_org_ids: [] } } }
before do
existing_merge_request = MergeRequest.create!(requesting_organisation_id: other_organisation.id, request_merged: true)
MergeRequestOrganisation.create!(merge_request_id: existing_merge_request.id, merging_organisation_id: another_organisation.id)
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not update the merge request" do
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(0)
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content(I18n.t("validations.merge_request.organisation_part_of_another_merge"))
end
end
context "when the user selects an organisation that is a part of another incomplete merge" do
let(:another_organisation) { create(:organisation) }
let(:params) { { merge_request: { merging_organisation: another_organisation.id, new_merging_org_ids: [] } } }
before do
existing_merge_request = MergeRequest.create!(requesting_organisation_id: other_organisation.id)
MergeRequestOrganisation.create!(merge_request_id: existing_merge_request.id, merging_organisation_id: another_organisation.id)
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not error" do
merge_request.reload
expect(page).not_to have_content(I18n.t("validations.merge_request.organisation_part_of_another_merge"))
end
end
context "when the user selects an organisation that is a part of current merge" do
let(:another_organisation) { create(:organisation) }
let(:params) { { merge_request: { merging_organisation: another_organisation.id, new_merging_org_ids: [] } } }
before do
merge_request.merging_organisations << another_organisation
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not update the merge request" do
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(1)
end
end
context "when the user does not select an organisation" do
let(:params) { { merge_request: { merging_organisation: nil, new_merging_org_ids: [] } } }
before do
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not update the merge request" do
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(0)
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content(I18n.t("validations.merge_request.organisation_not_selected"))
end
end
context "when the user selects non existent id" do
let(:params) { { merge_request: { merging_organisation: "clearly_not_an_id", new_merging_org_ids: [] } } }
before do
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not update the merge request" do
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(0)
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content(I18n.t("validations.merge_request.organisation_not_selected"))
end
end
end
describe "#remove_organisation" do
let(:params) { { merge_request: { merging_organisation: other_organisation.id } } }
context "when removing an organisation from merge request" do
before do
MergeRequestOrganisation.create!(merge_request_id: merge_request.id, merging_organisation_id: other_organisation.id)
get "/merge-request/#{merge_request.id}/merging-organisations/remove", headers:, params:
end
it "updates the merge request" do
expect(merge_request.merging_organisations.count).to eq(0)
expect(page).not_to have_link("Remove")
end
end
context "when removing an organisation that is not part of a merge from merge request" do
before do
get "/merge-request/#{merge_request.id}/merging-organisations/remove", headers:, params:
end
it "does not throw an error" do
expect(merge_request.merging_organisations.count).to eq(0)
expect(page).not_to have_link("Remove")
end
end
end
describe "#absorbing_organisation" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
before { get "/merge-request/#{merge_request.id}/absorbing-organisation", headers: }
it "asks for the absorbing organisation" do
expect(page).to have_content("Which organisation is absorbing the others?")
expect(page).to have_content("Select organisation name")
end
it "has the correct back button" do
expect(page).to have_link("Back", href: organisations_path(tab: "merge-requests"))
end
end
describe "#merge_date" do
context "when viewing merge date page" do
before do
merge_request.update!(absorbing_organisation_id: organisation.id)
get "/merge-request/#{merge_request.id}/merge-date", headers:
end
it "shows the correct content" do
expect(page).to have_content("What is the merge date?")
end
end
end
describe "#existing_absorbing_organisation" do
context "when viewing helpdesk ticket page" do
before do
merge_request.update!(absorbing_organisation_id: organisation.id, merge_date: Time.zone.today)
get "/merge-request/#{merge_request.id}/existing-absorbing-organisation", headers:
end
it "shows the correct content" do
expect(page).to have_content("Was #{merge_request.absorbing_organisation.name} already active before the merge date?")
expect(page).to have_content("Yes, this organisation existed before the merge")
expect(page).to have_content("No, it is a new organisation created by this merge")
expect(page).to have_link("Back", href: merge_date_merge_request_path(merge_request))
expect(page).to have_button("Save and continue")
end
end
end
describe "#helpdesk_ticket" do
context "when viewing helpdesk ticket page" do
before do
merge_request.update!(absorbing_organisation_id: organisation.id, merge_date: Time.zone.today)
get "/merge-request/#{merge_request.id}/helpdesk-ticket", headers:
end
it "shows the correct content" do
expect(page).to have_content("Was this merge reported by a helpdesk ticket?")
expect(page).to have_link("Back", href: existing_absorbing_organisation_merge_request_path(merge_request))
expect(page).to have_button("Save and continue")
end
end
end
describe "#update" do
describe "from absorbing_organisation page" do
context "when not answering the question" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "absorbing_organisation" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "renders the error" do
request
expect(page).to have_content("Select the absorbing organisation")
end
it "does not update the request" do
expect { request }.not_to(change { merge_request.reload.attributes })
end
end
context "when absorbing_organisation_id set to id" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { absorbing_organisation_id: other_organisation.id, page: "absorbing_organisation" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "redirects to merging organisations path" do
request
expect(response).to redirect_to(merging_organisations_merge_request_path(merge_request))
end
it "updates absorbing_organisation_id" do
expect { request }.to change {
merge_request.reload.absorbing_organisation
}.from(nil).to(other_organisation)
end
end
context "when updating from check_answers page" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { absorbing_organisation_id: "", page: "absorbing_organisation" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}?referrer=check_answers", headers:, params:
end
it "keeps corrent links if validation fails" do
request
expect(page).to have_link("Cancel", href: merge_request_path(merge_request))
expect(page).to have_button("Save changes")
end
end
context "when absorbing_organisation_id set to one of the merging organisations" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { absorbing_organisation_id: other_organisation.id, page: "absorbing_organisation" } }
end
let(:request) do
MergeRequestOrganisation.create!(merge_request_id: merge_request.id, merging_organisation_id: other_organisation.id)
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "removes organisation from merge request organisations" do
request
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(0)
end
end
end
describe "from merge_date page" do
context "when not answering the question" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "merge_date" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "renders the error" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("Enter a merge date")
end
it "does not update the request" do
expect { request }.not_to(change { merge_request.reload.attributes })
end
end
context "when merge date set to an invalid date" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { page: "merge_date", "merge_date(3i)": "10", "merge_date(2i)": "44", "merge_date(1i)": "2022" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "displays the page with an error message" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("Enter a valid merge date")
end
end
context "when merge date set to a valid date" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { page: "merge_date", "merge_date(3i)": "10", "merge_date(2i)": "4", "merge_date(1i)": "2022" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "redirects to existing absorbing organisation path" do
request
expect(response).to redirect_to(existing_absorbing_organisation_merge_request_path(merge_request))
end
it "updates merge_date" do
expect { request }.to change {
merge_request.reload.merge_date
}.from(nil).to(Time.zone.local(2022, 4, 10))
end
end
context "when merge date set to a date more than 1 year in the future" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { page: "merge_date", "merge_date(3i)": (Time.zone.now.day + 1).to_s, "merge_date(2i)": Time.zone.now.month.to_s, "merge_date(1i)": (Time.zone.now.year + 1).to_s } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "displays the page with an error message" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("The merge date must not be later than a year from today’s date.")
end
end
end
describe "from merging_organisations page" do
context "when the user updates merge request with valid merging organisation ID" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:another_organisation) { create(:organisation) }
let(:params) do
{ merge_request: { page: "merging_organisations", new_merging_org_ids: another_organisation.id } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "updates the merge request" do
request
merge_request.reload
expect(merge_request.merging_organisations.count).to eq(1)
expect(merge_request.merging_organisations.first.id).to eq(another_organisation.id)
end
end
end
describe "from existing_absorbing_organisation page" do
context "when not answering the question" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "existing_absorbing_organisation" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "renders the error" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("You must answer absorbing organisation already active?")
end
it "does not update the request" do
expect { request }.not_to(change { merge_request.reload.attributes })
end
end
end
describe "from helpdesk_ticket page" do
context "when not answering the question" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "helpdesk_ticket" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "renders the error" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("You must answer was this merge reported by a helpdesk ticket?")
end
it "does not update the request" do
expect { request }.not_to(change { merge_request.reload.attributes })
end
end
context "when has_helpdesk_ticket is true but no ticket is given" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "helpdesk_ticket", has_helpdesk_ticket: true } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "renders the error" do
request
expect(response).to have_http_status(:unprocessable_entity)
expect(page).to have_content("You must answer the ticket number")
end
it "does not update the request" do
expect { request }.not_to(change { merge_request.reload.attributes })
end
end
context "when has_helpdesk_ticket is false" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation, helpdesk_ticket: "123") }
let(:params) do
{ merge_request: { page: "helpdesk_ticket", has_helpdesk_ticket: false } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "updates has_helpdesk_ticket and clears helpdesk_ticket" do
request
expect(merge_request.reload.has_helpdesk_ticket).to eq(false)
expect(merge_request.helpdesk_ticket).to eq(nil)
end
end
context "when has_helpdesk_ticket is true and ticket is given" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) }
let(:params) do
{ merge_request: { page: "helpdesk_ticket", has_helpdesk_ticket: true, helpdesk_ticket: "321" } }
end
let(:request) do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "updates has_helpdesk_ticket and clears helpdesk_ticket" do
request
expect(merge_request.reload.has_helpdesk_ticket).to eq(true)
expect(merge_request.helpdesk_ticket).to eq("321")
end
end
end
end
describe "#merge_start_confirmation" do
before do
get "/merge-request/#{merge_request.id}/merge-start-confirmation", headers:
end
it "has correct content" do
expect(page).to have_content("Are you sure you want to begin this merge?")
expect(page).to have_content("You will not be able to undo this action")
expect(page).to have_link("Back", href: merge_request_path(merge_request))
expect(page).to have_button("Begin merge")
end
end
describe "#start_merge" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: organisation, merge_date: Time.zone.local(2022, 3, 3), existing_absorbing_organisation: true) }
let(:merging_organisation) { create(:organisation, name: "Merging Test Org") }
before do
allow(ProcessMergeRequestJob).to receive(:perform_later).and_return(nil)
end
context "when merge request is ready to merge" do
before do
create(:merge_request_organisation, merge_request:, merging_organisation: other_organisation)
create(:merge_request_organisation, merge_request:, merging_organisation:)
create_list(:scheme, 2, owning_organisation: organisation)
create(:lettings_log, owning_organisation: organisation)
create(:sales_log, owning_organisation: organisation)
end
it "runs the job with correct merge request" do
expect(merge_request.reload.status).to eq("ready_to_merge")
expect(ProcessMergeRequestJob).to receive(:perform_later).with(merge_request:).once
patch "/merge-request/#{merge_request.id}/start-merge"
expect(merge_request.reload.status).to eq("processing")
expect(merge_request.total_users).to eq(5)
expect(merge_request.total_schemes).to eq(2)
expect(merge_request.total_stock_owners).to eq(0)
expect(merge_request.total_managing_agents).to eq(0)
expect(merge_request.total_lettings_logs).to eq(1)
expect(merge_request.total_sales_logs).to eq(1)
end
end
context "when merge request is not ready to merge" do
it "does not run the job" do
expect(merge_request.status).to eq("incomplete")
expect(ProcessMergeRequestJob).not_to receive(:perform_later).with(merge_request:)
patch "/merge-request/#{merge_request.id}/start-merge"
expect(merge_request.reload.status).to eq("incomplete")
end
end
end
describe "#show" do
before do
create(:merge_request_organisation, merge_request:, merging_organisation: other_organisation)
create_list(:scheme, 2, owning_organisation: organisation)
create_list(:scheme, 2, owning_organisation: other_organisation)
create(:lettings_log, owning_organisation: organisation)
create(:lettings_log, owning_organisation: other_organisation)
create_list(:sales_log, 2, owning_organisation: other_organisation)
create(:sales_log, owning_organisation: organisation)
get "/merge-request/#{merge_request.id}", headers:
end
context "when request has previously failed" do
let(:merge_request) { create(:merge_request, last_failed_attempt: Time.zone.yesterday) }
it "shows a banner" do
expect(page).to have_content("An error occurred while processing the merge.")
expect(page).to have_content("No changes have been made. Try beginning the merge again.")
end
end
context "when request has not previously failed" do
let(:merge_request) { create(:merge_request, last_failed_attempt: nil) }
it "does not show a banner" do
expect(page).not_to have_content("An error occurred while processing the merge.")
expect(page).not_to have_content("No changes have been made. Try beginning the merge again.")
end
end
it "has begin merge button" do
expect(page).to have_link("Begin merge", href: merge_start_confirmation_merge_request_path(merge_request))
end
context "with unmerged request" do
let(:merge_request) { create(:merge_request, absorbing_organisation_id: organisation.id, merge_date: Time.zone.today, existing_absorbing_organisation: true) }
it "shows outcomes count and has links to view merge outcomes" do
expect(page).to have_link("View", href: user_outcomes_merge_request_path(merge_request))
expect(page).to have_link("View", href: scheme_outcomes_merge_request_path(merge_request))
expect(page).to have_link("View", href: relationship_outcomes_merge_request_path(merge_request))
expect(page).to have_link("View", href: logs_outcomes_merge_request_path(merge_request))
expect(page).to have_content("4 users")
expect(page).to have_content("4 schemes")
expect(page).to have_content("0 stock owners")
expect(page).to have_content("0 managing agents")
expect(page).to have_content("2 lettings logs")
expect(page).to have_content("3 sales logs")
end
end
context "with a merged request" do
let(:merge_request) { create(:merge_request, request_merged: true, total_users: 34, total_schemes: 12, total_stock_owners: 8, total_managing_agents: 5, total_lettings_logs: 4, total_sales_logs: 5) }
it "shows saved users count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("request_merged")
expect(page).not_to have_link("View", href: user_outcomes_merge_request_path(merge_request))
expect(page).to have_content("34 users")
end
it "shows saved schemes count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("request_merged")
expect(page).not_to have_link("View", href: scheme_outcomes_merge_request_path(merge_request))
expect(page).to have_content("12 schemes")
end
it "shows stock owners and managing agents count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("request_merged")
expect(page).not_to have_link("View", href: relationship_outcomes_merge_request_path(merge_request))
expect(page).to have_content("8 stock owners")
expect(page).to have_content("5 managing agents")
end
it "shows logs counts and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("request_merged")
expect(page).not_to have_link("View", href: logs_outcomes_merge_request_path(merge_request))
expect(page).to have_content("4 lettings logs")
expect(page).to have_content("5 sales logs")
end
end
context "with a processing request" do
let(:merge_request) { create(:merge_request, processing: true, total_users: 51, total_schemes: 33, total_stock_owners: 15, total_managing_agents: 20) }
it "shows saved users count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("processing")
expect(page).not_to have_link("View", href: user_outcomes_merge_request_path(merge_request))
expect(page).to have_content("51 users")
end
it "shows saved schemes count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("processing")
expect(page).not_to have_link("View", href: scheme_outcomes_merge_request_path(merge_request))
expect(page).to have_content("33 schemes")
end
it "shows stock owners and managing agents count and doesn't have links to view merge outcomes" do
expect(merge_request.status).to eq("processing")
expect(page).not_to have_link("View", href: relationship_outcomes_merge_request_path(merge_request))
expect(page).to have_content("15 stock owners")
expect(page).to have_content("20 managing agents")
end
end
end
describe "#user_outcomes" do
let(:merge_request) { create(:merge_request, absorbing_organisation: organisation) }
let(:organisation_with_no_users) { create(:organisation, name: "Organisation with no users", with_dsa: false) }
let(:organisation_with_no_users_too) { create(:organisation, name: "Organisation with no users too", with_dsa: false) }
let(:organisation_with_some_users) { create(:organisation, name: "Organisation with some users", with_dsa: false) }
let(:organisation_with_some_more_users) { create(:organisation, name: "Organisation with many users", with_dsa: false) }
before do
create_list(:user, 4, organisation: organisation_with_some_users)
create_list(:user, 12, organisation: organisation_with_some_more_users)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_users)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_users_too)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_some_users)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_some_more_users)
get "/merge-request/#{merge_request.id}/user-outcomes", headers:
end
it "shows user outcomes after merge" do
expect(page).to have_link("View all 4 Organisation with some users users (opens in a new tab)", href: users_organisation_path(organisation_with_some_users))
expect(page).to have_link("View all 12 Organisation with many users users (opens in a new tab)", href: users_organisation_path(organisation_with_some_more_users))
expect(page).to have_link("View all 3 #{organisation.name} users (opens in a new tab)", href: users_organisation_path(organisation))
expect(page).to have_content("Organisation with no users and Organisation with no users too have no users.")
expect(page).to have_content("19 users after merge")
end
end
describe "#scheme_outcomes" do
let(:merge_request) { create(:merge_request, absorbing_organisation: organisation) }
let(:organisation_with_no_schemes) { create(:organisation, name: "Organisation with no schemes") }
let(:organisation_with_no_schemes_too) { create(:organisation, name: "Organisation with no schemes too") }
let(:organisation_with_some_schemes) { create(:organisation, name: "Organisation with some schemes") }
let(:organisation_with_some_more_schemes) { create(:organisation, name: "Organisation with many schemes") }
before do
create_list(:scheme, 4, owning_organisation: organisation_with_some_schemes)
create_list(:scheme, 6, owning_organisation: organisation_with_some_more_schemes)
create_list(:scheme, 3, owning_organisation: organisation)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_schemes)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_schemes_too)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_some_schemes)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_some_more_schemes)
get "/merge-request/#{merge_request.id}/scheme-outcomes", headers:
end
it "shows scheme outcomes after merge" do
expect(page).to have_link("View all 4 Organisation with some schemes schemes (opens in a new tab)", href: schemes_organisation_path(organisation_with_some_schemes))
expect(page).to have_link("View all 6 Organisation with many schemes schemes (opens in a new tab)", href: schemes_organisation_path(organisation_with_some_more_schemes))
expect(page).to have_link("View all 3 #{organisation.name} schemes (opens in a new tab)", href: schemes_organisation_path(organisation))
expect(page).to have_content("Organisation with no schemes and Organisation with no schemes too have no schemes.")
expect(page).to have_content("13 schemes after merge")
end
end
describe "#logs_outcomes" do
let(:merge_request) { create(:merge_request, absorbing_organisation: organisation) }
let(:organisation_with_no_logs) { create(:organisation, name: "Organisation with no logs") }
let(:organisation_with_no_logs_too) { create(:organisation, name: "Organisation with no logs too") }
let(:organisation_with_some_logs) { create(:organisation, name: "Organisation with some logs") }
before do
create_list(:lettings_log, 4, owning_organisation: organisation_with_some_logs)
create_list(:sales_log, 2, owning_organisation: organisation_with_some_logs)
create_list(:lettings_log, 2, owning_organisation: organisation)
create_list(:sales_log, 3, owning_organisation: organisation)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_logs)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_no_logs_too)
create(:merge_request_organisation, merge_request:, merging_organisation: organisation_with_some_logs)
get "/merge-request/#{merge_request.id}/logs-outcomes", headers:
end
it "shows logs outcomes after merge" do
expect(page).to have_link("View all 4 Organisation with some logs lettings logs (opens in a new tab)", href: lettings_logs_organisation_path(organisation_with_some_logs))
expect(page).to have_link("View all 2 Organisation with some logs sales logs (opens in a new tab)", href: sales_logs_organisation_path(organisation_with_some_logs))
expect(page).to have_link("View all 2 #{organisation.name} lettings logs (opens in a new tab)", href: lettings_logs_organisation_path(organisation))
expect(page).to have_link("View all 3 #{organisation.name} sales logs (opens in a new tab)", href: sales_logs_organisation_path(organisation))
expect(page).to have_content("Organisation with no logs and Organisation with no logs too have no lettings logs.")
expect(page).to have_content("Organisation with no logs and Organisation with no logs too have no sales logs.")
expect(page).to have_content("6 lettings logs after merge")
expect(page).to have_content("5 sales logs after merge")
end
end
end
context "when user is signed in with a data coordinator user" do
before do
sign_in user
end
describe "#merging_organisations" do
let(:params) { { merge_request: { requesting_organisation_id: other_organisation.id } } }
context "when creating a new merge request" do
before do
post "/merge-request", headers:, params:
end
it "does not allow creating a new merge request" do
expect(response).to have_http_status(:not_found)
end
end
context "when viewing existing merge request" do
before do
get "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not allow viewing a merge request" do
expect(response).to have_http_status(:not_found)
end
end
end
describe "#update_merging_organisations" do
let(:params) { { merge_request: { merging_organisation: other_organisation.id } } }
context "when updating a merge request with a new organisation" do
before do
patch "/merge-request/#{merge_request.id}/merging-organisations", headers:, params:
end
it "does not allow updaing a merge request" do
expect(response).to have_http_status(:not_found)
end
end
end
describe "#remove_merging_organisation" do
let(:params) { { merge_request: { merging_organisation: other_organisation.id } } }
context "when removing an organisation from merge request" do
before do
MergeRequestOrganisation.create!(merge_request_id: merge_request.id, merging_organisation_id: other_organisation.id)
get "/merge-request/#{merge_request.id}/merging-organisations/remove", headers:, params:
end
it "does not allow removing an organisation" do
expect(response).to have_http_status(:not_found)
end
end
end
describe "#update" do
describe "from absorbing_organisation page" do
context "when absorbing_organisation_id set to id" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation) }
let(:params) do
{ merge_request: { absorbing_organisation_id: other_organisation.id, page: "absorbing_organisation" } }
end
before do
patch "/merge-request/#{merge_request.id}", headers:, params:
end
it "does not allow updating absorbing organisation" do
expect(response).to have_http_status(:not_found)
end
end
end
end
end
end