fix(change-mail-task): Ignore 404s when changing mail so that we don't attempt to roll back and re-create purged objects + spec

This commit is contained in:
Ben Gotow 2015-08-26 11:54:03 -07:00
parent 75d92ad35a
commit be6c5b1d11
3 changed files with 28 additions and 4 deletions

View file

@ -287,6 +287,23 @@ describe "ChangeMailTask", ->
advanceClock()
expect(resolved).toBe(true)
it "should carry on and resolve if a request 404s, since the NylasAPI manager will clean the object from the cache", ->
promises = []
spyOn(NylasAPI, 'makeRequest').andCallFake ->
new Promise (resolve, reject) -> promises.push({resolve, reject})
resolved = false
runs ->
@task.performRequests(Thread, [@threadA, @threadB]).then =>
resolved = true
waitsFor ->
NylasAPI.makeRequest.callCount is 2
runs ->
promises[0].resolve()
promises[1].reject(new APIError(statusCode: 404))
advanceClock()
expect(resolved).toBe(true)
it "should reject with the request error encountered by any request", ->
promises = []
spyOn(NylasAPI, 'makeRequest').andCallFake ->
@ -309,7 +326,8 @@ describe "ChangeMailTask", ->
expect(err).toBe(apiError)
it "should use /threads when the klass provided is Thread", ->
spyOn(NylasAPI, 'makeRequest')
spyOn(NylasAPI, 'makeRequest').andCallFake ->
new Promise (resolve, reject) -> #noop
runs ->
@task.performRequests(Thread, [@threadA, @threadB])
waitsFor ->
@ -320,7 +338,8 @@ describe "ChangeMailTask", ->
expect(NylasAPI.makeRequest.calls[0].args[0].accountId).toBe(@threadA.accountId)
it "should use /messages when the klass provided is Message", ->
spyOn(NylasAPI, 'makeRequest')
spyOn(NylasAPI, 'makeRequest').andCallFake ->
new Promise (resolve, reject) -> #noop
runs ->
@task.performRequests(Message, [@threadAMesage1])
waitsFor ->
@ -331,7 +350,8 @@ describe "ChangeMailTask", ->
expect(NylasAPI.makeRequest.calls[0].args[0].accountId).toBe(@threadAMesage1.accountId)
it "should decrement change counts as requests complete", ->
spyOn(NylasAPI, 'makeRequest')
spyOn(NylasAPI, 'makeRequest').andCallFake ->
new Promise (resolve, reject) -> #noop
spyOn(@task, '_removeLock')
runs ->
@task.performRequests(Message, [@threadAMesage1])

View file

@ -322,7 +322,7 @@ class NylasAPI
{create, modify, destroy}
_handleDeltaDeletion: (delta) ->
_handleDeltaDeletion: (delta) =>
klass = @_apiObjectToClassMap[delta.object]
return unless klass
DatabaseStore.find(klass, delta.id).then (model) ->

View file

@ -148,6 +148,10 @@ class ChangeMailTask extends Task
beforeProcessing: (body) =>
@_removeLock(model)
body
.catch (err) =>
if err instanceof APIError and err.statusCode is 404
return Promise.resolve()
Promise.reject(err)
# Task lifecycle