diff --git a/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee new file mode 100644 index 0000000000..68d9b4c1ba --- /dev/null +++ b/spec/javascripts/unit/admin/services/bulk_products_spec.js.coffee @@ -0,0 +1,149 @@ + # describe "fetching products", -> + # it "makes a standard call to dataFetcher when no filters exist", -> + # $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond "list of products" + # $scope.fetchProducts() + + # it "calls makes more calls to dataFetcher if more pages exist", -> + # $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond { products: [], pages: 2 } + # $httpBackend.expectGET("/api/products/bulk_products?page=2;per_page=20;").respond { products: ["list of products"] } + # $scope.fetchProducts() + # $httpBackend.flush() + + # it "applies filters when they are present", -> + # filter = {property: $scope.filterableColumns[1], predicate:$scope.filterTypes[0], value:"Product1"} + # $scope.currentFilters.push filter # Don't use addFilter as that is not what we are testing + # expect($scope.currentFilters).toEqual [filter] + # $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;q[name_eq]=Product1;").respond "list of products" + # $scope.fetchProducts() + # $httpBackend.flush() + + + # describe "preparing products", -> + # beforeEach -> + # spyOn $scope, "loadVariantUnit" + + # it "initialises display properties for the product", -> + # product = {id: 123} + # $scope.displayProperties = {} + # $scope.unpackProduct product + # expect($scope.displayProperties[123]).toEqual {showVariants: false} + + # it "calls loadVariantUnit for the product", -> + # product = {id: 123} + # $scope.displayProperties = {} + # $scope.unpackProduct product + # expect($scope.loadVariantUnit.calls.length).toEqual 1 + + + # describe "loading variant unit", -> + # describe "setting product variant_unit_with_scale field", -> + # it "sets by combining variant_unit and variant_unit_scale", -> + # product = + # variant_unit: "volume" + # variant_unit_scale: .001 + # $scope.loadVariantUnit product + # expect(product.variant_unit_with_scale).toEqual "volume_0.001" + + # it "sets to null when variant_unit is null", -> + # product = {variant_unit: null, variant_unit_scale: 1000} + # $scope.loadVariantUnit product + # expect(product.variant_unit_with_scale).toBeNull() + + # it "sets to variant_unit when variant_unit_scale is null", -> + # product = {variant_unit: 'items', variant_unit_scale: null, variant_unit_name: 'foo'} + # $scope.loadVariantUnit product + # expect(product.variant_unit_with_scale).toEqual "items" + + # it "sets to variant_unit when variant_unit is 'items'", -> + # product = {variant_unit: 'items', variant_unit_scale: 1000, variant_unit_name: 'foo'} + # $scope.loadVariantUnit product + # expect(product.variant_unit_with_scale).toEqual "items" + + # it "loads data for variants (incl. master)", -> + # spyOn $scope, "loadVariantUnitValues" + # spyOn $scope, "loadVariantUnitValue" + + # product = + # variant_unit_scale: 1.0 + # master: {id: 1, unit_value: 1, unit_description: '(one)'} + # variants: [{id: 2, unit_value: 2, unit_description: '(two)'}] + # $scope.loadVariantUnit product + + # expect($scope.loadVariantUnitValues).toHaveBeenCalledWith product + # expect($scope.loadVariantUnitValue).toHaveBeenCalledWith product, product.master + + # it "loads data for variants (excl. master)", -> + # spyOn $scope, "loadVariantUnitValue" + + # product = + # variant_unit_scale: 1.0 + # master: {id: 1, unit_value: 1, unit_description: '(one)'} + # variants: [{id: 2, unit_value: 2, unit_description: '(two)'}] + # $scope.loadVariantUnitValues product + + # expect($scope.loadVariantUnitValue).toHaveBeenCalledWith product, product.variants[0] + # expect($scope.loadVariantUnitValue).not.toHaveBeenCalledWith product, product.master + + # describe "setting variant unit_value_with_description", -> + # it "sets by combining unit_value and unit_description", -> + # product = + # variant_unit_scale: 1.0 + # variants: [{id: 1, unit_value: 1, unit_description: '(bottle)'}] + # $scope.loadVariantUnitValues product, product.variants[0] + # expect(product.variants[0]).toEqual + # id: 1 + # unit_value: 1 + # unit_description: '(bottle)' + # unit_value_with_description: '1 (bottle)' + + # it "uses unit_value when description is missing", -> + # product = + # variant_unit_scale: 1.0 + # variants: [{id: 1, unit_value: 1}] + # $scope.loadVariantUnitValues product, product.variants[0] + # expect(product.variants[0].unit_value_with_description).toEqual '1' + + # it "uses unit_description when value is missing", -> + # product = + # variant_unit_scale: 1.0 + # variants: [{id: 1, unit_description: 'Small'}] + # $scope.loadVariantUnitValues product, product.variants[0] + # expect(product.variants[0].unit_value_with_description).toEqual 'Small' + + # it "converts values from base value to chosen unit", -> + # product = + # variant_unit_scale: 1000.0 + # variants: [{id: 1, unit_value: 2500}] + # $scope.loadVariantUnitValues product, product.variants[0] + # expect(product.variants[0].unit_value_with_description).toEqual '2.5' + + # it "displays a unit_value of zero", -> + # product = + # variant_unit_scale: 1.0 + # variants: [{id: 1, unit_value: 0}] + # $scope.loadVariantUnitValues product, product.variants[0] + # expect(product.variants[0].unit_value_with_description).toEqual '0' + + + # describe "calculating the scaled unit value for a variant", -> + # it "returns the scaled value when variant has a unit_value", -> + # product = {variant_unit_scale: 0.001} + # variant = {unit_value: 5} + # expect($scope.variantUnitValue(product, variant)).toEqual 5000 + + # it "returns the unscaled value when the product has no scale", -> + # product = {} + # variant = {unit_value: 5} + # expect($scope.variantUnitValue(product, variant)).toEqual 5 + + # it "returns zero when the value is zero", -> + # product = {} + # variant = {unit_value: 0} + # expect($scope.variantUnitValue(product, variant)).toEqual 0 + + # it "returns null when the variant has no unit_value", -> + # product = {} + # variant = {} + # expect($scope.variantUnitValue(product, variant)).toEqual null + + diff --git a/spec/javascripts/unit/bulk_product_update_spec.js.coffee b/spec/javascripts/unit/bulk_product_update_spec.js.coffee index fa7ebdd82d..13cb2951c2 100644 --- a/spec/javascripts/unit/bulk_product_update_spec.js.coffee +++ b/spec/javascripts/unit/bulk_product_update_spec.js.coffee @@ -231,7 +231,7 @@ describe "filtering products for submission to database", -> ] describe "AdminProductEditCtrl", -> - $ctrl = $scope = $timeout = $httpBackend = DirtyProducts = null + $ctrl = $scope = $timeout = $httpBackend = BulkProducts = DirtyProducts = null beforeEach -> module "ofn.admin" @@ -241,11 +241,12 @@ describe "AdminProductEditCtrl", -> $provide.value 'SpreeApiKey', 'API_KEY' null - beforeEach inject((_$controller_, _$timeout_, $rootScope, _$httpBackend_, _DirtyProducts_) -> + beforeEach inject((_$controller_, _$timeout_, $rootScope, _$httpBackend_, _BulkProducts_, _DirtyProducts_) -> $scope = $rootScope.$new() $ctrl = _$controller_ $timeout = _$timeout_ $httpBackend = _$httpBackend_ + BulkProducts = _BulkProducts_ DirtyProducts = _DirtyProducts_ $ctrl "AdminProductEditCtrl", {$scope: $scope, $timeout: $timeout} @@ -262,42 +263,33 @@ describe "AdminProductEditCtrl", -> describe "fetching products", -> - it "makes a standard call to dataFetcher when no filters exist", -> - $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond "list of products" - $scope.fetchProducts() + $q = null + deferred = null + + beforeEach inject((_$q_) -> + $q = _$q_ + ) + + beforeEach -> + deferred = $q.defer() + deferred.resolve() + spyOn $scope, "resetProducts" + spyOn(BulkProducts, "fetch").andReturn deferred.promise it "calls resetProducts after data has been received", -> - spyOn $scope, "resetProducts" - $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond { products: "list of products" } $scope.fetchProducts() - $httpBackend.flush() - expect($scope.resetProducts).toHaveBeenCalledWith "list of products" - - it "calls makes more calls to dataFetcher if more pages exist", -> - $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond { products: [], pages: 2 } - $httpBackend.expectGET("/api/products/bulk_products?page=2;per_page=20;").respond { products: ["list of products"] } - $scope.fetchProducts() - $httpBackend.flush() - - it "applies filters when they are present", -> - filter = {property: $scope.filterableColumns[1], predicate:$scope.filterTypes[0], value:"Product1"} - $scope.currentFilters.push filter # Don't use addFilter as that is not what we are testing - expect($scope.currentFilters).toEqual [filter] - $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;q[name_eq]=Product1;").respond "list of products" - $scope.fetchProducts() - $httpBackend.flush() + $scope.$digest() + expect($scope.resetProducts).toHaveBeenCalled() it "sets the loading property to true before fetching products and unsets it when loading is complete", -> - $httpBackend.expectGET("/api/products/bulk_products?page=1;per_page=20;").respond "list of products" $scope.fetchProducts() expect($scope.loading).toEqual true - $httpBackend.flush() + $scope.$digest() expect($scope.loading).toEqual false describe "resetting products", -> beforeEach -> - spyOn $scope, "unpackProduct" spyOn DirtyProducts, "clear" $scope.products = {} $scope.resetProducts [ @@ -311,153 +303,9 @@ describe "AdminProductEditCtrl", -> } ] - it "sets products to the value of 'data'", -> - expect($scope.products).toEqual [ - { - id: 1 - name: "P1" - } - { - id: 3 - name: "P2" - } - ] - it "resets dirtyProducts", -> expect(DirtyProducts.clear).toHaveBeenCalled() - it "calls unpackProduct once for each product", -> - expect($scope.unpackProduct.calls.length).toEqual 2 - - - describe "preparing products", -> - beforeEach -> - spyOn $scope, "loadVariantUnit" - - it "initialises display properties for the product", -> - product = {id: 123} - $scope.displayProperties = {} - $scope.unpackProduct product - expect($scope.displayProperties[123]).toEqual {showVariants: false} - - it "calls loadVariantUnit for the product", -> - product = {id: 123} - $scope.displayProperties = {} - $scope.unpackProduct product - expect($scope.loadVariantUnit.calls.length).toEqual 1 - - - describe "loading variant unit", -> - describe "setting product variant_unit_with_scale field", -> - it "sets by combining variant_unit and variant_unit_scale", -> - product = - variant_unit: "volume" - variant_unit_scale: .001 - $scope.loadVariantUnit product - expect(product.variant_unit_with_scale).toEqual "volume_0.001" - - it "sets to null when variant_unit is null", -> - product = {variant_unit: null, variant_unit_scale: 1000} - $scope.loadVariantUnit product - expect(product.variant_unit_with_scale).toBeNull() - - it "sets to variant_unit when variant_unit_scale is null", -> - product = {variant_unit: 'items', variant_unit_scale: null, variant_unit_name: 'foo'} - $scope.loadVariantUnit product - expect(product.variant_unit_with_scale).toEqual "items" - - it "sets to variant_unit when variant_unit is 'items'", -> - product = {variant_unit: 'items', variant_unit_scale: 1000, variant_unit_name: 'foo'} - $scope.loadVariantUnit product - expect(product.variant_unit_with_scale).toEqual "items" - - it "loads data for variants (incl. master)", -> - spyOn $scope, "loadVariantUnitValues" - spyOn $scope, "loadVariantUnitValue" - - product = - variant_unit_scale: 1.0 - master: {id: 1, unit_value: 1, unit_description: '(one)'} - variants: [{id: 2, unit_value: 2, unit_description: '(two)'}] - $scope.loadVariantUnit product - - expect($scope.loadVariantUnitValues).toHaveBeenCalledWith product - expect($scope.loadVariantUnitValue).toHaveBeenCalledWith product, product.master - - it "loads data for variants (excl. master)", -> - spyOn $scope, "loadVariantUnitValue" - - product = - variant_unit_scale: 1.0 - master: {id: 1, unit_value: 1, unit_description: '(one)'} - variants: [{id: 2, unit_value: 2, unit_description: '(two)'}] - $scope.loadVariantUnitValues product - - expect($scope.loadVariantUnitValue).toHaveBeenCalledWith product, product.variants[0] - expect($scope.loadVariantUnitValue).not.toHaveBeenCalledWith product, product.master - - describe "setting variant unit_value_with_description", -> - it "sets by combining unit_value and unit_description", -> - product = - variant_unit_scale: 1.0 - variants: [{id: 1, unit_value: 1, unit_description: '(bottle)'}] - $scope.loadVariantUnitValues product, product.variants[0] - expect(product.variants[0]).toEqual - id: 1 - unit_value: 1 - unit_description: '(bottle)' - unit_value_with_description: '1 (bottle)' - - it "uses unit_value when description is missing", -> - product = - variant_unit_scale: 1.0 - variants: [{id: 1, unit_value: 1}] - $scope.loadVariantUnitValues product, product.variants[0] - expect(product.variants[0].unit_value_with_description).toEqual '1' - - it "uses unit_description when value is missing", -> - product = - variant_unit_scale: 1.0 - variants: [{id: 1, unit_description: 'Small'}] - $scope.loadVariantUnitValues product, product.variants[0] - expect(product.variants[0].unit_value_with_description).toEqual 'Small' - - it "converts values from base value to chosen unit", -> - product = - variant_unit_scale: 1000.0 - variants: [{id: 1, unit_value: 2500}] - $scope.loadVariantUnitValues product, product.variants[0] - expect(product.variants[0].unit_value_with_description).toEqual '2.5' - - it "displays a unit_value of zero", -> - product = - variant_unit_scale: 1.0 - variants: [{id: 1, unit_value: 0}] - $scope.loadVariantUnitValues product, product.variants[0] - expect(product.variants[0].unit_value_with_description).toEqual '0' - - - describe "calculating the scaled unit value for a variant", -> - it "returns the scaled value when variant has a unit_value", -> - product = {variant_unit_scale: 0.001} - variant = {unit_value: 5} - expect($scope.variantUnitValue(product, variant)).toEqual 5000 - - it "returns the unscaled value when the product has no scale", -> - product = {} - variant = {unit_value: 5} - expect($scope.variantUnitValue(product, variant)).toEqual 5 - - it "returns zero when the value is zero", -> - product = {} - variant = {unit_value: 0} - expect($scope.variantUnitValue(product, variant)).toEqual 0 - - it "returns null when the variant has no unit_value", -> - product = {} - variant = {} - expect($scope.variantUnitValue(product, variant)).toEqual null - describe "updating the product on hand count", -> it "updates when product is not available on demand", ->