From c9370672c6a38d8be7cf0ec7f3e9aeafb49d402b Mon Sep 17 00:00:00 2001 From: Kristina Lim Date: Sat, 28 Jul 2018 23:44:28 +0800 Subject: [PATCH] Add JS support for removal of enterprise images --- .../resources/enterprise_resource.js.coffee | 10 +++ .../resources/services/enterprises.js.coffee | 14 ++++ .../services/enterprises_spec.js.coffee | 70 +++++++++++++++++++ 3 files changed, 94 insertions(+) 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 7cdd5b7bce..25b72e1922 100644 --- a/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee +++ b/app/assets/javascripts/admin/resources/resources/enterprise_resource.js.coffee @@ -8,4 +8,14 @@ angular.module("admin.resources").factory 'EnterpriseResource', ($resource) -> isArray: true 'update': method: 'PUT' + 'removeLogo': + url: '/admin/enterprises/:id/images/:action.json' + method: 'DELETE' + params: + action: 'remove_logo' + 'removePromoImage': + url: '/admin/enterprises/:id/images/:action.json' + method: 'DELETE' + params: + action: 'remove_promo_image' }) diff --git a/app/assets/javascripts/admin/resources/services/enterprises.js.coffee b/app/assets/javascripts/admin/resources/services/enterprises.js.coffee index 0b7fa6e870..435cc88500 100644 --- a/app/assets/javascripts/admin/resources/services/enterprises.js.coffee +++ b/app/assets/javascripts/admin/resources/services/enterprises.js.coffee @@ -38,3 +38,17 @@ angular.module("admin.resources").factory 'Enterprises', ($q, EnterpriseResource resetAttribute: (enterprise, attribute) -> enterprise[attribute] = @pristineByID[enterprise.id][attribute] + + performActionOnEnterpriseResource = (resourceAction) -> + (enterprise) -> + deferred = $q.defer() + resourceAction({id: enterprise.permalink}, ((data) => + @pristineByID[enterprise.id] = angular.copy(data) + deferred.resolve(data) + ), ((response) -> + deferred.reject(response) + )) + deferred.promise + + removeLogo: performActionOnEnterpriseResource(EnterpriseResource.removeLogo) + removePromoImage: performActionOnEnterpriseResource(EnterpriseResource.removePromoImage) 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 8c088b1715..85cf19f067 100644 --- a/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee +++ b/spec/javascripts/unit/admin/enterprises/services/enterprises_spec.js.coffee @@ -118,3 +118,73 @@ describe "Enterprises service", -> it "resets the specified value according to the pristine record", -> Enterprises.resetAttribute(enterprise, "name") expect(enterprise.name).toEqual "enterprise1" + + describe "#removeLogo", -> + enterprise = null + + describe "success", -> + resolved = false + + 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"} + Enterprises.removeLogo(enterprise).then( -> resolved = true) + $httpBackend.flush() + + it "updates the pristine copy of the enterprise", -> + expect(Enterprises.pristineByID[15]).not.toBeUndefined() + expect(Enterprises.pristineByID[15]["id"]).toEqual(15) + expect(Enterprises.pristineByID[15]["logo"]).toBeUndefined() + + it "resolves the promise", -> + expect(resolved).toBe(true) + + describe "failure", -> + rejected = false + + beforeEach -> + enterprise = new EnterpriseResource( { id: 15, permalink: "enterprise1", name: "Enterprise 1" } ) + $httpBackend.expectDELETE("/admin/enterprises/enterprise1/images/remove_logo.json").respond 409, { error: "obj" } + Enterprises.removeLogo(enterprise).catch( -> rejected = true) + $httpBackend.flush() + + it "does not update the pristine copy of the enterprise", -> + expect(Enterprises.pristineByID[15]).toBeUndefined() + + it "rejects the promise", -> + expect(rejected).toBe(true) + + describe "#removePromoImage", -> + enterprise = null + + describe "success", -> + resolved = false + + 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"} + Enterprises.removePromoImage(enterprise).then( -> resolved = true) + $httpBackend.flush() + + it "updates the pristine copy of the enterprise", -> + expect(Enterprises.pristineByID[15]).not.toBeUndefined() + expect(Enterprises.pristineByID[15]["id"]).toEqual(15) + expect(Enterprises.pristineByID[15]["promo_image"]).toBeUndefined() + + it "resolves the promise", -> + expect(resolved).toBe(true) + + describe "failure", -> + rejected = false + + 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" } + Enterprises.removePromoImage(enterprise).catch( -> rejected = true) + $httpBackend.flush() + + it "does not update the pristine copy of the enterprise", -> + expect(Enterprises.pristineByID[15]).toBeUndefined() + + it "rejects the promise", -> + expect(rejected).toBe(true);