Refactoring unitsCtrl

This commit is contained in:
Rob Harrington
2015-04-24 11:27:47 +10:00
parent 57be445bd4
commit 05c350b5ff
2 changed files with 63 additions and 4 deletions

View File

@@ -5,6 +5,13 @@ angular.module("admin.products")
$scope.placeholder_text = ""
$scope.$watchCollection '[product.variant_unit_with_scale, product.master.unit_value_with_description]', ->
$scope.processVariantUnitWithScale()
$scope.processUnitValueWithDescription()
$scope.placeholder_text = new OptionValueNamer($scope.product.master).name()
$scope.variant_unit_options = VariantUnitManager.variantUnitOptions()
$scope.processVariantUnitWithScale = ->
if $scope.product.variant_unit_with_scale
match = $scope.product.variant_unit_with_scale.match(/^([^_]+)_([\d\.]+)$/)
if match
@@ -16,6 +23,7 @@ angular.module("admin.products")
else
$scope.product.variant_unit = $scope.product.variant_unit_scale = null
$scope.processUnitValueWithDescription = ->
if $scope.product.master.hasOwnProperty("unit_value_with_description")
match = $scope.product.master.unit_value_with_description.match(/^([\d\.]+(?= |$)|)( |)(.*)$/)
if match
@@ -24,10 +32,6 @@ angular.module("admin.products")
$scope.product.master.unit_value *= $scope.product.variant_unit_scale if $scope.product.master.unit_value && $scope.product.variant_unit_scale
$scope.product.master.unit_description = match[3]
$scope.placeholder_text = new OptionValueNamer($scope.product.master).name()
$scope.variant_unit_options = VariantUnitManager.variantUnitOptions()
$scope.hasVariants = (product) ->
Object.keys(product.variants).length > 0

View File

@@ -0,0 +1,55 @@
describe "unitsCtrl", ->
ctrl = null
scope = null
product = null
beforeEach ->
module('admin.products')
inject ($rootScope, $controller, VariantUnitManager) ->
scope = $rootScope
ctrl = $controller 'unitsCtrl', {$scope: scope, VariantUnitManager: VariantUnitManager}
describe "interpretting variant_unit_with_scale", ->
it "splits string with one underscore and stores the two parts", ->
scope.product.variant_unit_with_scale = "weight_1000"
scope.processVariantUnitWithScale()
expect(scope.product.variant_unit).toEqual "weight"
expect(scope.product.variant_unit_scale).toEqual 1000
it "interprets strings with no underscore as variant_unit", ->
scope.product.variant_unit_with_scale = "items"
scope.processVariantUnitWithScale()
expect(scope.product.variant_unit).toEqual "items"
expect(scope.product.variant_unit_scale).toEqual null
it "sets variant_unit and variant_unit_scale to null", ->
scope.product.variant_unit_with_scale = null
scope.processVariantUnitWithScale()
expect(scope.product.variant_unit).toEqual null
expect(scope.product.variant_unit_scale).toEqual null
describe "interpretting unit_value_with_description", ->
beforeEach ->
scope.product.master = {}
describe "when a variant_unit_scale is present", ->
beforeEach ->
scope.product.variant_unit_scale = 1
it "splits by whitespace in to unit_value and unit_description", ->
scope.product.master.unit_value_with_description = "12 boxes"
scope.processUnitValueWithDescription()
expect(scope.product.master.unit_value).toEqual 12
expect(scope.product.master.unit_description).toEqual "boxes"
it "uses whole string as unit_value when only numerical characters are present", ->
scope.product.master.unit_value_with_description = "12345"
scope.processUnitValueWithDescription()
expect(scope.product.master.unit_value).toEqual 12345
expect(scope.product.master.unit_description).toEqual ''
it "uses whole string as description when string does not start with a number", ->
scope.product.master.unit_value_with_description = "boxes 12"
scope.processUnitValueWithDescription()
expect(scope.product.master.unit_value).toEqual null
expect(scope.product.master.unit_description).toEqual "boxes 12"