From abf58c0e02b2876fafe088d728ccc2f855bf7fff Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 4 Dec 2014 15:22:54 +1100 Subject: [PATCH] Provide blank values for all variant overrides --- .../override_variants_controller.js.coffee | 1 + .../services/variant_overrides.js.coffee | 11 +++++++ ...verride_variants_controller_spec.js.coffee | 10 +++++-- .../services/variant_overrides_spec.js.coffee | 29 +++++++++++++++++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee index 8f0919af56..89edca5745 100644 --- a/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee +++ b/app/assets/javascripts/admin/controllers/override_variants_controller.js.coffee @@ -22,6 +22,7 @@ angular.module("ofn.admin").controller "AdminOverrideVariantsCtrl", ($scope, Ind $scope.addProducts = (products) -> $scope.products = $scope.products.concat products + VariantOverrides.ensureDataFor hubs, products $scope.selectHub = -> diff --git a/app/assets/javascripts/admin/services/variant_overrides.js.coffee b/app/assets/javascripts/admin/services/variant_overrides.js.coffee index 56307bdbc8..69a55e9f35 100644 --- a/app/assets/javascripts/admin/services/variant_overrides.js.coffee +++ b/app/assets/javascripts/admin/services/variant_overrides.js.coffee @@ -6,3 +6,14 @@ angular.module("ofn.admin").factory "VariantOverrides", (variantOverrides, Index for vo in variantOverrides @variantOverrides[vo.hub_id] ||= {} @variantOverrides[vo.hub_id][vo.variant_id] = vo + + ensureDataFor: (hubs, products) -> + for hub in hubs + @variantOverrides[hub.id] ||= {} + for product in products + for variant in product.variants + @variantOverrides[hub.id][variant.id] ||= + variant_id: variant.id + hub_id: hub.id + price: '' + count_on_hand: '' diff --git a/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee b/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee index b9389d132f..7ab4c177dc 100644 --- a/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/controllers/override_variants_controller_spec.js.coffee @@ -5,6 +5,7 @@ describe "OverrideVariantsCtrl", -> producers = [{id: 2, name: 'Producer'}] products = [{id: 1, name: 'Product'}] hubPermissions = {} + VariantOverrides = null variantOverrides = {} beforeEach -> @@ -15,19 +16,22 @@ describe "OverrideVariantsCtrl", -> null scope = {} - inject ($controller, Indexer, VariantOverrides) -> - ctrl = $controller 'AdminOverrideVariantsCtrl', {$scope: scope, Indexer: Indexer, hubs: hubs, producers: producers, products: products, hubPermissions: hubPermissions, VariantOverrides: VariantOverrides} + inject ($controller, Indexer, _VariantOverrides_) -> + VariantOverrides = _VariantOverrides_ + ctrl = $controller 'AdminOverrideVariantsCtrl', {$scope: scope, Indexer: Indexer, hubs: hubs, producers: producers, products: products, hubPermissions: hubPermissions, VariantOverrides: _VariantOverrides_} it "initialises the hub list and the chosen hub", -> expect(scope.hubs).toEqual hubs - expect(scope.hub).toBeNull + expect(scope.hub).toBeNull() it "adds products", -> + spyOn(VariantOverrides, "ensureDataFor") expect(scope.products).toEqual [] scope.addProducts ['a', 'b'] expect(scope.products).toEqual ['a', 'b'] scope.addProducts ['c', 'd'] expect(scope.products).toEqual ['a', 'b', 'c', 'd'] + expect(VariantOverrides.ensureDataFor).toHaveBeenCalled() describe "selecting a hub", -> it "sets the chosen hub", -> diff --git a/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee b/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee index 01cf73aeda..7bd0605de4 100644 --- a/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee @@ -22,3 +22,32 @@ describe "VariantOverrides service", -> 200: {id: 2, hub_id: 10, variant_id: 200, price: 2, count_on_hand: 2} 20: 300: {id: 3, hub_id: 20, variant_id: 300, price: 3, count_on_hand: 3} + + it "ensures blank data available for some products", -> + hubs = [{id: 10}, {id: 20}, {id: 30}] + products = [ + { + id: 1 + variants: [{id: 100}, {id: 200}, {id: 300}, {id: 400}, {id: 500}] + } + ] + VariantOverrides.ensureDataFor hubs, products + expect(VariantOverrides.variantOverrides).toEqual + 10: + 100: {id: 1, hub_id: 10, variant_id: 100, price: 1, count_on_hand: 1} + 200: {id: 2, hub_id: 10, variant_id: 200, price: 2, count_on_hand: 2} + 300: { hub_id: 10, variant_id: 300, price: '', count_on_hand: ''} + 400: { hub_id: 10, variant_id: 400, price: '', count_on_hand: ''} + 500: { hub_id: 10, variant_id: 500, price: '', count_on_hand: ''} + 20: + 100: { hub_id: 20, variant_id: 100, price: '', count_on_hand: ''} + 200: { hub_id: 20, variant_id: 200, price: '', count_on_hand: ''} + 300: {id: 3, hub_id: 20, variant_id: 300, price: 3, count_on_hand: 3} + 400: { hub_id: 20, variant_id: 400, price: '', count_on_hand: ''} + 500: { hub_id: 20, variant_id: 500, price: '', count_on_hand: ''} + 30: + 100: { hub_id: 30, variant_id: 100, price: '', count_on_hand: ''} + 200: { hub_id: 30, variant_id: 200, price: '', count_on_hand: ''} + 300: { hub_id: 30, variant_id: 300, price: '', count_on_hand: ''} + 400: { hub_id: 30, variant_id: 400, price: '', count_on_hand: ''} + 500: { hub_id: 30, variant_id: 500, price: '', count_on_hand: ''}