From 91af282ccc70d9289a98753a7541a6b6b321afb2 Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Wed, 11 Jan 2023 10:49:27 +1100 Subject: [PATCH] Truncate scaled value unit to maximum of two decimals ie truncate 12.50001234 to 12.5 When using imperial, the scalling calculation rounding results in value unit having extra decimal when converted back to imperial + related spec --- app/services/variant_units/option_value_namer.rb | 2 +- spec/services/variant_units/option_value_namer_spec.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/app/services/variant_units/option_value_namer.rb b/app/services/variant_units/option_value_namer.rb index 155fb33a4d..66e50833ba 100644 --- a/app/services/variant_units/option_value_namer.rb +++ b/app/services/variant_units/option_value_namer.rb @@ -56,7 +56,7 @@ module VariantUnits def option_value_value_unit_scaled unit_scale, unit_name = scale_for_unit_value - value = BigDecimal(@variant.unit_value / unit_scale, 6) + value = BigDecimal(@variant.unit_value / unit_scale, 6).truncate(2) [value, unit_name] end diff --git a/spec/services/variant_units/option_value_namer_spec.rb b/spec/services/variant_units/option_value_namer_spec.rb index da3124c19c..936edbbfb6 100644 --- a/spec/services/variant_units/option_value_namer_spec.rb +++ b/spec/services/variant_units/option_value_namer_spec.rb @@ -145,6 +145,15 @@ module VariantUnits allow(v).to receive(:unit_value) { nil } expect(subject.send(:option_value_value_unit)).to eq [nil, nil] end + + it "truncates value to 2 decimals maximum" do + oz_scale = 28.35 + p = double(:product, variant_unit: 'weight', variant_unit_scale: oz_scale) + allow(v).to receive(:product) { p } + # The unit_value is stored rounded to 2 decimals + allow(v).to receive(:unit_value) { (12.5 * oz_scale).round(2) } + expect(subject.send(:option_value_value_unit)).to eq [BigDecimal(12.5, 6), 'oz'] + end end end end