From 368612cad6098cf177168e880d4dccab3f6090d8 Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Mon, 30 Jul 2018 07:42:51 +0800 Subject: [PATCH] Allow removal of enterprise logo and promo image --- .../enterprise_controller.js.coffee | 22 +++++- .../resources/enterprise_resource.js.coffee | 8 +-- .../admin/enterprises/form/_images.html.haml | 8 ++- config/locales/en.yml | 6 ++ .../features/admin/enterprises/images_spec.rb | 30 ++++++-- spec/features/admin/enterprises_spec.rb | 12 ---- .../enterprise_controller_spec.js.coffee | 72 ++++++++++++++++++- .../services/enterprises_spec.js.coffee | 8 +-- 8 files changed, 135 insertions(+), 31 deletions(-) diff --git a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee index bb1ae6b31a..a6b0a40958 100644 --- a/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee +++ b/app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee @@ -1,5 +1,5 @@ angular.module("admin.enterprises") - .controller "enterpriseCtrl", ($scope, $http, $window, NavigationCheck, enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) -> + .controller "enterpriseCtrl", ($scope, $http, $window, NavigationCheck, enterprise, Enterprises, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu, StatusMessage) -> $scope.Enterprise = enterprise $scope.PaymentMethods = EnterprisePaymentMethods.paymentMethods $scope.ShippingMethods = EnterpriseShippingMethods.shippingMethods @@ -67,3 +67,23 @@ angular.module("admin.enterprises") $scope.resetModal = -> $scope.newUser = $scope.invite_errors = $scope.invite_success = null + + $scope.removeLogo = -> + Enterprises.removeLogo($scope.Enterprise).then (data) -> + $scope.Enterprise = angular.copy(data) + $scope.$emit("enterprise:updated", $scope.Enterprise) + + StatusMessage.display("success", t("admin.enterprises.remove_logo.removed_successfully")) + , (response) -> + if response.data.error? + StatusMessage.display("failure", response.data.error) + + $scope.removePromoImage = -> + Enterprises.removePromoImage($scope.Enterprise).then (data) -> + $scope.Enterprise = angular.copy(data) + $scope.$emit("enterprise:updated", $scope.Enterprise) + + StatusMessage.display("success", t("admin.enterprises.remove_promo_image.removed_successfully")) + , (response) -> + if response.data.error? + StatusMessage.display("failure", response.data.error) diff --git a/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee b/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee index 25b72e1922..ec89bbda36 100644 --- a/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee +++ b/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee @@ -9,13 +9,9 @@ angular.module("admin.resources").factory 'EnterpriseResource', ($resource) -> 'update': method: 'PUT' 'removeLogo': - url: '/admin/enterprises/:id/images/:action.json' + url: '/api/enterprises/:id/logo.json' method: 'DELETE' - params: - action: 'remove_logo' 'removePromoImage': - url: '/admin/enterprises/:id/images/:action.json' + url: '/api/enterprises/:id/promo_image.json' method: 'DELETE' - params: - action: 'remove_promo_image' }) diff --git a/app/views/admin/enterprises/form/_images.html.haml b/app/views/admin/enterprises/form/_images.html.haml index ea718607b5..d44e619cf6 100644 --- a/app/views/admin/enterprises/form/_images.html.haml +++ b/app/views/admin/enterprises/form/_images.html.haml @@ -4,8 +4,10 @@ %br 100 x 100 pixels .omega.eight.columns - = image_tag @object.logo(:medium), class: 'image-field-group__preview-image' if @object.logo.present? + = image_tag '', class: 'image-field-group__preview-image', 'ng-src' => '{{ Enterprise.logo.medium }}', 'ng-if' => 'Enterprise.logo' = f.file_field :logo + %a.button.red{ href: '', ng: {click: 'removeLogo()', if: 'Enterprise.logo'} } + = t('admin.enterprises.remove_logo.remove') .row.page-admin-enterprises-form__promo-image-field-group.image-field-group .alpha.three.columns @@ -18,5 +20,7 @@ = t('.promo_image_note3') .omega.eight.columns - = image_tag @object.promo_image(:large), class: 'image-field-group__preview-image' if @object.promo_image.present? + = image_tag '', class: 'image-field-group__preview-image', 'ng-src' => '{{ Enterprise.promo_image.large }}', 'ng-if' => 'Enterprise.promo_image' = f.file_field :promo_image + %a.button.red{ href: '', ng: {click: 'removePromoImage()', if: 'Enterprise.promo_image'} } + = t('admin.enterprises.remove_promo_image.remove') diff --git a/config/locales/en.yml b/config/locales/en.yml index 61f74ad2a8..677b3b9d2f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -831,6 +831,12 @@ en: new: title: New Enterprise back_link: Back to enterprises list + remove_logo: + remove: "Remove Image" + removed_successfully: "Logo removed successfully" + remove_promo_image: + remove: "Remove Image" + removed_successfully: "Promo image removed successfully" welcome: welcome_title: Welcome to the Open Food Network! welcome_text: You have successfully created a diff --git a/spec/features/admin/enterprises/images_spec.rb b/spec/features/admin/enterprises/images_spec.rb index 01f8754e2d..92c4bbafaf 100644 --- a/spec/features/admin/enterprises/images_spec.rb +++ b/spec/features/admin/enterprises/images_spec.rb @@ -28,7 +28,7 @@ feature "Managing enterprise images" do scenario "editing logo" do # Adding image - attach_file "enterprise[logo]", File.join(Rails.root, "app/assets/images/logo-white.png") + attach_file "enterprise[logo]", Rails.root.join("app", "assets", "images", "logo-white.png") click_button "Update" expect(page).to have_content("Enterprise \"#{distributor.name}\" has been successfully updated!") @@ -40,7 +40,7 @@ feature "Managing enterprise images" do end # Replacing image - attach_file "enterprise[logo]", File.join(Rails.root, "app/assets/images/logo-black.png") + attach_file "enterprise[logo]", Rails.root.join("app", "assets", "images", "logo-black.png") click_button "Update" expect(page).to have_content("Enterprise \"#{distributor.name}\" has been successfully updated!") @@ -50,11 +50,22 @@ feature "Managing enterprise images" do expect(page).to have_selector(".image-field-group__preview-image") expect(html).to include("logo-black.png") end + + # Removing image + within ".page-admin-enterprises-form__logo-field-group" do + click_on "Remove Image" + end + + expect(page).to have_content("Logo removed successfully") + + within ".page-admin-enterprises-form__logo-field-group" do + expect(page).to have_no_selector(".image-field-group__preview-image") + end end scenario "editing promo image" do # Adding image - attach_file "enterprise[promo_image]", File.join(Rails.root, "app/assets/images/logo-white.png") + attach_file "enterprise[promo_image]", Rails.root.join("app", "assets", "images", "logo-white.png") click_button "Update" expect(page).to have_content("Enterprise \"#{distributor.name}\" has been successfully updated!") @@ -66,7 +77,7 @@ feature "Managing enterprise images" do end # Replacing image - attach_file "enterprise[promo_image]", File.join(Rails.root, "app/assets/images/logo-black.png") + attach_file "enterprise[promo_image]", Rails.root.join("app", "assets", "images", "logo-black.png") click_button "Update" expect(page).to have_content("Enterprise \"#{distributor.name}\" has been successfully updated!") @@ -76,6 +87,17 @@ feature "Managing enterprise images" do expect(page).to have_selector(".image-field-group__preview-image") expect(html).to include("logo-black.jpg") end + + # Removing image + within ".page-admin-enterprises-form__promo-image-field-group" do + click_on "Remove Image" + end + + expect(page).to have_content("Promo image removed successfully") + + within ".page-admin-enterprises-form__promo-image-field-group" do + expect(page).to have_no_selector(".image-field-group__preview-image") + end end end end diff --git a/spec/features/admin/enterprises_spec.rb b/spec/features/admin/enterprises_spec.rb index bdbb7cde16..5b1f951e95 100644 --- a/spec/features/admin/enterprises_spec.rb +++ b/spec/features/admin/enterprises_spec.rb @@ -417,18 +417,6 @@ feature %q{ end end - scenario "editing images for an enterprise" do - visit admin_enterprises_path - within("tbody#e_#{distributor1.id}") { click_link 'Settings' } - - within(".side_menu") do - click_link "Images" - end - - page.should have_content "LOGO" - page.should have_content "PROMO" - end - scenario "managing producer properties" do create(:property, name: "Certified Organic") visit admin_enterprises_path diff --git a/spec/javascripts/unit/admin/enterprises/controllers/enterprise_controller_spec.js.coffee b/spec/javascripts/unit/admin/enterprises/controllers/enterprise_controller_spec.js.coffee index 17ef445846..8ea5d60837 100644 --- a/spec/javascripts/unit/admin/enterprises/controllers/enterprise_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/enterprises/controllers/enterprise_controller_spec.js.coffee @@ -4,6 +4,8 @@ describe "enterpriseCtrl", -> enterprise = null PaymentMethods = null ShippingMethods = null + Enterprises = null + StatusMessage = null beforeEach -> module('admin.enterprises') @@ -18,9 +20,11 @@ describe "enterpriseCtrl", -> shippingMethods: "shipping methods" receivesNotifications = 99 - inject ($rootScope, $controller) -> + inject ($rootScope, $controller, _Enterprises_, _StatusMessage_) -> scope = $rootScope - ctrl = $controller 'enterpriseCtrl', {$scope: scope, enterprise: enterprise, EnterprisePaymentMethods: PaymentMethods, EnterpriseShippingMethods: ShippingMethods, receivesNotifications: receivesNotifications} + Enterprises = _Enterprises_ + StatusMessage = _StatusMessage_ + ctrl = $controller "enterpriseCtrl", {$scope: scope, enterprise: enterprise, EnterprisePaymentMethods: PaymentMethods, EnterpriseShippingMethods: ShippingMethods, Enterprises: Enterprises, StatusMessage: StatusMessage, receivesNotifications: receivesNotifications} describe "initialisation", -> it "stores enterprise", -> @@ -32,6 +36,70 @@ describe "enterpriseCtrl", -> it "stores shipping methods", -> expect(scope.ShippingMethods).toBe ShippingMethods.shippingMethods + describe "removing logo", -> + deferred = null + + beforeEach inject ($q) -> + spyOn(scope, "$emit") + deferred = $q.defer() + spyOn(Enterprises, "removeLogo").and.returnValue(deferred.promise) + spyOn(StatusMessage, "display").and.callThrough() + scope.removeLogo() + + describe "when successful", -> + beforeEach inject ($rootScope) -> + deferred.resolve() + $rootScope.$digest() + + it "emits an 'enterprise:updated' event", -> + expect(scope.$emit).toHaveBeenCalledWith("enterprise:updated", scope.Enterprise) + + it "notifies user of success", -> + expect(StatusMessage.display).toHaveBeenCalledWith("success", "Logo removed successfully") + + describe "when unsuccessful", -> + beforeEach inject ($rootScope) -> + deferred.reject({ data: { error: "Logo does not exist" } }) + $rootScope.$digest() + + it "does not emit an 'enterprise:updated' event", -> + expect(scope.$emit).not.toHaveBeenCalled() + + it "notifies user of failure", -> + expect(StatusMessage.display).toHaveBeenCalledWith("failure", "Logo does not exist") + + describe "removing promo image", -> + deferred = null + + beforeEach inject ($q) -> + spyOn(scope, "$emit") + deferred = $q.defer() + spyOn(Enterprises, "removePromoImage").and.returnValue(deferred.promise) + spyOn(StatusMessage, "display").and.callThrough() + scope.removePromoImage() + + describe "when successful", -> + beforeEach inject ($rootScope) -> + deferred.resolve() + $rootScope.$digest() + + it "emits an 'enterprise:updated' event", -> + expect(scope.$emit).toHaveBeenCalledWith("enterprise:updated", scope.Enterprise) + + it "notifies user of success", -> + expect(StatusMessage.display).toHaveBeenCalledWith("success", "Promo image removed successfully") + + describe "when unsuccessful", -> + beforeEach inject ($rootScope) -> + deferred.reject({ data: { error: "Promo image does not exist" } }) + $rootScope.$digest() + + it "does not emit an 'enterprise:updated' event", -> + expect(scope.$emit).not.toHaveBeenCalled() + + it "notifies user of failure", -> + expect(StatusMessage.display).toHaveBeenCalledWith("failure", "Promo image does not exist") + describe "adding managers", -> u1 = u2 = u3 = null beforeEach -> diff --git a/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee b/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee index 85cf19f067..47c669e105 100644 --- a/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee +++ b/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee @@ -127,7 +127,7 @@ describe "Enterprises service", -> beforeEach -> enterprise = new EnterpriseResource({ id: 15, permalink: "enterprise1", name: "Enterprise 1", logo: {} }) - $httpBackend.expectDELETE("/admin/enterprises/enterprise1/images/remove_logo.json").respond 200, { id: 15, name: "Enterprise 1"} + $httpBackend.expectDELETE("/api/enterprises/enterprise1/logo.json").respond 200, { id: 15, name: "Enterprise 1"} Enterprises.removeLogo(enterprise).then( -> resolved = true) $httpBackend.flush() @@ -144,7 +144,7 @@ describe "Enterprises service", -> beforeEach -> enterprise = new EnterpriseResource( { id: 15, permalink: "enterprise1", name: "Enterprise 1" } ) - $httpBackend.expectDELETE("/admin/enterprises/enterprise1/images/remove_logo.json").respond 409, { error: "obj" } + $httpBackend.expectDELETE("/api/enterprises/enterprise1/logo.json").respond 409, { error: "obj" } Enterprises.removeLogo(enterprise).catch( -> rejected = true) $httpBackend.flush() @@ -162,7 +162,7 @@ describe "Enterprises service", -> beforeEach -> enterprise = new EnterpriseResource({ id: 15, permalink: "enterprise1", name: "Enterprise 1", promo_image: {} }) - $httpBackend.expectDELETE("/admin/enterprises/enterprise1/images/remove_promo_image.json").respond 200, { id: 15, name: "Enterprise 1"} + $httpBackend.expectDELETE("/api/enterprises/enterprise1/promo_image.json").respond 200, { id: 15, name: "Enterprise 1"} Enterprises.removePromoImage(enterprise).then( -> resolved = true) $httpBackend.flush() @@ -179,7 +179,7 @@ describe "Enterprises service", -> beforeEach -> enterprise = new EnterpriseResource( { id: 15, permalink: "enterprise1", name: "Enterprise 1" } ) - $httpBackend.expectDELETE("/admin/enterprises/enterprise1/images/remove_promo_image.json").respond 409, { error: "obj" } + $httpBackend.expectDELETE("/api/enterprises/enterprise1/promo_image.json").respond 409, { error: "obj" } Enterprises.removePromoImage(enterprise).catch( -> rejected = true) $httpBackend.flush()