From fa03a79357b404b50bb1954eb4da2212787525d5 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Fri, 7 Jul 2023 15:15:00 +0100 Subject: [PATCH] refactor: DRY tests --- .../lettings/year2023/row_parser_spec.rb | 422 ++++-------------- 1 file changed, 90 insertions(+), 332 deletions(-) diff --git a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb index a5a8d36e0..52abd5329 100644 --- a/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2023/row_parser_spec.rb @@ -121,12 +121,8 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do end end - context "when valid row" do - before do - allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true) - end - - let(:attributes) do + context "when testing valid/invalid attributes" do + let(:valid_attributes) do { bulk_upload:, field_5: "1", @@ -251,356 +247,118 @@ RSpec.describe BulkUpload::Lettings::Year2023::RowParser do } end - it "returns true" do - expect(parser).to be_valid - end - - 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)) + context "when valid row" do + before do + allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true) end - expect(questions.map(&:id).size).to eq(0) - expect(questions.map(&:id)).to eql([]) - end + let(:attributes) { valid_attributes } - context "when the log already exists in the db" do - before do - parser.log.save! - parser.instance_variable_set(:@valid, nil) + it "returns true" do + expect(parser).to be_valid end - it "is not a valid row" do - expect(parser).not_to be_valid + 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 + + expect(questions.map(&:id).size).to eq(0) + expect(questions.map(&:id)).to eql([]) end - it "adds an error to all (and only) the fields used to determine duplicates" do - parser.valid? + context "when the log already exists in the db" do + before do + parser.log.save! + parser.instance_variable_set(:@valid, nil) + end - error_message = "This is a duplicate log" - - [ - :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) + it "is not a valid row" do + expect(parser).not_to be_valid end - end - end - context "when a hidden log already exists in db" do - before do - parser.log.status = "pending" - parser.log.skip_update_status = true - parser.log.save! + it "adds an error to all (and only) the fields used to determine duplicates" do + parser.valid? + + error_message = "This is a duplicate log" + + [ + :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 - it "is a valid row" do - expect(parser).to be_valid - end + context "when a hidden log already exists in db" do + before do + parser.log.status = "pending" + parser.log.skip_update_status = true + parser.log.save! + end - it "does not add duplicate errors" do - parser.valid? + it "is a valid row" do + expect(parser).to be_valid + end - [ - :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 be_blank + it "does not add duplicate errors" do + parser.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 be_blank + 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", - 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", - } - 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 - it "returns true" do - expect(parser).to be_valid - end - end + let(:attributes) { valid_attributes.merge(field_5: "1.00") } - context "when valid row with invalid decimal (non-integer) field_5" do - before do - allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true) + it "returns true" do + expect(parser).to be_valid + end end - let(:attributes) do - { - bulk_upload:, - field_5: "1.56", - 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", + context "when valid row with invalid decimal (non-integer) field_5" do + before do + allow(FeatureToggle).to receive(:bulk_upload_duplicate_log_check_enabled?).and_return(true) + end - field_18: "100023336956", - } - end + let(:attributes) { valid_attributes.merge(field_5: "1.56") } - it "returns false" do - expect(parser).not_to be_valid + it "returns false" do + expect(parser).not_to be_valid + end end end