mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-11 02:30:21 +08:00
60ce0b53ba
Summary: after refactoring some things last week and spending time futsing with coffeescript, I’m pretty convinced it’s worth moving important parts of the app to ES6 to be able to use ESLint as part of our dev workflow Test Plan: Run existing tests, tested manually. Did not convert the tests in this diff, breaking one part at a time! Reviewers: evan, juan Reviewed By: juan Differential Revision: https://phab.nylas.com/D2768
152 lines
6 KiB
CoffeeScript
152 lines
6 KiB
CoffeeScript
_ = require 'underscore'
|
|
Folder = require '../../src/flux/models/folder'
|
|
Thread = require '../../src/flux/models/thread'
|
|
Message = require '../../src/flux/models/message'
|
|
Actions = require '../../src/flux/actions'
|
|
NylasAPI = require '../../src/flux/nylas-api'
|
|
Query = require '../../src/flux/models/query'
|
|
DatabaseStore = require '../../src/flux/stores/database-store'
|
|
ChangeFolderTask = require '../../src/flux/tasks/change-folder-task'
|
|
ChangeMailTask = require '../../src/flux/tasks/change-mail-task'
|
|
|
|
{APIError} = require '../../src/flux/errors'
|
|
{Utils} = require '../../src/flux/models/utils'
|
|
|
|
testFolders = {}
|
|
testThreads = {}
|
|
testMessages = {}
|
|
|
|
describe "ChangeFolderTask", ->
|
|
beforeEach ->
|
|
# IMPORTANT: These specs do not run the performLocal logic of their superclass!
|
|
# Tests for that logic are in change-mail-task-spec.
|
|
spyOn(ChangeMailTask.prototype, 'performLocal').andCallFake =>
|
|
Promise.resolve()
|
|
|
|
spyOn(DatabaseStore, 'modelify').andCallFake (klass, items) =>
|
|
Promise.resolve items.map (item) =>
|
|
return testFolders[item] if testFolders[item]
|
|
return testThreads[item] if testThreads[item]
|
|
return testMessages[item] if testMessages[item]
|
|
item
|
|
|
|
testFolders = @testFolders =
|
|
"f1": new Folder({name: 'inbox', id: 'f1', displayName: "INBOX"}),
|
|
"f2": new Folder({name: 'drafts', id: 'f2', displayName: "MyDrafts"})
|
|
"f3": new Folder({name: null, id: 'f3', displayName: "My Folder"})
|
|
|
|
testThreads = @testThreads =
|
|
't1': new Thread(id: 't1', categories: [@testFolders['f1']])
|
|
't2': new Thread(id: 't2', categories: _.values(@testFolders))
|
|
't3': new Thread(id: 't3', categories: [@testFolders['f2'], @testFolders['f3']])
|
|
|
|
testMessages = @testMessages =
|
|
'm1': new Message(id: 'm1', folder: @testFolders['f1'])
|
|
'm2': new Message(id: 'm2', folder: @testFolders['f2'])
|
|
'm3': new Message(id: 'm3', folder: @testFolders['f3'])
|
|
|
|
describe "description", ->
|
|
it "should include the folder name if folder is a folder", ->
|
|
taskWithFolderId = new ChangeFolderTask
|
|
folder: 'f2'
|
|
messages: ['m1']
|
|
expect(taskWithFolderId.description()).toEqual("Moved 1 message")
|
|
taskWithFolder = new ChangeFolderTask
|
|
folder: @testFolders['f2']
|
|
messages: ['m1']
|
|
expect(taskWithFolder.description()).toEqual("Moved 1 message to MyDrafts")
|
|
|
|
it "should correctly mention threads and messages", ->
|
|
taskWithFolderId = new ChangeFolderTask
|
|
folder: 'f2'
|
|
threads: ['t1']
|
|
expect(taskWithFolderId.description()).toEqual("Moved 1 thread")
|
|
taskWithFolder = new ChangeFolderTask
|
|
folder: @testFolders['f2']
|
|
messages: ['m1']
|
|
expect(taskWithFolder.description()).toEqual("Moved 1 message to MyDrafts")
|
|
|
|
describe "performLocal", ->
|
|
it "should check that a single folder is provided, and that we have threads or messages", ->
|
|
badTasks = [
|
|
new ChangeFolderTask(),
|
|
new ChangeFolderTask(threads: [123]),
|
|
new ChangeFolderTask(threads: [123], messages: ["foo"]),
|
|
new ChangeFolderTask(threads: "Thread"),
|
|
]
|
|
goodTasks = [
|
|
new ChangeFolderTask(
|
|
folder: 'f2'
|
|
threads: ['t1', 't2']
|
|
)
|
|
new ChangeFolderTask(
|
|
folder: @testFolders['f2']
|
|
messages: ['m1']
|
|
)
|
|
]
|
|
caught = []
|
|
succeeded = []
|
|
|
|
runs ->
|
|
[].concat(badTasks, goodTasks).forEach (task) ->
|
|
task.performLocal()
|
|
.then -> succeeded.push(task)
|
|
.catch (err) -> caught.push(task)
|
|
waitsFor ->
|
|
succeeded.length + caught.length == 6
|
|
runs ->
|
|
expect(caught.length).toEqual(badTasks.length)
|
|
expect(succeeded.length).toEqual(goodTasks.length)
|
|
|
|
it 'calls through to super performLocal', ->
|
|
task = new ChangeFolderTask
|
|
folder: "f1"
|
|
threads: ['t1']
|
|
waitsForPromise =>
|
|
task.performLocal().then =>
|
|
expect(task.__proto__.__proto__.performLocal).toHaveBeenCalled()
|
|
|
|
describe "when object IDs are provided", ->
|
|
beforeEach ->
|
|
@task = new ChangeFolderTask(folder: "f1", threads: ['t1'])
|
|
|
|
it 'resolves the objects before calling super', ->
|
|
waitsForPromise =>
|
|
@task.performLocal().then =>
|
|
expect(@task.folder).toEqual(testFolders['f1'])
|
|
expect(@task.threads).toEqual([testThreads['t1']])
|
|
|
|
describe "when objects are provided", ->
|
|
beforeEach ->
|
|
@task = new ChangeFolderTask(folder: testFolders['f1'], threads: [testThreads['t1'], testThreads['t2']])
|
|
|
|
it 'still has the objects when calling super', ->
|
|
waitsForPromise =>
|
|
@task.performLocal().then =>
|
|
expect(@task.folder).toEqual(testFolders['f1'])
|
|
expect(@task.threads).toEqual([testThreads['t1'],testThreads['t2']])
|
|
|
|
describe "change methods", ->
|
|
beforeEach ->
|
|
@message = testMessages['m1']
|
|
@thread = testThreads['t1']
|
|
@task = new ChangeFolderTask(folder: testFolders['f1'], threads: [testThreads['t1'], testThreads['t2']])
|
|
|
|
describe "changesToModel", ->
|
|
describe "if the model is a Thread", ->
|
|
it "returns an object with a categories key, and an array with the folder", ->
|
|
expect(@task.changesToModel(@thread)).toEqual({categories: [testFolders['f1']]})
|
|
|
|
describe "if the model is a Message", ->
|
|
it "returns an object with a categories key, and the folder", ->
|
|
expect(@task.changesToModel(@message)).toEqual({categories: [testFolders['f1']]})
|
|
|
|
describe "requestBodyForModel", ->
|
|
describe "if the model is a Thread", ->
|
|
it "returns folder: <id>, using the first available folder", ->
|
|
@thread.folders = []
|
|
expect(@task.requestBodyForModel(@thread)).toEqual(folder: null)
|
|
@thread.folders = [testFolders['f1']]
|
|
expect(@task.requestBodyForModel(@thread)).toEqual(folder: 'f1')
|
|
@thread.folders = [testFolders['f2'], testFolders['f1']]
|
|
expect(@task.requestBodyForModel(@thread)).toEqual(folder: 'f2')
|