|  |  | @ -116,7 +116,17 @@ RSpec.describe Validations::SharedValidations do | 
			
		
	
		
		
			
				
					
					|  |  |  |   end |  |  |  |   end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   describe "validating level of accuracy or rounding for numeric questions" do |  |  |  |   describe "validating level of accuracy or rounding for numeric questions" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     let(:sales_log) { build(:sales_log, :completed) } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     before do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       income_question = instance_double(Form::Question, step:, type: "numeric", id: "income1", check_answer_label: "Buyer 1’s gross annual income", page: instance_double(Form::Page, routed_to?: true)) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       form = instance_double(Form, numeric_questions: [income_question]) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       allow(FormHandler.instance).to receive(:get_form).and_return(form) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     context "when validating a question with a step of 1" do |  |  |  |     context "when validating a question with a step of 1" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let(:step) { 1 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "adds an error if input is a decimal" do |  |  |  |       it "adds an error if input is a decimal" do | 
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.income1 = 30_000.5 |  |  |  |         sales_log.income1 = 30_000.5 | 
			
		
	
		
		
			
				
					
					|  |  |  |         shared_validator.validate_numeric_step(sales_log) |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
	
		
		
			
				
					|  |  | @ -131,34 +141,64 @@ RSpec.describe Validations::SharedValidations do | 
			
		
	
		
		
			
				
					
					|  |  |  |     end |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     context "when validating a question with a step of 10" do |  |  |  |     context "when validating a question with a step of 10" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let(:step) { 10 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "adds an error if input is not a multiple of ten" do |  |  |  |       it "adds an error if input is not a multiple of ten" do | 
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.savings = 30_005 |  |  |  |         sales_log.income1 = 30_005 | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.jointpur = 1 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         shared_validator.validate_numeric_step(sales_log) |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |         expect(sales_log.errors[:savings]).to include I18n.t("validations.shared.numeric.nearest_ten", field: "Buyers’ total savings before any deposit paid") |  |  |  |         expect(sales_log.errors[:income1]).to include I18n.t("validations.shared.numeric.nearest_ten", field: "Buyer 1’s gross annual income") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       end |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "does not add an error if input is a multiple of ten" do |  |  |  |       it "does not add an error if input is a multiple of ten" do | 
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.savings = 30_000 |  |  |  |         sales_log.income1 = 30_000 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         shared_validator.validate_numeric_step(sales_log) |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |         expect(sales_log.errors).to be_empty |  |  |  |         expect(sales_log.errors).to be_empty | 
			
		
	
		
		
			
				
					
					|  |  |  |       end |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |     end |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     context "when validating a question with a step of 0.01" do |  |  |  |     context "when validating a question with a step of 0.01" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let(:step) { 0.01 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "adds an error if input has more than 2 decimal places" do |  |  |  |       it "adds an error if input has more than 2 decimal places" do | 
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.mscharge = 30.7418 |  |  |  |         sales_log.income1 = 30_123.7418 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         shared_validator.validate_numeric_step(sales_log) |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |         expect(sales_log.errors[:mscharge]).to include I18n.t("validations.shared.numeric.nearest_hundredth", field: "Monthly leasehold charges") |  |  |  |         expect(sales_log.errors[:income1]).to include I18n.t("validations.shared.numeric.nearest_hundredth", field: "Buyer 1’s gross annual income") | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |       end |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "does not add an error if input has 2 or fewer decimal places" do |  |  |  |       it "does not add an error if input has 2 or fewer decimal places" do | 
			
		
	
		
		
			
				
					
					|  |  |  |         sales_log.mscharge = 30.74 |  |  |  |         sales_log.income1 = 30_123.74 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         shared_validator.validate_numeric_step(sales_log) |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |         expect(sales_log.errors).to be_empty |  |  |  |         expect(sales_log.errors).to be_empty | 
			
		
	
		
		
			
				
					
					|  |  |  |       end |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |     end |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     context "when validating a question with a step of 0.1" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let(:step) { 0.1 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       it "adds an error if input has more than 1 decimal place" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sales_log.income1 = 30_123.74 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         expect(sales_log.errors[:income1]).to include I18n.t("validations.shared.numeric.nearest_tenth", field: "Buyer 1’s gross annual income") | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       it "does not add an error if input has 1 or fewer decimal places" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sales_log.income1 = 30_123.8 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         expect(sales_log.errors).to be_empty | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     context "when validating a question with an unusual step" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       let(:step) { 0.001 } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       it "adds an appropriate error if input does not match" do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         sales_log.income1 = 30_123.74 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         shared_validator.validate_numeric_step(sales_log) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         expect(sales_log.errors[:income1]).to include I18n.t("validations.shared.numeric.nearest_step", field: "Buyer 1’s gross annual income", step: 0.001) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   end | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   %i[sales_log lettings_log].each do |log_type| |  |  |  |   %i[sales_log lettings_log].each do |log_type| | 
			
		
	
		
		
			
				
					
					|  |  |  |     describe "validate_owning_organisation_data_sharing_agremeent_signed" do |  |  |  |     describe "validate_owning_organisation_data_sharing_agremeent_signed" do | 
			
		
	
		
		
			
				
					
					|  |  |  |       it "is valid if the Data Protection Confirmation is signed" do |  |  |  |       it "is valid if the Data Protection Confirmation is signed" do | 
			
		
	
	
		
		
			
				
					|  |  | @ -195,7 +235,6 @@ RSpec.describe Validations::SharedValidations do | 
			
		
	
		
		
			
				
					
					|  |  |  |       end |  |  |  |       end | 
			
		
	
		
		
			
				
					
					|  |  |  |     end |  |  |  |     end | 
			
		
	
		
		
			
				
					
					|  |  |  |   end |  |  |  |   end | 
			
		
	
		
		
			
				
					
					|  |  |  |   end |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   describe "validate numeric question input" do |  |  |  |   describe "validate numeric question input" do | 
			
		
	
		
		
			
				
					
					|  |  |  |     it "does not allow letters" do |  |  |  |     it "does not allow letters" do | 
			
		
	
	
		
		
			
				
					|  |  | 
 |