@ -663,6 +663,46 @@ RSpec.describe Validations::Sales::SaleInformationValidations do
expect ( record . errors [ " grant " ] ) . to be_empty
end
end
context " with year 2026 " , :aggregate_failures do
let ( :saledate ) { Time . zone . local ( 2026 , 4 , 1 ) }
context " when mortgage and deposit is exact " do
let ( :record ) { FactoryBot . build ( :sales_log , saledate : , mortgage : 85_000 , deposit : 5_000 , value : 100_000 , discount : 10 , ownershipsch : 2 , type : 9 ) }
it " does not add an error " do
sale_information_validator . validate_discounted_ownership_value ( record )
expect ( record . errors [ " mortgage " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " discount " ] ) . to be_empty
end
end
context " when mortgage and deposit is within 0.1% discount tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , saledate : , mortgage : 85_000 , deposit : 5_000 , value : 100_000 , discount : 10 . 1 , ownershipsch : 2 , type : 9 ) }
it " does not add an error " do
sale_information_validator . validate_discounted_ownership_value ( record )
expect ( record . errors [ " mortgage " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " discount " ] ) . to be_empty
end
end
context " when mortgage and deposit is outside 0.1% discount tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , saledate : , mortgage : 85_000 , deposit : 5_000 , value : 100_000 , discount : 10 . 2 , ownershipsch : 2 , type : 9 ) }
it " adds an error " do
sale_information_validator . validate_discounted_ownership_value ( record )
expect ( record . errors [ " mortgage " ] ) . not_to be_empty
expect ( record . errors [ " value " ] ) . not_to be_empty
expect ( record . errors [ " deposit " ] ) . not_to be_empty
expect ( record . errors [ " discount " ] ) . not_to be_empty
end
end
end
end
describe " # validate_outright_sale_value_matches_mortgage_plus_deposit " do
@ -1171,6 +1211,82 @@ RSpec.describe Validations::Sales::SaleInformationValidations do
end
end
end
context " with year 2026 " , :aggregate_failures do
let ( :saledate ) { Time . zone . local ( 2026 , 4 , 1 ) }
context " when mortgage and deposit is exact " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 1 , mortgage : 10_000 , staircase : 2 , deposit : 5_000 , value : 100_000 , equity : 15 , ownershipsch : 1 , type : 30 , saledate : ) }
it " does not add an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgage " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " equity " ] ) . to be_empty
end
end
context " when mortgage and deposit is within 0.1% equity tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 1 , mortgage : 10_000 , staircase : 2 , deposit : 5_000 , value : 100_000 , equity : 15 . 1 , ownershipsch : 1 , type : 30 , saledate : ) }
it " does not add an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgage " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " equity " ] ) . to be_empty
end
end
context " when mortgage and deposit is outside 0.1% equity tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 1 , mortgage : 10_000 , staircase : 2 , deposit : 5_000 , value : 100_000 , equity : 15 . 2 , ownershipsch : 1 , type : 30 , saledate : ) }
it " adds an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgage " ] ) . not_to be_empty
expect ( record . errors [ " value " ] ) . not_to be_empty
expect ( record . errors [ " deposit " ] ) . not_to be_empty
expect ( record . errors [ " equity " ] ) . not_to be_empty
end
end
context " when deposit (no mortgage) is exact " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 2 , staircase : 2 , deposit : 15_000 , value : 100_000 , equity : 15 , ownershipsch : 1 , type : 30 , saledate : ) }
it " does not add an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgageused " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " equity " ] ) . to be_empty
end
end
context " when deposit (no mortgage) is within 0.1% equity tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 2 , staircase : 2 , deposit : 15_000 , value : 100_000 , equity : 15 . 1 , ownershipsch : 1 , type : 30 , saledate : ) }
it " does not add an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgageused " ] ) . to be_empty
expect ( record . errors [ " value " ] ) . to be_empty
expect ( record . errors [ " deposit " ] ) . to be_empty
expect ( record . errors [ " equity " ] ) . to be_empty
end
end
context " when deposit (no mortgage) is outside 0.1% equity tolerance " do
let ( :record ) { FactoryBot . build ( :sales_log , mortgageused : 2 , staircase : 2 , deposit : 15_000 , value : 100_000 , equity : 15 . 2 , ownershipsch : 1 , type : 30 , saledate : ) }
it " adds an error " do
sale_information_validator . validate_non_staircasing_mortgage ( record )
expect ( record . errors [ " mortgageused " ] ) . not_to be_empty
expect ( record . errors [ " value " ] ) . not_to be_empty
expect ( record . errors [ " deposit " ] ) . not_to be_empty
expect ( record . errors [ " equity " ] ) . not_to be_empty
end
end
end
end
describe " # validate_staircasing_mortgage " do