Fix legacy bulk edit product system spec

This commit is contained in:
Gaetan Craig-Riou
2024-08-12 14:01:51 +10:00
parent 893b541dca
commit 8ec1f61cd7
3 changed files with 124 additions and 109 deletions

View File

@@ -53,126 +53,128 @@ describe "BulkProducts service", ->
describe "loading variant unit", ->
describe "setting product variant_unit_with_scale field", ->
it "sets by combining variant_unit and variant_unit_scale", ->
it "HERE 2 sets by combining variant_unit and variant_unit_scale", ->
product =
variant_unit: "volume"
variant_unit_scale: .001
variants:[
id: 10
variant_unit: "volume"
variant_unit_scale: .001
]
BulkProducts.loadVariantUnit product
expect(product.variant_unit_with_scale).toEqual "volume_0.001"
expect(product.variants[0].variant_unit_with_scale).toEqual "volume_0.001"
it "sets to null when variant_unit is null", ->
product = {variant_unit: null, variant_unit_scale: 1000}
product =
variants: [
{variant_unit: null, variant_unit_scale: 1000}
]
BulkProducts.loadVariantUnit product
expect(product.variant_unit_with_scale).toBeNull()
expect(product.variants[0].variant_unit_with_scale).toBeNull()
it "sets to variant_unit when variant_unit_scale is null", ->
product = {variant_unit: 'items', variant_unit_scale: null, variant_unit_name: 'foo'}
product =
variants: [
{variant_unit: 'items', variant_unit_scale: null, variant_unit_name: 'foo'}
]
BulkProducts.loadVariantUnit product
expect(product.variant_unit_with_scale).toEqual "items"
expect(product.variants[0].variant_unit_with_scale).toEqual "items"
it "sets to variant_unit when variant_unit is 'items'", ->
product = {variant_unit: 'items', variant_unit_scale: 1000, variant_unit_name: 'foo'}
product =
variants: [
{variant_unit: 'items', variant_unit_scale: 1000, variant_unit_name: 'foo'}
]
BulkProducts.loadVariantUnit product
expect(product.variant_unit_with_scale).toEqual "items"
it "loads data for variants (incl. master)", ->
spyOn BulkProducts, "loadVariantUnitValues"
spyOn BulkProducts, "loadVariantUnitValue"
product =
variant_unit_scale: 1.0
master: {id: 1, unit_value: 1, unit_description: '(one)'}
variants: [{id: 2, unit_value: 2, unit_description: '(two)'}]
BulkProducts.loadVariantUnit product
expect(BulkProducts.loadVariantUnitValues).toHaveBeenCalledWith product
expect(BulkProducts.loadVariantUnitValue).toHaveBeenCalledWith product, product.master
expect(product.variants[0].variant_unit_with_scale).toEqual "items"
it "loads data for variants (excl. master)", ->
spyOn BulkProducts, "loadVariantUnitValue"
product =
variant_unit_scale: 1.0
master: {id: 1, unit_value: 1, unit_description: '(one)'}
variants: [{id: 2, unit_value: 2, unit_description: '(two)'}]
BulkProducts.loadVariantUnitValues product
variants: [
{id: 2, variant_unit_scale: 1.0, unit_value: 2, unit_description: '(two)'}
]
BulkProducts.loadVariantUnitValues product.variants
expect(BulkProducts.loadVariantUnitValue).toHaveBeenCalledWith product, product.variants[0]
expect(BulkProducts.loadVariantUnitValue).not.toHaveBeenCalledWith product, product.master
expect(BulkProducts.loadVariantUnitValue).toHaveBeenCalledWith product.variants[0]
describe "setting variant unit_value_with_description", ->
it "sets by combining unit_value and unit_description", ->
product =
variant_unit_scale: 1.0
variants: [{id: 1, unit_value: 1, unit_description: '(bottle)'}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
{id: 1, variant_unit_scale: 1.0, unit_value: 1, unit_description: '(bottle)'}
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0]).toEqual
id: 1
variant_unit_scale: 1.0,
variant_unit_with_scale: null,
unit_value: 1
unit_description: '(bottle)'
unit_value_with_description: '1 (bottle)'
it "uses unit_value when description is missing", ->
product =
variant_unit_scale: 1.0
variants: [{id: 1, unit_value: 1}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
{id: 1, variant_unit_scale: 1.0, unit_value: 1}
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0].unit_value_with_description).toEqual '1'
it "uses unit_description when value is missing", ->
product =
variant_unit_scale: 1.0
variants: [{id: 1, unit_description: 'Small'}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
{id: 1, variant_unit_scale: 1.0, unit_description: 'Small'}
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0].unit_value_with_description).toEqual 'Small'
it "converts values from base value to chosen unit", ->
product =
variant_unit_scale: 1000.0
variants: [{id: 1, unit_value: 2500}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
id: 1, variant_unit_scale: 1000.0, unit_value: 2500
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0].unit_value_with_description).toEqual '2.5'
it "converts values from base value to chosen unit without breaking precision", ->
product =
variant_unit_scale: 0.001
variants: [{id: 1, unit_value: 0.35}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
{id: 1,variant_unit_scale: 0.001, unit_value: 0.35}
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0].unit_value_with_description).toEqual '350'
it "displays a unit_value of zero", ->
product =
variant_unit_scale: 1.0
variants: [{id: 1, unit_value: 0}]
BulkProducts.loadVariantUnitValues product, product.variants[0]
variants: [
{id: 1, variant_unit_scale: 1.0, unit_value: 0}
]
BulkProducts.loadVariantUnitValues product.variants
expect(product.variants[0].unit_value_with_description).toEqual '0'
describe "calculating the scaled unit value for a variant", ->
it "returns the scaled value when variant has a unit_value", ->
product = {variant_unit_scale: 0.001}
variant = {unit_value: 5}
expect(BulkProducts.variantUnitValue(product, variant)).toEqual 5000
variant = {variant_unit_scale: 0.001, unit_value: 5}
expect(BulkProducts.variantUnitValue(variant)).toEqual 5000
it "returns the scaled value rounded off upto 2 decimal points", ->
product = {variant_unit_scale: 28.35}
variant = {unit_value: 1234.5}
expect(BulkProducts.variantUnitValue(product, variant)).toEqual 43.54
variant = {variant_unit_scale: 28.35, unit_value: 1234.5}
expect(BulkProducts.variantUnitValue(variant)).toEqual 43.54
it "returns the unscaled value when the product has no scale", ->
product = {}
variant = {unit_value: 5}
expect(BulkProducts.variantUnitValue(product, variant)).toEqual 5
expect(BulkProducts.variantUnitValue(variant)).toEqual 5
it "returns zero when the value is zero", ->
product = {}
variant = {unit_value: 0}
expect(BulkProducts.variantUnitValue(product, variant)).toEqual 0
expect(BulkProducts.variantUnitValue(variant)).toEqual 0
it "returns null when the variant has no unit_value", ->
product = {}
variant = {}
expect(BulkProducts.variantUnitValue(product, variant)).toEqual null
expect(BulkProducts.variantUnitValue(variant)).toEqual null
describe "fetching a product by id", ->