Browse Source

validate bulk upload managing org

pull/1315/head
Phil Lee 3 years ago
parent
commit
7720eaacd4
  1. 4
      app/models/organisation.rb
  2. 26
      app/services/bulk_upload/lettings/row_parser.rb
  3. 40
      spec/services/bulk_upload/lettings/row_parser_spec.rb

4
app/models/organisation.rb

@ -58,6 +58,10 @@ class Organisation < ApplicationRecord
end
end
def can_be_managed_by?(organisation:)
organisation == self || managing_agents.include?(organisation)
end
def lettings_logs
LettingsLog.filter_by_organisation(self)
end

26
app/services/bulk_upload/lettings/row_parser.rb

@ -117,7 +117,7 @@ class BulkUpload::Lettings::RowParser
attribute :field_110
attribute :field_111, :string
attribute :field_112, :string
attribute :field_113, :integer
attribute :field_113, :string
attribute :field_114, :integer
attribute :field_115
attribute :field_116, :integer
@ -155,10 +155,14 @@ class BulkUpload::Lettings::RowParser
validate :validate_no_disabled_needs_conjunction
validate :validate_dont_know_disabled_needs_conjunction
validate :validate_no_and_dont_know_disabled_needs_conjunction
validate :validate_owning_org_permitted
validate :validate_owning_org_owns_stock
validate :validate_owning_org_exists
validate :validate_managing_org_related
validate :validate_managing_org_exists
def valid?
errors.clear
@ -194,6 +198,20 @@ class BulkUpload::Lettings::RowParser
private
def validate_managing_org_related
if owning_organisation && managing_organisation && !owning_organisation.can_be_managed_by?(organisation: managing_organisation)
block_log_creation!
errors.add(:field_113, "This managing organisation does not have a relationship with the owning organisation")
end
end
def validate_managing_org_exists
if managing_organisation.nil?
errors.delete(:field_113)
errors.add(:field_113, "The managing organisation code is incorrect")
end
end
def validate_owning_org_owns_stock
if owning_organisation && !owning_organisation.holds_own_stock?
block_log_creation!
@ -525,8 +543,12 @@ private
owning_organisation&.id
end
def managing_organisation
Organisation.find_by_id_on_mulitple_fields(field_113)
end
def managing_organisation_id
Organisation.find_by(old_visible_id: field_113)&.id
managing_organisation&.id
end
def attributes_for_log

40
spec/services/bulk_upload/lettings/row_parser_spec.rb

@ -8,8 +8,10 @@ RSpec.describe BulkUpload::Lettings::RowParser do
let(:attributes) { { bulk_upload: } }
let(:bulk_upload) { create(:bulk_upload, :lettings, user:) }
let(:user) { create(:user, organisation: owning_org) }
let(:owning_org) { create(:organisation, :with_old_visible_id) }
let(:managing_org) { create(:organisation, :with_old_visible_id) }
let(:setup_section_params) do
{
bulk_upload:,
@ -23,6 +25,10 @@ RSpec.describe BulkUpload::Lettings::RowParser do
}
end
before do
create(:organisation_relationship, parent_organisation: owning_org, child_organisation: managing_org)
end
around do |example|
FormHandler.instance.use_real_forms!
@ -510,6 +516,30 @@ RSpec.describe BulkUpload::Lettings::RowParser do
end
end
describe "#field_113" do # managing org
context "when cannot find managing org" do
let(:attributes) { { bulk_upload:, field_113: "donotexist" } }
it "is not permitted" do
expect(parser.errors[:field_113]).to eql(["The managing organisation code is incorrect"])
end
end
context "when not affiliated with managing org" do
let(:unaffiliated_org) { create(:organisation, :with_old_visible_id) }
let(:attributes) { { bulk_upload:, field_111: owning_org.old_visible_id, field_113: unaffiliated_org.old_visible_id } }
it "is not permitted" do
expect(parser.errors[:field_113]).to eql(["This managing organisation does not have a relationship with the owning organisation"])
end
it "blocks log creation" do
expect(parser).to be_block_log_creation
end
end
end
describe "#field_134" do
context "when an unpermitted value" do
let(:attributes) { { bulk_upload:, field_134: 3 } }
@ -554,6 +584,16 @@ RSpec.describe BulkUpload::Lettings::RowParser do
end
end
describe "#managing_organisation" do
context "when lookup is via id prefixed with ORG" do
let(:attributes) { { bulk_upload:, field_113: "ORG#{managing_org.id}" } }
it "assigns the correct org" do
expect(parser.log.managing_organisation).to eql(managing_org)
end
end
end
describe "#cbl" do
context "when field_75 is yes ie 1" do
let(:attributes) { { bulk_upload:, field_75: 1 } }

Loading…
Cancel
Save