Skip to content

Commit

Permalink
fix(tasks) ChangeMailTask should depend on EnsureMessagesInSentFolder
Browse files Browse the repository at this point in the history
Summary:
See title
Add specs

Test Plan: unit

Reviewers: halla, evan

Reviewed By: halla, evan

Differential Revision: https://phab.nylas.com/D3805
  • Loading branch information
jstejada committed Jan 27, 2017
1 parent bf69357 commit 82b3033
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 2 deletions.
24 changes: 23 additions & 1 deletion spec/tasks/change-mail-task-spec.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ _ = require 'underscore'
DatabaseTransaction,
Task,
Utils,
ChangeMailTask} = require 'nylas-exports'
ChangeMailTask,
EnsureMessageInSentFolderTask,
} = require 'nylas-exports'

xdescribe "ChangeMailTask", ->
beforeEach ->
Expand Down Expand Up @@ -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']
Expand Down
2 changes: 1 addition & 1 deletion src/K2
Submodule K2 updated from a3a962 to 76664c
12 changes: 12 additions & 0 deletions src/flux/tasks/change-mail-task.es6
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 82b3033

Please sign in to comment.