Browse Source

refactor: DRY tests

pull/1753/head
natdeanlewissoftwire 3 years ago
parent
commit
fa03a79357
  1. 422
      spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb

422
spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb

@ -121,12 +121,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do
end end
end end
context "when valid row" do context "when testing valid/invalid attributes" do
before do let(:valid_attributes) do
allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true)
end
let(:attributes) do
{ {
bulk_upload:, bulk_upload:,
field_5: "1", field_5: "1",
@ -251,356 +247,118 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do
} }
end end
it "returns true" do context "when valid row" do
expect(parser).to be_valid before do
end allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true)
xit "instantiates a log with everything completed", aggregate_failures: true do
questions = parser.send(:questions).reject do |q|
parser.send(:log).optional_fields.include?(q.id) || q.completed?(parser.send(:log))
end end
expect(questions.map(&:id).size).to eq(0) let(:attributes) { valid_attributes }
expect(questions.map(&:id)).to eql([])
end
context "when the log already exists in the db" do it "returns true" do
before do expect(parser).to be_valid
parser.log.save!
parser.instance_variable_set(:@valid, nil)
end end
it "is not a valid row" do xit "instantiates a log with everything completed", aggregate_failures: true do
expect(parser).not_to be_valid questions = parser.send(:questions).reject do |q|
parser.send(:log).optional_fields.include?(q.id) || q.completed?(parser.send(:log))
end
expect(questions.map(&:id).size).to eq(0)
expect(questions.map(&:id)).to eql([])
end end
it "adds an error to all (and only) the fields used to determine duplicates" do context "when the log already exists in the db" do
parser.valid? before do
parser.log.save!
parser.instance_variable_set(:@valid, nil)
end
error_message = "This is a duplicate log" it "is not a valid row" do
expect(parser).not_to be_valid
[
:field_1, # owning_organisation
:field_7, # startdate
:field_8, # startdate
:field_9, # startdate
:field_14, # propcode
:field_17, # location
:field_23, # postcode_full
:field_24, # postcode_full
:field_25, # postcode_full
:field_46, # age1
:field_47, # sex1
:field_50, # ecstat1
:field_132, # tcharge
].each do |field|
expect(parser.errors[field]).to include(error_message)
end end
end
end
context "when a hidden log already exists in db" do it "adds an error to all (and only) the fields used to determine duplicates" do
before do parser.valid?
parser.log.status = "pending"
parser.log.skip_update_status = true error_message = "This is a duplicate log"
parser.log.save!
[
:field_1, # owning_organisation
:field_7, # startdate
:field_8, # startdate
:field_9, # startdate
:field_14, # propcode
:field_17, # location
:field_23, # postcode_full
:field_24, # postcode_full
:field_25, # postcode_full
:field_46, # age1
:field_47, # sex1
:field_50, # ecstat1
:field_132, # tcharge
].each do |field|
expect(parser.errors[field]).to include(error_message)
end
end
end end
it "is a valid row" do context "when a hidden log already exists in db" do
expect(parser).to be_valid before do
end parser.log.status = "pending"
parser.log.skip_update_status = true
parser.log.save!
end
it "does not add duplicate errors" do it "is a valid row" do
parser.valid? expect(parser).to be_valid
end
[ it "does not add duplicate errors" do
:field_1, # owning_organisation parser.valid?
:field_7, # startdate
:field_8, # startdate [
:field_9, # startdate :field_1, # owning_organisation
:field_14, # propcode :field_7, # startdate
:field_17, # location :field_8, # startdate
:field_23, # postcode_full :field_9, # startdate
:field_24, # postcode_full :field_14, # propcode
:field_25, # postcode_full :field_17, # location
:field_46, # age1 :field_23, # postcode_full
:field_47, # sex1 :field_24, # postcode_full
:field_50, # ecstat1 :field_25, # postcode_full
:field_132, # tcharge :field_46, # age1
].each do |field| :field_47, # sex1
expect(parser.errors[field]).to be_blank :field_50, # ecstat1
:field_132, # tcharge
].each do |field|
expect(parser.errors[field]).to be_blank
end
end end
end end
end end
end
context "when valid row with valid decimal (integer) field_5" do
before do
allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true)
end
let(:attributes) do
{
bulk_upload:,
field_5: "1.00",
field_13: "123",
field_7: now.day.to_s,
field_8: now.month.to_s,
field_9: now.strftime("%g"),
field_23: "EC1N",
field_24: "2TD",
field_1: owning_org.old_visible_id,
field_2: managing_org.old_visible_id,
field_11: "1",
field_6: "2",
field_29: "2",
field_30: "1",
field_31: "1",
field_32: "1",
field_39: "2",
field_40: "1",
field_41: "2",
field_45: "1",
field_46: "42",
field_52: "41",
field_56: "20",
field_60: "18",
field_64: "16",
field_68: "14",
field_72: "12",
field_76: "20",
field_47: "F",
field_53: "M",
field_57: "F",
field_61: "M",
field_65: "F",
field_69: "M",
field_73: "F",
field_77: "M",
field_48: "17", context "when valid row with valid decimal (integer) field_5" do
field_49: "18", before do
allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true)
field_51: "P", end
field_55: "C",
field_59: "X",
field_63: "R",
field_67: "C",
field_71: "C",
field_75: "X",
field_50: "1",
field_54: "2",
field_58: "6",
field_62: "7",
field_66: "8",
field_70: "9",
field_74: "0",
field_78: "10",
field_79: "1",
field_80: "4",
field_81: "1",
field_82: "1",
field_83: "1",
field_84: "0",
field_85: "0",
field_86: "1",
field_87: "0",
field_89: "2",
field_100: "5",
field_101: "2",
field_102: "31",
field_104: "3",
field_105: "11",
field_106: "1",
field_107: "EC1N",
field_108: "2TD",
field_110: "1",
field_111: "1",
field_112: "",
field_113: "1",
field_114: "",
field_115: "",
field_116: "1",
field_117: "2",
field_118: "2",
field_119: "2",
field_120: "1",
field_122: "2000",
field_121: "2",
field_123: "1",
field_124: "1",
field_126: "4",
field_128: "1234.56",
field_129: "43.32",
field_130: "13.14",
field_131: "101.11",
field_132: "1500.19",
field_133: "1",
field_134: "234.56",
field_27: "15",
field_28: "0",
field_33: now.day.to_s,
field_34: now.month.to_s,
field_35: now.strftime("%g"),
field_4: "1",
field_18: "100023336956",
}
end
it "returns true" do let(:attributes) { valid_attributes.merge(field_5: "1.00") }
expect(parser).to be_valid
end
end
context "when valid row with invalid decimal (non-integer) field_5" do it "returns true" do
before do expect(parser).to be_valid
allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true) end
end end
let(:attributes) do context "when valid row with invalid decimal (non-integer) field_5" do
{ before do
bulk_upload:, allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true)
field_5: "1.56", end
field_13: "123",
field_7: now.day.to_s,
field_8: now.month.to_s,
field_9: now.strftime("%g"),
field_23: "EC1N",
field_24: "2TD",
field_1: owning_org.old_visible_id,
field_2: managing_org.old_visible_id,
field_11: "1",
field_6: "2",
field_29: "2",
field_30: "1",
field_31: "1",
field_32: "1",
field_39: "2",
field_40: "1",
field_41: "2",
field_45: "1",
field_46: "42",
field_52: "41",
field_56: "20",
field_60: "18",
field_64: "16",
field_68: "14",
field_72: "12",
field_76: "20",
field_47: "F",
field_53: "M",
field_57: "F",
field_61: "M",
field_65: "F",
field_69: "M",
field_73: "F",
field_77: "M",
field_48: "17",
field_49: "18",
field_51: "P",
field_55: "C",
field_59: "X",
field_63: "R",
field_67: "C",
field_71: "C",
field_75: "X",
field_50: "1",
field_54: "2",
field_58: "6",
field_62: "7",
field_66: "8",
field_70: "9",
field_74: "0",
field_78: "10",
field_79: "1",
field_80: "4",
field_81: "1",
field_82: "1",
field_83: "1",
field_84: "0",
field_85: "0",
field_86: "1",
field_87: "0",
field_89: "2",
field_100: "5",
field_101: "2",
field_102: "31",
field_104: "3",
field_105: "11",
field_106: "1",
field_107: "EC1N",
field_108: "2TD",
field_110: "1",
field_111: "1",
field_112: "",
field_113: "1",
field_114: "",
field_115: "",
field_116: "1",
field_117: "2",
field_118: "2",
field_119: "2",
field_120: "1",
field_122: "2000",
field_121: "2",
field_123: "1",
field_124: "1",
field_126: "4",
field_128: "1234.56",
field_129: "43.32",
field_130: "13.14",
field_131: "101.11",
field_132: "1500.19",
field_133: "1",
field_134: "234.56",
field_27: "15",
field_28: "0",
field_33: now.day.to_s,
field_34: now.month.to_s,
field_35: now.strftime("%g"),
field_4: "1",
field_18: "100023336956", let(:attributes) { valid_attributes.merge(field_5: "1.56") }
}
end
it "returns false" do it "returns false" do
expect(parser).not_to be_valid expect(parser).not_to be_valid
end
end end
end end

Loading…
Cancel
Save