From 36c4d24c936978dd22f07ae2bbff11a4c72c192f Mon Sep 17 00:00:00 2001 From: Gaetan Craig-Riou Date: Mon, 8 Jul 2024 14:24:22 +1000 Subject: [PATCH] Fix angular option value namer --- .../services/option_value_namer.js.coffee | 13 +++-- .../option_value_namer_spec.js.coffee | 54 +++++++++---------- 2 files changed, 32 insertions(+), 35 deletions(-) diff --git a/app/assets/javascripts/admin/products/services/option_value_namer.js.coffee b/app/assets/javascripts/admin/products/services/option_value_namer.js.coffee index 0e7c94331d..2a61b3efc1 100644 --- a/app/assets/javascripts/admin/products/services/option_value_namer.js.coffee +++ b/app/assets/javascripts/admin/products/services/option_value_namer.js.coffee @@ -13,16 +13,16 @@ angular.module("admin.products").factory "OptionValueNamer", (VariantUnitManager name_fields.join ' ' value_scaled: -> - @variant.product.variant_unit_scale? + @variant.variant_unit_scale? option_value_value_unit: -> if @variant.unit_value? - if @variant.product.variant_unit in ["weight", "volume"] + if @variant.variant_unit in ["weight", "volume"] [value, unit_name] = @option_value_value_unit_scaled() else value = @variant.unit_value - unit_name = @pluralize(@variant.product.variant_unit_name, value) + unit_name = @pluralize(@variant.variant_unit_name, value) value = parseInt(value, 10) if value == parseInt(value, 10) @@ -58,14 +58,13 @@ angular.module("admin.products").factory "OptionValueNamer", (VariantUnitManager # to >= 1 when expressed in it. # If there is none available where this is true, use the smallest # available unit. - product = @variant.product - scales = VariantUnitManager.compatibleUnitScales(product.variant_unit_scale, product.variant_unit) + scales = VariantUnitManager.compatibleUnitScales(@variant.variant_unit_scale, @variant.variant_unit) variantUnitValue = @variant.unit_value # sets largestScale = last element in filtered scales array [_, ..., largestScale] = (scales.filter (s) -> variantUnitValue / s >= 1) if (largestScale) - [largestScale, VariantUnitManager.getUnitName(largestScale, product.variant_unit)] + [largestScale, VariantUnitManager.getUnitName(largestScale, @variant.variant_unit)] else - [scales[0], VariantUnitManager.getUnitName(scales[0], product.variant_unit)] + [scales[0], VariantUnitManager.getUnitName(scales[0], @variant.variant_unit)] diff --git a/spec/javascripts/unit/admin/services/option_value_namer_spec.js.coffee b/spec/javascripts/unit/admin/services/option_value_namer_spec.js.coffee index 8eaae5bbee..6b01dda43e 100644 --- a/spec/javascripts/unit/admin/services/option_value_namer_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/option_value_namer_spec.js.coffee @@ -42,72 +42,70 @@ describe "Option Value Namer", -> expect(namer.name()).toBe "value unit" describe "determining if a variant's value is scaled", -> - v = p = namer = null + v = namer = null beforeEach -> - p = {} - v = { product: p } + v = {} namer = new OptionValueNamer(v) it "returns true when the product has a scale", -> - p.variant_unit_scale = 1000 + v.variant_unit_scale = 1000 expect(namer.value_scaled()).toBe true it "returns false otherwise", -> expect(namer.value_scaled()).toBe false describe "generating option value's value and unit", -> - v = p = namer = null + v = namer = null beforeEach -> - p = {} - v = { product: p } + v = {} namer = new OptionValueNamer(v) it "generates simple values", -> - p.variant_unit = 'weight' - p.variant_unit_scale = 1.0 + v.variant_unit = 'weight' + v.variant_unit_scale = 1.0 v.unit_value = 100 expect(namer.option_value_value_unit()).toEqual [100, 'g'] it "generates values when unit value is non-integer", -> - p.variant_unit = 'weight' - p.variant_unit_scale = 1.0 + v.variant_unit = 'weight' + v.variant_unit_scale = 1.0 v.unit_value = 123.45 expect(namer.option_value_value_unit()).toEqual [123.45, 'g'] it "returns a value of 1 when unit value equals the scale", -> - p.variant_unit = 'weight' - p.variant_unit_scale = 1000.0 + v.variant_unit = 'weight' + v.variant_unit_scale = 1000.0 v.unit_value = 1000.0 expect(namer.option_value_value_unit()).toEqual [1, 'kg'] it "generates values for all weight scales", -> for units in [[1.0, 'g'], [1000.0, 'kg'], [1000000.0, 'T']] [scale, unit] = units - p.variant_unit = 'weight' - p.variant_unit_scale = scale + v.variant_unit = 'weight' + v.variant_unit_scale = scale v.unit_value = 100 * scale expect(namer.option_value_value_unit()).toEqual [100, unit] it "generates values for all volume scales", -> for units in [[0.001, 'mL'], [1.0, 'L'], [1000.0, 'kL']] [scale, unit] = units - p.variant_unit = 'volume' - p.variant_unit_scale = scale + v.variant_unit = 'volume' + v.variant_unit_scale = scale v.unit_value = 100 * scale expect(namer.option_value_value_unit()).toEqual [100, unit] - + it "generates right values for volume with rounded values", -> unit = 'L' - p.variant_unit = 'volume' - p.variant_unit_scale = 1.0 + v.variant_unit = 'volume' + v.variant_unit_scale = 1.0 v.unit_value = 0.7 expect(namer.option_value_value_unit()).toEqual [700, 'mL'] it "chooses the correct scale when value is very small", -> - p.variant_unit = 'volume' - p.variant_unit_scale = 0.001 + v.variant_unit = 'volume' + v.variant_unit_scale = 0.001 v.unit_value = 0.0001 expect(namer.option_value_value_unit()).toEqual [0.1, 'mL'] @@ -120,15 +118,15 @@ describe "Option Value Namer", -> # subject.option_value_value_unit.should == [100, unit.pluralize] it "generates singular values for item units when value is 1", -> - p.variant_unit = 'items' - p.variant_unit_scale = null - p.variant_unit_name = 'packet' + v.variant_unit = 'items' + v.variant_unit_scale = null + v.variant_unit_name = 'packet' v.unit_value = 1 expect(namer.option_value_value_unit()).toEqual [1, 'packet'] it "returns [nil, nil] when unit value is not set", -> - p.variant_unit = 'items' - p.variant_unit_scale = null - p.variant_unit_name = 'foo' + v.variant_unit = 'items' + v.variant_unit_scale = null + v.variant_unit_name = 'foo' v.unit_value = null expect(namer.option_value_value_unit()).toEqual [null, null]