mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-23 08:46:07 +08:00
3d69ebbabb
Notifications now check to see the thread they are supposed to open exists. Also, clean up FocusedContentStore._onFocus so that it doesn't have the side effect of dispatching another action and messay logic. Instead, added Actions.ensureCategoryFocused, to focus any category, and which should be used separately from focusing content (notifications now use this action for "opening" the thread) Also, convert FocusedPerspectiveStore to ES6
135 lines
6.4 KiB
CoffeeScript
135 lines
6.4 KiB
CoffeeScript
_ = require 'underscore'
|
|
|
|
Actions = require '../../src/flux/actions'
|
|
Category = require '../../src/flux/models/category'
|
|
MailboxPerspective = require '../../src/mailbox-perspective'
|
|
|
|
CategoryStore = require '../../src/flux/stores/category-store'
|
|
AccountStore = require '../../src/flux/stores/account-store'
|
|
FocusedPerspectiveStore = require('../../src/flux/stores/focused-perspective-store').default
|
|
|
|
describe "FocusedPerspectiveStore", ->
|
|
beforeEach ->
|
|
spyOn(FocusedPerspectiveStore, 'trigger')
|
|
FocusedPerspectiveStore._current = MailboxPerspective.forNothing()
|
|
@account = AccountStore.accounts()[0]
|
|
|
|
@inboxCategory = new Category(id: 'id-123', name: 'inbox', displayName: "INBOX", accountId: @account.id)
|
|
@inboxPerspective = MailboxPerspective.forCategory(@inboxCategory)
|
|
@userCategory = new Category(id: 'id-456', name: null, displayName: "MyCategory", accountId: @account.id)
|
|
@userPerspective = MailboxPerspective.forCategory(@userCategory)
|
|
|
|
spyOn(CategoryStore, "getStandardCategory").andReturn @inboxCategory
|
|
spyOn(CategoryStore, "byId").andCallFake (aid, cid) =>
|
|
return {id: 'A'} if aid is 1 and cid is 'A'
|
|
return @inboxCategory if cid is @inboxCategory.id
|
|
return @userCategory if cid is @userCategory.id
|
|
return null
|
|
|
|
describe "_initializeFromSavedState", ->
|
|
beforeEach ->
|
|
@default = MailboxPerspective.forCategory(@inboxCategory)
|
|
spyOn(AccountStore, 'accountIds').andReturn([1, 2])
|
|
spyOn(MailboxPerspective, 'fromJSON').andCallFake (json) -> json
|
|
spyOn(FocusedPerspectiveStore, '_defaultPerspective').andReturn @default
|
|
spyOn(FocusedPerspectiveStore, '_setPerspective')
|
|
|
|
it "uses default perspective when no perspective has been saved", ->
|
|
NylasEnv.savedState.sidebarAccountIds = undefined
|
|
NylasEnv.savedState.perspective = undefined
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(@default, @default.accountIds)
|
|
|
|
it "uses default if the saved perspective has account ids no longer present", ->
|
|
NylasEnv.savedState.sidebarAccountIds = [1, 2, 3]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [1, 2, 3],
|
|
categories: => [{accountId: 1, id: 'A'}],
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(@default, @default.accountIds)
|
|
|
|
NylasEnv.savedState.sidebarAccountIds = [1, 2, 3]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [3]
|
|
categories: => [{accountId: 3, id: 'A'}]
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(@default, @default.accountIds)
|
|
|
|
it "uses default if the saved perspective has category ids no longer present", ->
|
|
NylasEnv.savedState.sidebarAccountIds = [2]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [2]
|
|
categories: => [{accountId: 2, id: 'C'}]
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(@default, @default.accountIds)
|
|
|
|
it "does not honor sidebarAccountIds if it includes account ids no longer present", ->
|
|
NylasEnv.savedState.sidebarAccountIds = [1, 2, 3]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [1]
|
|
categories: => [{accountId: 1, id: 'A'}]
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(NylasEnv.savedState.perspective, [1])
|
|
|
|
it "uses the saved perspective if it is still valid", ->
|
|
NylasEnv.savedState.sidebarAccountIds = [1, 2]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [1, 2]
|
|
categories: => [{accountId: 1, id: 'A'}]
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(NylasEnv.savedState.perspective, [1, 2])
|
|
|
|
NylasEnv.savedState.sidebarAccountIds = [1, 2]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [1]
|
|
categories: => []
|
|
type: 'DraftsMailboxPerspective'
|
|
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(NylasEnv.savedState.perspective, [1, 2])
|
|
|
|
NylasEnv.savedState.sidebarAccountIds = [1]
|
|
NylasEnv.savedState.perspective =
|
|
accountIds: [1]
|
|
categories: => []
|
|
type: 'DraftsMailboxPerspective'
|
|
|
|
FocusedPerspectiveStore._initializeFromSavedState()
|
|
expect(FocusedPerspectiveStore._setPerspective).toHaveBeenCalledWith(NylasEnv.savedState.perspective, [1])
|
|
|
|
describe "_onCategoryStoreChanged", ->
|
|
it "should try to initialize if the current perspective is `nothing`", ->
|
|
spyOn(FocusedPerspectiveStore, '_initializeFromSavedState')
|
|
|
|
FocusedPerspectiveStore._current = @inboxPerspective
|
|
FocusedPerspectiveStore._onCategoryStoreChanged()
|
|
expect(FocusedPerspectiveStore._initializeFromSavedState).not.toHaveBeenCalled()
|
|
|
|
FocusedPerspectiveStore._current = MailboxPerspective.forNothing()
|
|
FocusedPerspectiveStore._onCategoryStoreChanged()
|
|
expect(FocusedPerspectiveStore._initializeFromSavedState).toHaveBeenCalled()
|
|
|
|
it "should set the current category to default when the current category no longer exists in the CategoryStore", ->
|
|
defaultPerspective = @inboxPerspective
|
|
spyOn(FocusedPerspectiveStore, '_defaultPerspective').andReturn(defaultPerspective)
|
|
|
|
otherAccountInbox = @inboxCategory.clone()
|
|
otherAccountInbox.serverId = 'other-id'
|
|
FocusedPerspectiveStore._current = MailboxPerspective.forCategory(otherAccountInbox)
|
|
|
|
FocusedPerspectiveStore._onCategoryStoreChanged()
|
|
expect(FocusedPerspectiveStore.current()).toEqual(defaultPerspective)
|
|
|
|
describe "_onFocusPerspective", ->
|
|
it "should focus the category and trigger", ->
|
|
FocusedPerspectiveStore._onFocusPerspective(@userPerspective)
|
|
expect(FocusedPerspectiveStore.trigger).toHaveBeenCalled()
|
|
expect(FocusedPerspectiveStore.current().categories()).toEqual([@userCategory])
|
|
|
|
describe "_setPerspective", ->
|
|
it "should not trigger if the perspective is already focused", ->
|
|
FocusedPerspectiveStore._setPerspective(@inboxPerspective)
|
|
FocusedPerspectiveStore.trigger.reset()
|
|
FocusedPerspectiveStore._setPerspective(@inboxPerspective)
|
|
expect(FocusedPerspectiveStore.trigger).not.toHaveBeenCalled()
|