mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-12-29 11:52:34 +08:00
add(specs): Add specs for MailboxPerspective
- Renames canApplyToThreads -> canReceiveThreads and applyToThreads -> receiveThreads - Add initial specs and better documentation for MailboxPerspective.canReceiveThreads.
This commit is contained in:
parent
79c103ae15
commit
f00f7c56f8
3 changed files with 84 additions and 15 deletions
|
@ -74,7 +74,7 @@ class SidebarItem
|
|||
jsonString = event.dataTransfer.getData(item.dataTransferType)
|
||||
data = Utils.jsonParse(jsonString)
|
||||
return unless data
|
||||
item.perspective.applyToThreads(data.threadIds)
|
||||
item.perspective.receiveThreads(data.threadIds)
|
||||
shouldAcceptDrop: (item, event) ->
|
||||
target = item.perspective
|
||||
current = FocusedPerspectiveStore.current()
|
||||
|
@ -83,7 +83,7 @@ class SidebarItem
|
|||
return false unless data
|
||||
return false unless target
|
||||
return false if target.isEqual(current)
|
||||
return false unless target.canApplyToThreads(data.accountIds)
|
||||
return false unless target.canReceiveThreads(data.accountIds)
|
||||
|
||||
return item.dataTransferType in event.dataTransfer.types
|
||||
|
||||
|
|
50
spec/mailbox-perspective-spec.coffee
Normal file
50
spec/mailbox-perspective-spec.coffee
Normal file
|
@ -0,0 +1,50 @@
|
|||
{AccountStore, MailboxPerspective, Category} = require 'nylas-exports'
|
||||
|
||||
|
||||
describe 'MailboxPerspective', ->
|
||||
beforeEach ->
|
||||
spyOn(AccountStore, 'accountForId').andReturn {categoryIcon: -> 'icon'}
|
||||
@accountIds = ['a1', 'a2', 'a3']
|
||||
@perspective = new MailboxPerspective(@accountIds)
|
||||
|
||||
describe 'isEqual', ->
|
||||
# TODO
|
||||
|
||||
describe 'canReceiveThreads', ->
|
||||
|
||||
it 'returns true if the thread account ids are included in the current account ids', ->
|
||||
expect(@perspective.canReceiveThreads(['a1'])).toBe true
|
||||
|
||||
it 'returns false otherwise', ->
|
||||
expect(@perspective.canReceiveThreads(['a4'])).toBe false
|
||||
expect(@perspective.canReceiveThreads([])).toBe false
|
||||
expect(@perspective.canReceiveThreads()).toBe false
|
||||
|
||||
describe 'CategoriesMailboxPerspective', ->
|
||||
beforeEach ->
|
||||
@accountIds = ['a1', 'a2']
|
||||
@categories = [
|
||||
new Category(displayName: 'c1', accountId: 'a1')
|
||||
new Category(displayName: 'c2', accountId: 'a2')
|
||||
new Category(displayName: 'c3', accountId: 'a2')
|
||||
]
|
||||
@perspective = MailboxPerspective.forCategories(@categories)
|
||||
|
||||
describe 'canReceiveThreads', ->
|
||||
|
||||
it 'returns true if the thread account ids are included in the current account ids', ->
|
||||
expect(@perspective.canReceiveThreads(['a2'])).toBe true
|
||||
|
||||
it 'returns false otherwise', ->
|
||||
expect(@perspective.canReceiveThreads(['a4'])).toBe false
|
||||
expect(@perspective.canReceiveThreads([])).toBe false
|
||||
expect(@perspective.canReceiveThreads()).toBe false
|
||||
|
||||
it 'returns false if it is not a locked category', ->
|
||||
@perspective._categories.push(
|
||||
new Category(name: 'sent', displayName: 'c4', accountId: 'a1')
|
||||
)
|
||||
expect(@perspective.canReceiveThreads(['a2'])).toBe false
|
||||
|
||||
describe 'receiveThreads', ->
|
||||
# TODO
|
|
@ -73,12 +73,28 @@ class MailboxPerspective
|
|||
threadUnreadCount: =>
|
||||
0
|
||||
|
||||
canApplyToThreads: (targetAccountIds) =>
|
||||
targetIdsInCurrent = _.difference(targetAccountIds, @accountIds).length is 0
|
||||
return targetIdsInCurrent
|
||||
# Public:
|
||||
# - accountIds {Array} Array of unique account ids associated with the threads
|
||||
# that want to be included in this perspective
|
||||
#
|
||||
# Returns true if the accountIds are part of the current ids, or false
|
||||
# otherwise. This means that it checks if I am moving trying to move threads
|
||||
# betwee the same set of accounts:
|
||||
#
|
||||
# E.g.:
|
||||
# perpective = Starred for accountIds: a1, a2
|
||||
# thread1 has accountId a3
|
||||
# thread2 has accountId a2
|
||||
#
|
||||
# perspective.canReceiveThreads([a2, a3]) -> false -> I cant move those threads to Starred
|
||||
# perspective.canReceiveThreads([a2]) -> true -> I can move that thread to # Starred
|
||||
canReceiveThreads: (accountIds) =>
|
||||
return false unless accountIds and accountIds.length > 0
|
||||
incomingIdsInCurrent = _.difference(accountIds, @accountIds).length is 0
|
||||
return incomingIdsInCurrent
|
||||
|
||||
applyToThreads: (threadsOrIds) =>
|
||||
throw new Error("applyToThreads: Not implemented in base class.")
|
||||
receiveThreads: (threadsOrIds) =>
|
||||
throw new Error("receiveThreads: Not implemented in base class.")
|
||||
|
||||
# Whether or not the current MailboxPerspective can "archive" or "trash"
|
||||
# Subclasses should call `super` if they override these methods
|
||||
|
@ -110,7 +126,7 @@ class SearchMailboxPerspective extends MailboxPerspective
|
|||
threads: =>
|
||||
new SearchSubscription(@searchQuery, @accountIds)
|
||||
|
||||
canApplyToThreads: =>
|
||||
canReceiveThreads: =>
|
||||
false
|
||||
|
||||
canArchiveThreads: =>
|
||||
|
@ -131,7 +147,7 @@ class DraftsMailboxPerspective extends MailboxPerspective
|
|||
threads: =>
|
||||
null
|
||||
|
||||
canApplyToThreads: =>
|
||||
canReceiveThreads: =>
|
||||
false
|
||||
|
||||
class StarredMailboxPerspective extends MailboxPerspective
|
||||
|
@ -149,10 +165,10 @@ class StarredMailboxPerspective extends MailboxPerspective
|
|||
|
||||
return new MutableQuerySubscription(query, {asResultSet: true})
|
||||
|
||||
canApplyToThreads: =>
|
||||
canReceiveThreads: =>
|
||||
super
|
||||
|
||||
applyToThreads: (threadsOrIds) =>
|
||||
receiveThreads: (threadsOrIds) =>
|
||||
ChangeStarredTask = require './flux/tasks/change-starred-task'
|
||||
task = new ChangeStarredTask({threads:threadsOrIds, starred: true})
|
||||
Actions.queueTask(task)
|
||||
|
@ -166,7 +182,7 @@ class EmptyMailboxPerspective extends MailboxPerspective
|
|||
query = DatabaseStore.findAll(Thread).where(accountId: -1).limit(0)
|
||||
return new MutableQuerySubscription(query, {asResultSet: true})
|
||||
|
||||
canApplyToThreads: =>
|
||||
canReceiveThreads: =>
|
||||
false
|
||||
|
||||
canArchiveThreads: =>
|
||||
|
@ -175,7 +191,7 @@ class EmptyMailboxPerspective extends MailboxPerspective
|
|||
canTrashThreads: =>
|
||||
false
|
||||
|
||||
applyToThreads: (threadsOrIds) =>
|
||||
receiveThreads: (threadsOrIds) =>
|
||||
|
||||
|
||||
class CategoryMailboxPerspective extends MailboxPerspective
|
||||
|
@ -224,7 +240,7 @@ class CategoryMailboxPerspective extends MailboxPerspective
|
|||
isInbox: =>
|
||||
@_categories[0].name is 'inbox'
|
||||
|
||||
canApplyToThreads: =>
|
||||
canReceiveThreads: =>
|
||||
super and not _.any @_categories, (c) -> c.isLockedCategory()
|
||||
|
||||
canArchiveThreads: =>
|
||||
|
@ -237,10 +253,13 @@ class CategoryMailboxPerspective extends MailboxPerspective
|
|||
return false if cat.name in ["trash"]
|
||||
super
|
||||
|
||||
applyToThreads: (threadsOrIds) =>
|
||||
receiveThreads: (threadsOrIds) =>
|
||||
FocusedPerspectiveStore = require './flux/stores/focused-perspective-store'
|
||||
currentCategories = FocusedPerspectiveStore.current().categories()
|
||||
|
||||
# TODO
|
||||
# This assumes that the we don't have more than one category per accountId
|
||||
# attached to this perspective
|
||||
DatabaseStore.modelify(Thread, threadsOrIds).then (threads) =>
|
||||
tasks = TaskFactory.tasksForApplyingCategories
|
||||
threads: threads
|
||||
|
|
Loading…
Reference in a new issue