Browse Source

feat: include schemes and locations with nil confirmed values in incomplete scopes

pull/1946/head
natdeanlewissoftwire 3 years ago
parent
commit
803e8d9be1
  1. 1
      app/models/location.rb
  2. 1
      app/models/scheme.rb
  3. 7
      spec/models/location_spec.rb
  4. 7
      spec/models/scheme_spec.rb

1
app/models/location.rb

@ -49,6 +49,7 @@ class Location < ApplicationRecord
scope :incomplete, lambda { scope :incomplete, lambda {
where.not(confirmed: true) where.not(confirmed: true)
.or(where(confirmed: nil))
} }
scope :deactivated, lambda { scope :deactivated, lambda {

1
app/models/scheme.rb

@ -42,6 +42,7 @@ class Scheme < ApplicationRecord
scope :incomplete, lambda { scope :incomplete, lambda {
where.not(confirmed: true) where.not(confirmed: true)
.or(where(confirmed: nil))
.or(where.not(id: Location.select(:scheme_id).where(confirmed: true).distinct)) .or(where.not(id: Location.select(:scheme_id).where(confirmed: true).distinct))
.where.not(id: joins(:scheme_deactivation_periods).reactivating_soon.pluck(:id)) .where.not(id: joins(:scheme_deactivation_periods).reactivating_soon.pluck(:id))
.where.not(id: joins(:scheme_deactivation_periods).deactivated.pluck(:id)) .where.not(id: joins(:scheme_deactivation_periods).deactivated.pluck(:id))

7
spec/models/location_spec.rb

@ -932,6 +932,7 @@ RSpec.describe Location, type: :model do
describe "filter by status" do describe "filter by status" do
let!(:incomplete_location) { FactoryBot.create(:location, :incomplete, startdate: Time.zone.local(2022, 4, 1)) } let!(:incomplete_location) { FactoryBot.create(:location, :incomplete, startdate: Time.zone.local(2022, 4, 1)) }
let!(:incomplete_location_with_nil_confirmed) { FactoryBot.create(:location, :incomplete, startdate: Time.zone.local(2022, 4, 1), confirmed: nil) }
let!(:active_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) } let!(:active_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) }
let(:deactivating_soon_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) } let(:deactivating_soon_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) }
let(:deactivated_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) } let(:deactivated_location) { FactoryBot.create(:location, startdate: Time.zone.local(2022, 4, 1)) }
@ -954,8 +955,10 @@ RSpec.describe Location, type: :model do
context "when filtering by incomplete status" do context "when filtering by incomplete status" do
it "returns only incomplete locations" do it "returns only incomplete locations" do
expect(described_class.filter_by_status(%w[incomplete]).count).to eq(1) expect(described_class.filter_by_status(%w[incomplete]).count).to eq(2)
expect(described_class.filter_by_status(%w[incomplete]).first).to eq(incomplete_location) expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_location)
expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_location_with_nil_confirmed)
end end
end end

7
spec/models/scheme_spec.rb

@ -112,6 +112,7 @@ RSpec.describe Scheme, type: :model do
context "when filtering by status" do context "when filtering by status" do
let!(:incomplete_scheme) { FactoryBot.create(:scheme, :incomplete, service_name: "name") } let!(:incomplete_scheme) { FactoryBot.create(:scheme, :incomplete, service_name: "name") }
let!(:incomplete_scheme_2) { FactoryBot.create(:scheme, :incomplete, service_name: "name") } let!(:incomplete_scheme_2) { FactoryBot.create(:scheme, :incomplete, service_name: "name") }
let!(:incomplete_scheme_with_nil_confirmed) { FactoryBot.create(:scheme, :incomplete, service_name: "name", confirmed: nil) }
let(:active_scheme) { FactoryBot.create(:scheme) } let(:active_scheme) { FactoryBot.create(:scheme) }
let(:active_scheme_2) { FactoryBot.create(:scheme) } let(:active_scheme_2) { FactoryBot.create(:scheme) }
let(:deactivating_soon_scheme) { FactoryBot.create(:scheme) } let(:deactivating_soon_scheme) { FactoryBot.create(:scheme) }
@ -143,17 +144,19 @@ RSpec.describe Scheme, type: :model do
context "when filtering by incomplete status" do context "when filtering by incomplete status" do
it "returns only incomplete schemes" do it "returns only incomplete schemes" do
expect(described_class.filter_by_status(%w[incomplete]).count).to eq(2) expect(described_class.filter_by_status(%w[incomplete]).count).to eq(3)
expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_scheme) expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_scheme)
expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_scheme_2) expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_scheme_2)
expect(described_class.filter_by_status(%w[incomplete])).to include(incomplete_scheme_with_nil_confirmed)
end end
end end
context "when filtering by incomplete status and searching" do context "when filtering by incomplete status and searching" do
it "returns only incomplete schemes" do it "returns only incomplete schemes" do
expect(described_class.search_by("name").filter_by_status(%w[incomplete]).count).to eq(2) expect(described_class.search_by("name").filter_by_status(%w[incomplete]).count).to eq(3)
expect(described_class.search_by("name").filter_by_status(%w[incomplete])).to include(incomplete_scheme) expect(described_class.search_by("name").filter_by_status(%w[incomplete])).to include(incomplete_scheme)
expect(described_class.search_by("name").filter_by_status(%w[incomplete])).to include(incomplete_scheme_2) expect(described_class.search_by("name").filter_by_status(%w[incomplete])).to include(incomplete_scheme_2)
expect(described_class.search_by("name").filter_by_status(%w[incomplete])).to include(incomplete_scheme_with_nil_confirmed)
end end
end end

Loading…
Cancel
Save