Pass needed arguments and reorder state machine

- Arguments were misordered and `scale` is needed to compute the denominator.
 - Reorder "state machine" if-else as variant_unit_name is priority and "item" is too.
 - @andrewpbrett I need your review here ;)
 - Still need to test imperial system
This commit is contained in:
Jean-Baptiste Bellet
2021-03-18 09:47:21 +01:00
parent 7abb3868fc
commit 8ad3109e95
2 changed files with 123 additions and 7 deletions

View File

@@ -0,0 +1,116 @@
describe "UnitPrices service", ->
UnitPrices = null
beforeEach ->
module "admin.products"
module ($provide)->
$provide.value "availableUnits", "g,kg,T,mL,L,kL"
null
inject (_UnitPrices_) ->
UnitPrices = _UnitPrices_
describe "get correct unit price duo unit/value for weight", ->
unit_type = "weight"
it "with scale: 1", ->
price = 1
scale = 1
unit_value = 1
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 1000
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with scale and unit_value: 1000", ->
price = 1
scale = 1000
unit_value = 1000
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 1
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with scale: 1000 and unit_value: 2000", ->
price = 1
scale = 1000
unit_value = 2000
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 0.5
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with price: 2", ->
price = 2
scale = 1
unit_value = 1
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 2000
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with price: 2, scale and unit_value: 1000", ->
price = 2
scale = 1000
unit_value = 1000
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 2
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with price: 2, scale: 1000 and unit_value: 2000", ->
price = 2
scale = 1000
unit_value = 2000
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 1
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
it "with price: 2, scale: 1000 and unit_value: 500", ->
price = 2
scale = 1000
unit_value = 500
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 4
expect(UnitPrices.unit(scale, unit_type)).toEqual "kg"
describe "get correct unit price duo unit/value for volume", ->
unit_type = "volume"
it "with scale: 1", ->
price = 1
scale = 1
unit_value = 1
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 1
expect(UnitPrices.unit(scale, unit_type)).toEqual "L"
it "with price: 2 and unit_value: 0.5", ->
price = 2
scale = 1
unit_value = 0.5
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 4
expect(UnitPrices.unit(scale, unit_type)).toEqual "L"
it "with price: 2, scale: 0.001 and unit_value: 0.01", ->
price = 2
scale = 0.001
unit_value = 0.01
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 200
expect(UnitPrices.unit(scale, unit_type)).toEqual "L"
it "with price: 20000, scale: 1000 and unit_value: 10000", ->
price = 20000
scale = 1000
unit_value = 10000
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 2
expect(UnitPrices.unit(scale, unit_type)).toEqual "L"
describe "get correct unit price duo unit/value for items", ->
unit_type = "items"
scale = null
it "with price: 1 and unit_value: 1", ->
price = 1
unit_value = 1
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 1
expect(UnitPrices.unit(scale, unit_type)).toEqual "item"
it "with price: 1 and unit_value: 10", ->
price = 1
unit_value = 10
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 0.1
expect(UnitPrices.unit(scale, unit_type)).toEqual "item"
it "with price: 10 and unit_value: 1", ->
price = 10
unit_value = 1
expect(UnitPrices.price(price, scale, unit_type, unit_value)).toEqual 10
expect(UnitPrices.unit(scale, unit_type)).toEqual "item"