Mailspring/internal_packages/category-picker/spec/category-picker-spec.cjsx
Evan Morikawa 51602f69a5 refactor(env): new NylasEnv global
Converted all references of global atom to NylasEnv

Temporary rename atom.io

find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.io/temporaryAtomIoReplacement/g'

atom.config to NylasEnv.config

find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.config/NylasEnv.config/g'

atom.packages -> NylasEnv.packages

atom.commands -> NylasEnv.commands atom.getLoadSettings

find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.commands/NylasEnv.commands/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.getLoadSettings/NylasEnv.getLoadSettings/g'

More common atom methods

find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.styles/NylasEnv.styles/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.emitError/NylasEnv.emitError/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.inSpecMode/NylasEnv.inSpecMode/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.inDevMode/NylasEnv.inDevMode/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.getWindowType/NylasEnv.getWindowType/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.displayWindow/NylasEnv.displayWindow/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.quit/NylasEnv.quit/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.close/NylasEnv.close/g'

More atom method changes

find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.keymaps/NylasEnv.keymaps/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.hide/NylasEnv.hide/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.getCurrentWindow/NylasEnv.getCurrentWindow/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.menu/NylasEnv.menu/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.getConfigDirPath/NylasEnv.getConfigDirPath/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.isMainWindow/NylasEnv.isMainWindow/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.finishUnload/NylasEnv.finishUnload/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.isWorkWindow/NylasEnv.isWorkWindow/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.showSaveDialog/NylasEnv.showSaveDialog/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.append/NylasEnv.append/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.confirm/NylasEnv.confirm/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.clipboard/NylasEnv.clipboard/g'
find -E . -regex ".*\.(coffee|cjsx|js|md|cmd|es6)" -print0 | xargs -0 sed
-i "" 's/atom.getVersion/NylasEnv.getVersion/g'

More atom renaming

Rename atom methods

More atom methods

Fix grunt config variable

Change atom.cmd to N1.cmd

Rename atom.coffee and atom.js to nylas-env.coffee nylas-env.js

Fix atom global reference in specs manually

Fix atom requires

Change engine from atom to nylas

got rid of global/nylas-env

rename to nylas-win-bootup

Fix onWindowPropsChanged to onWindowPropsReceived

fix nylas-workspace

atom-text-editor to nylas-theme-wrap

atom-text-editor -> nylas-theme-wrap

Replacing atom keyword

AtomWindow -> NylasWindow

Replace Atom -> N1

Rename atom items

nylas.asar -> atom.asar

Remove more atom references

Remove 6to5 references

Remove license exception for atom
2015-11-17 16:41:20 -08:00

193 lines
7 KiB
CoffeeScript

_ = require 'underscore'
React = require "react/addons"
ReactTestUtils = React.addons.TestUtils
CategoryPicker = require '../lib/category-picker'
{Popover} = require 'nylas-component-kit'
{Utils,
Label,
Folder,
Thread,
Actions,
AccountStore,
CategoryStore,
DatabaseStore,
TaskFactory,
SyncbackCategoryTask,
FocusedMailViewStore,
TaskQueueStatusStore} = require 'nylas-exports'
describe 'CategoryPicker', ->
beforeEach ->
CategoryStore._categoryCache = {}
afterEach ->
NylasEnv.testOrganizationUnit = null
setupFor = (organizationUnit) ->
NylasEnv.testOrganizationUnit = organizationUnit
@categoryClass = if organizationUnit is "label" then Label else Folder
@inboxCategory = new @categoryClass(id: 'id-123', name: 'inbox', displayName: "INBOX")
@archiveCategory = new @categoryClass(id: 'id-456', name: 'archive', displayName: "ArCHIVe")
@userCategory = new @categoryClass(id: 'id-789', name: null, displayName: "MyCategory")
spyOn(CategoryStore, "getStandardCategories").andReturn [ @inboxCategory, @archiveCategory ]
spyOn(CategoryStore, "getUserCategories").andReturn [ @userCategory ]
spyOn(CategoryStore, "getStandardCategory").andReturn @inboxCategory
# By default we're going to set to "inbox". This has implications for
# what categories get filtered out of the list.
f = FocusedMailViewStore
f._setMailView f._defaultMailView()
setupForCreateNew = (orgUnit = "folder") ->
setupFor.call(@, orgUnit)
@testThread = new Thread(id: 't1', subject: "fake")
@picker = ReactTestUtils.renderIntoDocument(
<CategoryPicker thread={@testThread} />
)
@popover = ReactTestUtils.findRenderedComponentWithType @picker, Popover
@popover.open()
describe 'when using labels', ->
beforeEach ->
setupFor.call(@, "label")
describe 'when using folders', ->
beforeEach ->
setupFor.call(@, "folder")
@testThread = new Thread(id: 't1', subject: "fake")
@picker = ReactTestUtils.renderIntoDocument(
<CategoryPicker thread={@testThread} />
)
it 'lists the desired categories', ->
data = @picker.state.categoryData
# NOTE: The inbox category is not included here because it's the
# currently focused category, which gets filtered out of the list.
expect(data[0].id).toBe "id-456"
expect(data[0].name).toBe "archive"
expect(data[0].category).toBe @archiveCategory
expect(data[1].divider).toBe true
expect(data[1].id).toBe "category-divider"
expect(data[2].id).toBe "id-789"
expect(data[2].name).toBeUndefined()
expect(data[2].category).toBe @userCategory
describe "'create new' item", ->
beforeEach ->
setupForCreateNew.call @
afterEach -> NylasEnv.testOrganizationUnit = null
it "is not visible when the search box is empty", ->
count = ReactTestUtils.scryRenderedDOMComponentsWithClass(@picker, 'category-create-new').length
expect(count).toBe 0
it "is visible when the search box has text", ->
inputNode = React.findDOMNode(ReactTestUtils.scryRenderedDOMComponentsWithTag(@picker, "input")[0])
ReactTestUtils.Simulate.change inputNode, target: { value: "calendar" }
count = ReactTestUtils.scryRenderedDOMComponentsWithClass(@picker, 'category-create-new').length
expect(count).toBe 1
it "shows folder icon if we're using exchange", ->
inputNode = React.findDOMNode(ReactTestUtils.scryRenderedDOMComponentsWithTag(@picker, "input")[0])
ReactTestUtils.Simulate.change inputNode, target: { value: "calendar" }
count = ReactTestUtils.scryRenderedDOMComponentsWithClass(@picker, 'category-create-new-folder').length
expect(count).toBe 1
describe "'create new' item with labels", ->
beforeEach ->
setupForCreateNew.call @, "label"
it "shows label icon if we're using gmail", ->
inputNode = React.findDOMNode(ReactTestUtils.scryRenderedDOMComponentsWithTag(@picker, "input")[0])
ReactTestUtils.Simulate.change inputNode, target: { value: "calendar" }
count = ReactTestUtils.scryRenderedDOMComponentsWithClass(@picker, 'category-create-new-tag').length
expect(count).toBe 1
describe "_onSelectCategory()", ->
beforeEach ->
setupForCreateNew.call @, "folder"
spyOn(TaskFactory, 'taskForRemovingCategory').andCallThrough()
spyOn(TaskFactory, 'taskForApplyingCategory').andCallThrough()
spyOn(Actions, "queueTask")
it "closes the popover", ->
spyOn(@popover, "close")
@picker._onSelectCategory { usage: 0, category: "asdf" }
expect(@popover.close).toHaveBeenCalled()
describe "when selecting a category currently on all the selected items", ->
it "fires a task to remove the category", ->
input =
category: "asdf"
usage: 1
@picker._onSelectCategory(input)
expect(TaskFactory.taskForRemovingCategory).toHaveBeenCalledWith
threads: [@testThread]
category: "asdf"
expect(Actions.queueTask).toHaveBeenCalled()
describe "when selecting a category not on all the selected items", ->
it "fires a task to add the category", ->
input =
category: "asdf"
usage: 0
@picker._onSelectCategory(input)
expect(TaskFactory.taskForApplyingCategory).toHaveBeenCalledWith
threads: [@testThread]
category: "asdf"
expect(Actions.queueTask).toHaveBeenCalled()
describe "when selecting a new category", ->
beforeEach ->
@input =
newCategoryItem: true
@picker.setState(searchValue: "teSTing!")
it "queues a new syncback task for creating a category", ->
@picker._onSelectCategory(@input)
expect(Actions.queueTask).toHaveBeenCalled()
syncbackTask = Actions.queueTask.calls[0].args[0]
newCategory = syncbackTask.category
expect(newCategory instanceof @categoryClass).toBe(true)
expect(newCategory.displayName).toBe "teSTing!"
expect(newCategory.accountId).toBe TEST_ACCOUNT_ID
it "queues a task for applying the category after it has saved", ->
category = false
resolveSave = false
spyOn(TaskQueueStatusStore, "waitForPerformRemote").andCallFake (task) ->
expect(task instanceof SyncbackCategoryTask).toBe true
new Promise (resolve, reject) ->
resolveSave = resolve
spyOn(DatabaseStore, "findBy").andCallFake (klass, {clientId}) ->
expect(klass).toBe(Folder)
expect(typeof clientId).toBe("string")
Promise.resolve(category)
@picker._onSelectCategory(@input)
waitsFor ->
Actions.queueTask.callCount > 0
runs ->
category = Actions.queueTask.calls[0].args[0].category
resolveSave()
waitsFor ->
TaskFactory.taskForApplyingCategory.calls.length is 1
runs ->
expect(TaskFactory.taskForApplyingCategory).toHaveBeenCalledWith
threads: [@testThread]
category: category