diff --git a/app/assets/javascripts/admin/index_utils/services/data_submitter.js.coffee b/app/assets/javascripts/admin/index_utils/services/data_submitter.js.coffee deleted file mode 100644 index 934ae4a07e..0000000000 --- a/app/assets/javascripts/admin/index_utils/services/data_submitter.js.coffee +++ /dev/null @@ -1,10 +0,0 @@ -angular.module("admin.indexUtils").factory "dataSubmitter", ($http, $q, resources) -> - return (change) -> - deferred = $q.defer() - resources.update(change).$promise.then (data) -> - change.scope.success() - deferred.resolve data - , -> - change.scope.error() - deferred.reject() - deferred.promise diff --git a/app/assets/javascripts/admin/index_utils/services/pending_changes.js.coffee b/app/assets/javascripts/admin/index_utils/services/pending_changes.js.coffee index 86a6b2821f..2f40a7faef 100644 --- a/app/assets/javascripts/admin/index_utils/services/pending_changes.js.coffee +++ b/app/assets/javascripts/admin/index_utils/services/pending_changes.js.coffee @@ -1,4 +1,4 @@ -angular.module("admin.indexUtils").factory "pendingChanges", (dataSubmitter) -> +angular.module("admin.indexUtils").factory "pendingChanges", (resources) -> new class pendingChanges pendingChanges: {} @@ -22,9 +22,12 @@ angular.module("admin.indexUtils").factory "pendingChanges", (dataSubmitter) -> all submit: (change) -> - dataSubmitter(change).then (data) => + resources.update(change).$promise.then (data) => @remove change.object.id, change.attr change.scope.reset( data["#{change.attr}"] ) + change.scope.success() + , (error) -> + change.scope.error() changeCount: (objectChanges) -> Object.keys(objectChanges).length diff --git a/spec/javascripts/unit/admin/index_utils/services/pending_changes_spec.js.coffee b/spec/javascripts/unit/admin/index_utils/services/pending_changes_spec.js.coffee index 2acf684754..31b85df217 100644 --- a/spec/javascripts/unit/admin/index_utils/services/pending_changes_spec.js.coffee +++ b/spec/javascripts/unit/admin/index_utils/services/pending_changes_spec.js.coffee @@ -1,13 +1,17 @@ describe "Pending Changes", -> - dataSubmitter = pendingChanges = null + resourcesMock = pendingChanges = null beforeEach -> - dataSubmitter = jasmine.createSpy('dataSubmitter').andReturn { - then: (thenFn) -> - thenFn({propertyName: "new_value"}) - } + + resourcesMock = + update: jasmine.createSpy('update').andCallFake (change) -> + $promise: + then: (successFn, errorFn) -> + return successFn({propertyName: "new_value"}) if change.success + errorFn("error") + module 'admin.indexUtils', ($provide) -> - $provide.value 'dataSubmitter', dataSubmitter + $provide.value 'resources', resourcesMock return inject (_pendingChanges_) -> @@ -77,24 +81,50 @@ describe "Pending Changes", -> change = null beforeEach -> object = {id: 1} - scope = { reset: jasmine.createSpy('reset') }; + scope = { reset: jasmine.createSpy('reset'), success: jasmine.createSpy('success'), error: jasmine.createSpy('error') }; attr = "propertyName" change = { object: object, scope: scope, attr: attr } + it "sends the correct object to dataSubmitter", -> pendingChanges.submit change - expect(dataSubmitter.calls.length).toEqual 1 - expect(dataSubmitter).toHaveBeenCalledWith change + expect(resourcesMock.update.calls.length).toEqual 1 + expect(resourcesMock.update).toHaveBeenCalledWith change - it "calls remove with id and attribute name", -> - spyOn(pendingChanges, "remove").andCallFake(->) - pendingChanges.submit change - expect(pendingChanges.remove.calls.length).toEqual 1 - expect(pendingChanges.remove).toHaveBeenCalledWith 1, "propertyName" + describe "successful request", -> + beforeEach -> + change.success = true - it "calls reset on the relevant scope", -> - pendingChanges.submit change - expect(change.scope.reset).toHaveBeenCalledWith "new_value" + it "calls remove with id and attribute name", -> + spyOn(pendingChanges, "remove").andCallFake(->) + pendingChanges.submit change + expect(pendingChanges.remove.calls.length).toEqual 1 + expect(pendingChanges.remove).toHaveBeenCalledWith 1, "propertyName" + + it "calls reset on the relevant scope", -> + pendingChanges.submit change + expect(change.scope.reset).toHaveBeenCalledWith "new_value" + + it "calls success on the relevant scope", -> + pendingChanges.submit change + expect(change.scope.success).toHaveBeenCalled() + + describe "unsuccessful request", -> + beforeEach -> + change.success = false + + it "does not call remove", -> + spyOn(pendingChanges, "remove").andCallFake(->) + pendingChanges.submit change + expect(pendingChanges.remove).not.toHaveBeenCalled() + + it "does not call reset on the relevant scope", -> + pendingChanges.submit change + expect(change.scope.reset).not.toHaveBeenCalled() + + it "calls error on the relevant scope", -> + pendingChanges.submit change + expect(change.scope.error).toHaveBeenCalled() describe "cycling through all changes to submit to server", -> it "sends the correct object to dataSubmitter", -> diff --git a/spec/javascripts/unit/bulk_order_management_spec.js.coffee b/spec/javascripts/unit/bulk_order_management_spec.js.coffee index 87f9903e05..abf0b93bd7 100644 --- a/spec/javascripts/unit/bulk_order_management_spec.js.coffee +++ b/spec/javascripts/unit/bulk_order_management_spec.js.coffee @@ -350,63 +350,6 @@ describe "AdminOrderMgmtCtrl", -> spyOn(VariantUnitManager, "getUnitName").andReturn "kg" expect(scope.formattedValueWithUnitName(2000,unitsVariant)).toEqual "2 kg" -describe "dataSubmitter service", -> - qMock = httpMock = {} - switchClassSpy = resolveSpy = rejectSpy = dataSubmitterService = null - - beforeEach -> - resolveSpy = jasmine.createSpy('resolve') - rejectSpy = jasmine.createSpy('reject') - qMock.defer = -> - resolve: resolveSpy - reject: rejectSpy - promise: "promise1" - - # Can't use httpBackend because the qMock interferes with it - httpMock.put = (url) -> - success: (successFn) -> - successFn("somedata") if url == "successURL" - error: (errorFn) -> - errorFn() if url == "errorURL" - - spyOn(httpMock, "put").andCallThrough() - spyOn(qMock, "defer").andCallThrough() - - switchClassSpy = jasmine.createSpy('switchClass') - - beforeEach -> - module "ofn.admin" , ($provide) -> - $provide.value '$q', qMock - $provide.value '$http', httpMock - $provide.value 'switchClass', switchClassSpy - return - - beforeEach inject (dataSubmitter) -> - dataSubmitterService = dataSubmitter - - it "returns a promise", -> - expect(dataSubmitterService( { url: "successURL" } )).toEqual "promise1" - expect(qMock.defer).toHaveBeenCalled() - - it "sends a PUT request with the url property of changeObj", -> - dataSubmitterService { url: "successURL" } - expect(httpMock.put).toHaveBeenCalledWith "successURL" - - it "calls resolve on deferred object when request is successful", -> - element = { a: 1 } - dataSubmitterService { url: "successURL", element: element } - expect(resolveSpy.calls.length).toEqual 1 - expect(rejectSpy.calls.length).toEqual 0 - expect(resolveSpy).toHaveBeenCalledWith "somedata" - expect(switchClassSpy).toHaveBeenCalledWith element, "update-success", ["update-pending", "update-error"], 3000 - - it "calls reject on deferred object when request is erroneous", -> - element = { b: 2 } - dataSubmitterService { url: "errorURL", element: element } - expect(resolveSpy.calls.length).toEqual 0 - expect(rejectSpy.calls.length).toEqual 1 - expect(switchClassSpy).toHaveBeenCalledWith element, "update-error", ["update-pending", "update-success"], false - describe "Auxiliary functions", -> describe "getting a zero filled two digit number", -> it "returns the number as a string if its value is greater than or equal to 10", ->