From 9442b7b5dc6d4bbd9a6a4ab81fc84cbefc4a9343 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Tue, 14 Jan 2014 11:13:19 +1100 Subject: [PATCH] On save, scale from chosen unit to base unit (eg. mL to L) --- .../admin/bulk_product_update.js.coffee | 14 +++++-- .../unit/bulk_product_update_spec.js.coffee | 41 ++++++++++++++++--- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index e96ea9e6d2..49b3333d65 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -299,14 +299,16 @@ productsApp.controller "AdminBulkProductsCtrl", [ product.variant_unit_scale = null if product.variants for id, variant of product.variants - $scope.packVariant variant + $scope.packVariant product, variant - $scope.packVariant = (variant) -> + $scope.packVariant = (product, variant) -> if variant.hasOwnProperty("unit_value_with_description") match = variant.unit_value_with_description.match(/^([\d\.]+|)( |)(.*)$/) if match - variant.unit_value = parseFloat(match[1]) || null + product = $scope.findProduct(product.id) + variant.unit_value = parseFloat(match[1]) || null + variant.unit_value *= product.variant_unit_scale if variant.unit_value variant.unit_description = match[3] @@ -323,6 +325,12 @@ productsApp.controller "AdminBulkProductsCtrl", [ delete variant.options_text products_filtered + + $scope.findProduct = (id) -> + products = (product for product in $scope.products when product.id == id) + if products.length == 0 then null else products[0] + + $scope.setMessage = (model, text, style, timeout) -> model.text = text model.style = style diff --git a/spec/javascripts/unit/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/bulk_product_update_spec.js.coffee index f55f5b77cc..7b2b66fcef 100644 --- a/spec/javascripts/unit/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/bulk_product_update_spec.js.coffee @@ -539,20 +539,28 @@ describe "AdminBulkProductsCtrl", -> scope.packProduct(testProduct) - expect(scope.packVariant).toHaveBeenCalledWith(testVariant) + expect(scope.packVariant).toHaveBeenCalledWith(testProduct, testVariant) describe "packing variants", -> + testProduct = {id: 123} + + beforeEach -> + scope.products = [testProduct] + it "extracts unit_value and unit_description from unit_value_with_description", -> + testProduct = {id: 123, variant_unit_scale: 1.0} testVariant = {unit_value_with_description: "250.5 (bottle)"} - scope.packVariant(testVariant) + scope.products = [testProduct] + scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual unit_value: 250.5 unit_description: "(bottle)" unit_value_with_description: "250.5 (bottle)" it "extracts into unit_value when only a number is provided", -> + testProduct = {id: 123, variant_unit_scale: 1.0} testVariant = {unit_value_with_description: "250.5"} - scope.packVariant(testVariant) + scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual unit_value: 250.5 unit_description: '' @@ -560,7 +568,7 @@ describe "AdminBulkProductsCtrl", -> it "extracts into unit_description when only a string is provided", -> testVariant = {unit_value_with_description: "Medium"} - scope.packVariant(testVariant) + scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual unit_value: null unit_description: 'Medium' @@ -568,7 +576,7 @@ describe "AdminBulkProductsCtrl", -> it "sets blank values when no value provided", -> testVariant = {unit_value_with_description: ""} - scope.packVariant(testVariant) + scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual unit_value: null unit_description: '' @@ -576,9 +584,19 @@ describe "AdminBulkProductsCtrl", -> it "sets nothing when the field is undefined", -> testVariant = {} - scope.packVariant(testVariant) + scope.packVariant(testProduct, testVariant) expect(testVariant).toEqual {} + it "converts value from chosen unit to base unit", -> + testProduct = {id: 123, variant_unit_scale: 1000} + testVariant = {unit_value_with_description: "250.5"} + scope.products = [testProduct] + scope.packVariant(testProduct, testVariant) + expect(testVariant).toEqual + unit_value: 250500 + unit_description: '' + unit_value_with_description: "250.5" + describe "filtering products", -> beforeEach -> @@ -704,6 +722,17 @@ describe "AdminBulkProductsCtrl", -> ] + describe "fetching a product by id", -> + it "returns the product when it is present", -> + product = {id: 123} + scope.products = [product] + expect(scope.findProduct(123)).toEqual product + + it "returns null when the product is not present", -> + scope.products = [] + expect(scope.findProduct(123)).toBeNull() + + describe "deleting products", -> it "deletes products with a http delete request to /api/products/id", -> spyOn(window, "confirm").andReturn true