fix(tasks) ChangeMailTask should depend on EnsureMessagesInSentFolder

Summary:
See title
Add specs

Test Plan: unit

Reviewers: halla, evan

Reviewed By: halla, evan

Differential Revision: https://phab.nylas.com/D3805
This commit is contained in:
Juan Tejada 2017-01-27 14:02:28 -08:00
parent bf69357c01
commit 82b3033861
3 changed files with 36 additions and 2 deletions

View file

@ -12,7 +12,9 @@ _ = require 'underscore'
DatabaseTransaction,
Task,
Utils,
ChangeMailTask} = require 'nylas-exports'
ChangeMailTask,
EnsureMessageInSentFolderTask,
} = require 'nylas-exports'
xdescribe "ChangeMailTask", ->
beforeEach ->
@ -552,6 +554,26 @@ xdescribe "ChangeMailTask", ->
expect( -> task.createUndoTask()).toThrow()
describe "isDependentOnTask", ->
it "should return true if another EnsureMessageInSentFolderTask involves one of the ChangeMailTask's threads", ->
a = new ChangeMailTask()
a.threads = ['t1', 't2', 't3']
s1 = new EnsureMessageInSentFolderTask({message: {threadId: 't1'}})
s2 = new EnsureMessageInSentFolderTask({message: {threadId: 't100'}})
expect(a.isDependentOnTask(s1)).toEqual(true)
expect(a.isDependentOnTask(s2)).toEqual(false)
it "should return true if another EnsureMessageInSentFolderTask involves one of the ChangeMailTask's messages", ->
a = new ChangeMailTask()
a.messages = ['m1', 'm2', 'm3']
s1 = new EnsureMessageInSentFolderTask({message: {clientId: 'm1'}})
s2 = new EnsureMessageInSentFolderTask({message: {serverId: 'm1'}})
s3 = new EnsureMessageInSentFolderTask({message: {clientId: 'm100'}})
s4 = new EnsureMessageInSentFolderTask({message: {serverId: 'm100'}})
expect(a.isDependentOnTask(s1)).toEqual(true)
expect(a.isDependentOnTask(s2)).toEqual(true)
expect(a.isDependentOnTask(s3)).toEqual(false)
expect(a.isDependentOnTask(s4)).toEqual(false)
it "should return true if another, older ChangeMailTask involves the same threads", ->
a = new ChangeMailTask()
a.threads = ['t1', 't2', 't3']

2
src/K2

@ -1 +1 @@
Subproject commit a3a962c55814823336f3b744d0fc7d2e34b9bea3
Subproject commit 76664cb67df7d17d9ddeb79f899195b4bf808976

View file

@ -6,6 +6,7 @@ import NylasAPI from '../nylas-api';
import SyncbackTaskAPIRequest from '../syncback-task-api-request';
import DatabaseStore from '../stores/database-store';
import {APIError} from '../errors';
import EnsureMessageInSentFolderTask from './ensure-message-in-sent-folder-task'
/*
Public: The ChangeMailTask is a base class for all tasks that modify sets
@ -307,6 +308,17 @@ export default class ChangeMailTask extends Task {
// and removals need to be applied in order. (For example, star many threads,
// and then unstar one.)
isDependentOnTask(other) {
// Wait on EnsureMessageInSentFolderTask if it involves a message that
// belongs to a thread we are trying to operate on
if (other instanceof EnsureMessageInSentFolderTask && other.message) {
const objectIds = this.objectIds()
if (objectIds.includes(other.message.threadId)) {
return true;
}
if (objectIds.includes(other.message.clientId) || objectIds.includes(other.message.serverId)) {
return true;
}
}
// Only wait on other tasks that are older and also involve the same threads
if (!(other instanceof ChangeMailTask)) {
return false;