diff --git a/app/assets/javascripts/admin/controllers/variant_overrides_controller.js.coffee b/app/assets/javascripts/admin/controllers/variant_overrides_controller.js.coffee index 3ef79b4b37..81cc7d3317 100644 --- a/app/assets/javascripts/admin/controllers/variant_overrides_controller.js.coffee +++ b/app/assets/javascripts/admin/controllers/variant_overrides_controller.js.coffee @@ -44,8 +44,9 @@ angular.module("ofn.admin").controller "AdminVariantOverridesCtrl", ($scope, $ti else StatusMessage.display 'progress', 'Saving...' DirtyVariantOverrides.save() - .success (data) -> + .success (updatedVos) -> DirtyVariantOverrides.clear() + VariantOverrides.updateIds updatedVos $timeout -> StatusMessage.display 'success', 'Changes saved.' .error (data, status) -> $timeout -> StatusMessage.display 'failure', $scope.updateError(data, status) diff --git a/app/assets/javascripts/admin/services/variant_overrides.js.coffee b/app/assets/javascripts/admin/services/variant_overrides.js.coffee index 69a55e9f35..28d65eab03 100644 --- a/app/assets/javascripts/admin/services/variant_overrides.js.coffee +++ b/app/assets/javascripts/admin/services/variant_overrides.js.coffee @@ -17,3 +17,7 @@ angular.module("ofn.admin").factory "VariantOverrides", (variantOverrides, Index hub_id: hub.id price: '' count_on_hand: '' + + updateIds: (updatedVos) -> + for vo in updatedVos + @variantOverrides[vo.hub_id][vo.variant_id].id = vo.id \ No newline at end of file diff --git a/app/controllers/admin/variant_overrides_controller.rb b/app/controllers/admin/variant_overrides_controller.rb index 5f2a2e205d..e46d5b1a6b 100644 --- a/app/controllers/admin/variant_overrides_controller.rb +++ b/app/controllers/admin/variant_overrides_controller.rb @@ -23,7 +23,8 @@ module Admin vo_set.collection.each { |vo| authorize! :update, vo } if vo_set.save - render json: {} + # Return saved VOs with IDs + render json: vo_set.collection, each_serializer: Api::Admin::VariantOverrideSerializer else if vo_set.errors.present? render json: { errors: vo_set.errors }, status: 400 diff --git a/app/serializers/api/admin/variant_override_serializer.rb b/app/serializers/api/admin/variant_override_serializer.rb index bc057adc78..ebe76a1049 100644 --- a/app/serializers/api/admin/variant_override_serializer.rb +++ b/app/serializers/api/admin/variant_override_serializer.rb @@ -1,3 +1,3 @@ class Api::Admin::VariantOverrideSerializer < ActiveModel::Serializer - attributes :id, :variant_id, :hub_id, :price, :count_on_hand + attributes :id, :hub_id, :variant_id, :price, :count_on_hand end diff --git a/spec/features/admin/variant_overrides_spec.rb b/spec/features/admin/variant_overrides_spec.rb index 3ca116a5a7..aa2338a219 100644 --- a/spec/features/admin/variant_overrides_spec.rb +++ b/spec/features/admin/variant_overrides_spec.rb @@ -83,6 +83,38 @@ feature %q{ vo.count_on_hand.should == 123 end + describe "creating and then updating the new override" do + it "updates the same override instead of creating a duplicate" do + # When I create a new override + fill_in "variant-overrides-#{variant.id}-price", with: '777.77' + fill_in "variant-overrides-#{variant.id}-count-on-hand", with: '123' + page.should have_content "Changes to one override remain unsaved." + + expect do + click_button 'Save Changes' + page.should have_content "Changes saved." + end.to change(VariantOverride, :count).by(1) + + # And I update its settings without reloading the page + fill_in "variant-overrides-#{variant.id}-price", with: '111.11' + fill_in "variant-overrides-#{variant.id}-count-on-hand", with: '111' + page.should have_content "Changes to one override remain unsaved." + + # Then I shouldn't see a new override + expect do + click_button 'Save Changes' + page.should have_content "Changes saved." + end.to change(VariantOverride, :count).by(0) + + # And the override should be updated + vo = VariantOverride.last + vo.variant_id.should == variant.id + vo.hub_id.should == hub.id + vo.price.should == 111.11 + vo.count_on_hand.should == 111 + end + end + it "displays an error when unauthorised to access the page" do fill_in "variant-overrides-#{variant.id}-price", with: '777.77' fill_in "variant-overrides-#{variant.id}-count-on-hand", with: '123' 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 7bd0605de4..532bb1d65c 100644 --- a/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee +++ b/spec/javascripts/unit/admin/services/variant_overrides_spec.js.coffee @@ -51,3 +51,18 @@ describe "VariantOverrides service", -> 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: ''} + + it "updates the IDs of variant overrides", -> + VariantOverrides.variantOverrides[2] = {} + VariantOverrides.variantOverrides[2][3] = {hub_id: 2, variant_id: 3, price: "4.0", count_on_hand: 5} + VariantOverrides.variantOverrides[2][8] = {hub_id: 2, variant_id: 8, price: "9.0", count_on_hand: 10} + + updatedVos = [ + {id: 1, hub_id: 2, variant_id: 3, price: "4.0", count_on_hand: 5} + {id: 6, hub_id: 2, variant_id: 8, price: "9.0", count_on_hand: 10} + ] + + VariantOverrides.updateIds updatedVos + + expect(VariantOverrides.variantOverrides[2][3].id).toEqual 1 + expect(VariantOverrides.variantOverrides[2][8].id).toEqual 6