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.
238 lines
11 KiB
238 lines
11 KiB
require "rails_helper" |
|
|
|
RSpec.describe SchemesHelper do |
|
describe "Active periods" do |
|
let(:scheme) { FactoryBot.create(:scheme, created_at: Time.zone.today) } |
|
|
|
before do |
|
allow(Time).to receive(:now).and_return(Time.zone.local(2023, 1, 10)) |
|
end |
|
|
|
it "returns one active period without to date" do |
|
expect(scheme_active_periods(scheme).count).to eq(1) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: nil) |
|
end |
|
|
|
it "ignores reactivations that were deactivated on the same day" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 6, 4), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), scheme:) |
|
scheme.reload |
|
|
|
expect(scheme_active_periods(scheme).count).to eq(1) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 5, 5)) |
|
end |
|
|
|
it "returns sequential non reactivated active periods" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 6, 4), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 7, 6), scheme:) |
|
scheme.reload |
|
|
|
expect(scheme_active_periods(scheme).count).to eq(2) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 5, 5)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 6, 4), to: Time.zone.local(2022, 7, 6)) |
|
end |
|
|
|
it "returns sequential reactivated active periods" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 6, 4), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 7, 6), reactivation_date: Time.zone.local(2022, 8, 5), scheme:) |
|
scheme.reload |
|
expect(scheme_active_periods(scheme).count).to eq(3) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 5, 5)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 6, 4), to: Time.zone.local(2022, 7, 6)) |
|
expect(scheme_active_periods(scheme).third).to have_attributes(from: Time.zone.local(2022, 8, 5), to: nil) |
|
end |
|
|
|
it "returns non sequential non reactivated active periods" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 7, 6), reactivation_date: Time.zone.local(2022, 8, 5), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: nil, scheme:) |
|
scheme.reload |
|
|
|
expect(scheme_active_periods(scheme).count).to eq(2) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 5, 5)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 8, 5), to: nil) |
|
end |
|
|
|
it "returns non sequential reactivated active periods" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 7, 6), reactivation_date: Time.zone.local(2022, 8, 5), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 6, 4), scheme:) |
|
scheme.reload |
|
expect(scheme_active_periods(scheme).count).to eq(3) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 5, 5)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 6, 4), to: Time.zone.local(2022, 7, 6)) |
|
expect(scheme_active_periods(scheme).third).to have_attributes(from: Time.zone.local(2022, 8, 5), to: nil) |
|
end |
|
|
|
it "returns correct active periods when reactivation happends during a deactivated period" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 11, 11), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 4, 6), reactivation_date: Time.zone.local(2022, 7, 7), scheme:) |
|
scheme.reload |
|
|
|
expect(scheme_active_periods(scheme).count).to eq(2) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 4, 6)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 11, 11), to: nil) |
|
end |
|
|
|
it "returns correct active periods when a full deactivation period happens during another deactivation period" do |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 6, 11), scheme:) |
|
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 4, 6), reactivation_date: Time.zone.local(2022, 7, 7), scheme:) |
|
scheme.reload |
|
|
|
expect(scheme_active_periods(scheme).count).to eq(2) |
|
expect(scheme_active_periods(scheme).first).to have_attributes(from: Time.zone.local(2022, 4, 1), to: Time.zone.local(2022, 4, 6)) |
|
expect(scheme_active_periods(scheme).second).to have_attributes(from: Time.zone.local(2022, 7, 7), to: nil) |
|
end |
|
end |
|
|
|
include TagHelper |
|
describe "edit_scheme_text" do |
|
let(:parent_organisation) { FactoryBot.create(:organisation, name: "Parent") } |
|
let(:child_organisation) { FactoryBot.create(:organisation, name: "Child") } |
|
|
|
let(:scheme) { FactoryBot.create(:scheme, owning_organisation: parent_organisation) } |
|
let(:data_coordinator) { FactoryBot.create(:user, :data_coordinator, organisation: child_organisation) } |
|
let(:data_provider) { FactoryBot.create(:user, :data_provider, organisation: child_organisation) } |
|
|
|
before do |
|
create(:organisation_relationship, child_organisation:, parent_organisation:) |
|
end |
|
|
|
context "with data coordinator user" do |
|
it "returns correct edit scheme text for a parent organisation scheme" do |
|
expect(edit_scheme_text(scheme, data_coordinator)).to include("This scheme belongs to your stock owner Parent.") |
|
end |
|
|
|
it "returns nil when viewing your organisation scheme" do |
|
data_coordinator.update!(organisation: parent_organisation) |
|
expect(edit_scheme_text(scheme, data_coordinator)).to be_nil |
|
end |
|
end |
|
|
|
context "with data provider user" do |
|
it "returns correct edit scheme text for a parent organisation scheme" do |
|
expect(edit_scheme_text(scheme, data_provider)).to include("If you think this scheme should be updated, ask a data coordinator to make the changes. Find your data coordinators on the ") |
|
end |
|
|
|
it "returns correct edit scheme text for your organisation scheme" do |
|
data_provider.update!(organisation: parent_organisation) |
|
expect(edit_scheme_text(scheme, data_provider)).to include("If you think this scheme should be updated, ask a data coordinator to make the changes. Find your data coordinators on the ") |
|
end |
|
end |
|
end |
|
|
|
describe "display_duplicate_schemes_banner?" do |
|
let(:organisation) { create(:organisation) } |
|
let(:current_user) { create(:user, :support) } |
|
|
|
context "when organisation has not absorbed other organisations" do |
|
context "and it has duplicate schemes" do |
|
before do |
|
create_list(:scheme, 2, :duplicate, owning_organisation: organisation) |
|
end |
|
|
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
end |
|
|
|
context "when organisation has absorbed other organisations in open collection year" do |
|
before do |
|
build(:organisation, merge_date: Time.zone.yesterday, absorbing_organisation_id: organisation.id).save(validate: false) |
|
end |
|
|
|
context "and it has duplicate schemes" do |
|
before do |
|
create_list(:scheme, 2, :duplicate, owning_organisation: organisation) |
|
end |
|
|
|
it "displays the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_truthy |
|
end |
|
|
|
context "and organisation has confirmed duplicate schemes after the most recent merge" do |
|
before do |
|
organisation.update!(schemes_deduplicated_at: Time.zone.today) |
|
end |
|
|
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
|
|
context "and organisation has confirmed duplicate schemes before the most recent merge" do |
|
before do |
|
organisation.update!(schemes_deduplicated_at: Time.zone.today - 2.days) |
|
end |
|
|
|
it "displays the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_truthy |
|
end |
|
end |
|
end |
|
|
|
context "and it has duplicate locations" do |
|
let(:scheme) { create(:scheme, owning_organisation: organisation) } |
|
|
|
before do |
|
create_list(:location, 2, postcode: "AB1 2CD", mobility_type: "A", scheme:) |
|
end |
|
|
|
it "displays the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_truthy |
|
end |
|
end |
|
|
|
context "and it has no duplicate schemes or locations" do |
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
|
|
context "and it is viewed by data provider" do |
|
let(:current_user) { create(:user, :data_provider) } |
|
|
|
before do |
|
create_list(:scheme, 2, :duplicate, owning_organisation: organisation) |
|
end |
|
|
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
end |
|
|
|
context "when organisation has absorbed other organisations in closed collection year" do |
|
before do |
|
build(:organisation, merge_date: Time.zone.today - 2.years, absorbing_organisation_id: organisation.id).save(validate: false) |
|
end |
|
|
|
context "and it has duplicate schemes" do |
|
before do |
|
create_list(:scheme, 2, :duplicate, owning_organisation: organisation) |
|
end |
|
|
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
|
|
context "and it has duplicate locations" do |
|
let(:scheme) { create(:scheme, owning_organisation: organisation) } |
|
|
|
before do |
|
create(:location, postcode: "AB1 2CD", mobility_type: "A", scheme:) |
|
end |
|
|
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
|
|
context "and it has no duplicate schemes or locations" do |
|
it "does not display the banner" do |
|
expect(display_duplicate_schemes_banner?(organisation, current_user)).to be_falsey |
|
end |
|
end |
|
end |
|
end |
|
end
|
|
|