diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index 49b3333d65..da7f5af956 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -315,7 +315,7 @@ productsApp.controller "AdminBulkProductsCtrl", [ $scope.productsWithoutDerivedAttributes = (products) -> products_filtered = [] if products - products_filtered.push angular.extend {}, product for product in products + products_filtered = $scope.deepCopyProducts products for product in products_filtered delete product.variant_unit_with_scale if product.variants @@ -326,6 +326,14 @@ productsApp.controller "AdminBulkProductsCtrl", [ products_filtered + $scope.deepCopyProducts = (products) -> + copied_products = (angular.extend {}, product for product in products) + for product in copied_products + if product.variants + product.variants = (angular.extend {}, variant for variant in product.variants) + copied_products + + $scope.findProduct = (id) -> products = (product for product in $scope.products when product.id == id) if products.length == 0 then null else products[0] diff --git a/spec/javascripts/unit/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/bulk_product_update_spec.js.coffee index 7b2b66fcef..f11262675f 100644 --- a/spec/javascripts/unit/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/bulk_product_update_spec.js.coffee @@ -707,9 +707,17 @@ describe "AdminBulkProductsCtrl", -> expect(scope.productsWithoutDerivedAttributes(scope.products)).toEqual([]) it "does not alter original products", -> - scope.products = [{id: 123, variant_unit_with_scale: 'weight_1000'}] - scope.productsWithoutDerivedAttributes() - expect(scope.products).toEqual [{id: 123, variant_unit_with_scale: 'weight_1000'}] + scope.products = [{ + id: 123 + variant_unit_with_scale: 'weight_1000' + variants: [{options_text: 'foo'}] + }] + scope.productsWithoutDerivedAttributes(scope.products) + expect(scope.products).toEqual [{ + id: 123 + variant_unit_with_scale: 'weight_1000' + variants: [{options_text: 'foo'}] + }] describe "updating variants", -> it "returns variants without the unit_value_with_description field", -> @@ -722,6 +730,19 @@ describe "AdminBulkProductsCtrl", -> ] + describe "deep copying products", -> + it "copies products", -> + product = {id: 123} + copiedProducts = scope.deepCopyProducts [product] + expect(copiedProducts[0]).not.toBe(product) + + it "copies variants", -> + variant = {id: 1} + product = {id: 123, variants: [variant]} + copiedProducts = scope.deepCopyProducts [product] + expect(copiedProducts[0].variants[0]).not.toBe(variant) + + describe "fetching a product by id", -> it "returns the product when it is present", -> product = {id: 123}