mirror of
https://github.com/Foundry376/Mailspring.git
synced 2025-01-06 08:08:10 +08:00
2a93c70214
Summary: tiny patch, but with lots of tests for message-item and factored out message-timestamp Test Plan: Run brand new specs! Reviewers: evan Reviewed By: evan Differential Revision: https://review.inboxapp.com/D1225
279 lines
7.6 KiB
CoffeeScript
279 lines
7.6 KiB
CoffeeScript
_ = require "underscore-plus"
|
|
moment = require "moment"
|
|
proxyquire = require "proxyquire"
|
|
|
|
CSON = require "season"
|
|
React = require "react/addons"
|
|
TestUtils = React.addons.TestUtils
|
|
|
|
{Thread,
|
|
Contact,
|
|
Actions,
|
|
Message,
|
|
Namespace,
|
|
MessageStore,
|
|
NamespaceStore,
|
|
InboxTestUtils,
|
|
ComponentRegistry} = require "inbox-exports"
|
|
|
|
ComposerItem = React.createClass
|
|
render: -> <div></div>
|
|
focus: ->
|
|
|
|
AttachmentItem = React.createClass
|
|
render: -> <div></div>
|
|
focus: ->
|
|
|
|
ParticipantsItem = React.createClass
|
|
render: -> <div></div>
|
|
focus: ->
|
|
|
|
MessageItem = proxyquire("../lib/message-item.cjsx", {
|
|
"./email-frame": React.createClass({render: -> <div></div>})
|
|
})
|
|
|
|
MessageList = proxyquire("../lib/message-list.cjsx", {
|
|
"./message-item.cjsx": MessageItem
|
|
})
|
|
|
|
MessageParticipants = require "../lib/message-participants.cjsx"
|
|
|
|
me = new Namespace(
|
|
"name": "User One",
|
|
"email": "user1@inboxapp.com"
|
|
"provider": "inbox"
|
|
)
|
|
NamespaceStore._current = me
|
|
|
|
user_headers =
|
|
id: null
|
|
object: null
|
|
namespace_id: null
|
|
|
|
user_1 = _.extend _.clone(user_headers),
|
|
name: "User One"
|
|
email: "user1@inboxapp.com"
|
|
user_2 = _.extend _.clone(user_headers),
|
|
name: "User Two"
|
|
email: "user2@inboxapp.com"
|
|
user_3 = _.extend _.clone(user_headers),
|
|
name: "User Three"
|
|
email: "user3@inboxapp.com"
|
|
user_4 = _.extend _.clone(user_headers),
|
|
name: "User Four"
|
|
email: "user4@inboxapp.com"
|
|
user_5 = _.extend _.clone(user_headers),
|
|
name: "User Five"
|
|
email: "user5@inboxapp.com"
|
|
|
|
testMessages = [
|
|
(new Message).fromJSON({
|
|
"id" : "111",
|
|
"from" : [ user_1 ],
|
|
"to" : [ user_2 ],
|
|
"cc" : [ user_3, user_4 ],
|
|
"bcc" : null,
|
|
"body" : "Body One",
|
|
"date" : 1415814587,
|
|
"draft" : false
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "message",
|
|
"snippet" : "snippet one...",
|
|
"subject" : "Subject One",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
(new Message).fromJSON({
|
|
"id" : "222",
|
|
"from" : [ user_2 ],
|
|
"to" : [ user_1 ],
|
|
"cc" : [ user_3, user_4 ],
|
|
"bcc" : null,
|
|
"body" : "Body Two",
|
|
"date" : 1415814587,
|
|
"draft" : false
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "message",
|
|
"snippet" : "snippet Two...",
|
|
"subject" : "Subject Two",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
(new Message).fromJSON({
|
|
"id" : "333",
|
|
"from" : [ user_3 ],
|
|
"to" : [ user_1 ],
|
|
"cc" : [ user_2, user_4 ],
|
|
"bcc" : [],
|
|
"body" : "Body Three",
|
|
"date" : 1415814587,
|
|
"draft" : false
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "message",
|
|
"snippet" : "snippet Three...",
|
|
"subject" : "Subject Three",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
(new Message).fromJSON({
|
|
"id" : "444",
|
|
"from" : [ user_4 ],
|
|
"to" : [ user_1 ],
|
|
"cc" : [],
|
|
"bcc" : [ user_5 ],
|
|
"body" : "Body Four",
|
|
"date" : 1415814587,
|
|
"draft" : false
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "message",
|
|
"snippet" : "snippet Four...",
|
|
"subject" : "Subject Four",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
(new Message).fromJSON({
|
|
"id" : "555",
|
|
"from" : [ user_1 ],
|
|
"to" : [ user_4 ],
|
|
"cc" : [],
|
|
"bcc" : [],
|
|
"body" : "Body Five",
|
|
"date" : 1415814587,
|
|
"draft" : false
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "message",
|
|
"snippet" : "snippet Five...",
|
|
"subject" : "Subject Five",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
]
|
|
draftMessages = [
|
|
(new Message).fromJSON({
|
|
"id" : "666",
|
|
"from" : [ user_1 ],
|
|
"to" : [ ],
|
|
"cc" : [ ],
|
|
"bcc" : null,
|
|
"body" : "Body One",
|
|
"date" : 1415814587,
|
|
"draft" : true
|
|
"files" : [],
|
|
"unread" : false,
|
|
"object" : "draft",
|
|
"snippet" : "draft snippet one...",
|
|
"subject" : "Draft One",
|
|
"thread_id" : "thread_12345",
|
|
"namespace_id" : "nsid"
|
|
}),
|
|
]
|
|
|
|
test_thread = (new Thread).fromJSON({
|
|
"id" : "thread_12345"
|
|
"subject" : "Subject 12345"
|
|
})
|
|
|
|
describe "MessageList", ->
|
|
beforeEach ->
|
|
ComponentRegistry.register
|
|
name: 'Composer'
|
|
view: ComposerItem
|
|
ComponentRegistry.register
|
|
name: 'Participants'
|
|
view: ParticipantsItem
|
|
ComponentRegistry.register
|
|
name: 'AttachmentComponent'
|
|
view: AttachmentItem
|
|
|
|
MessageStore._items = []
|
|
MessageStore._threadId = null
|
|
spyOn(MessageStore, "itemLocalIds").andCallFake ->
|
|
{"666": "666"}
|
|
|
|
@message_list = TestUtils.renderIntoDocument(<MessageList />)
|
|
@message_list_node = @message_list.getDOMNode()
|
|
|
|
it "renders into the document", ->
|
|
expect(TestUtils.isCompositeComponentWithType(@message_list,
|
|
MessageList)).toBe true
|
|
|
|
it "by default has zero children", ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
MessageItem)
|
|
|
|
expect(items.length).toBe 0
|
|
|
|
describe "Populated Message list", ->
|
|
beforeEach ->
|
|
MessageStore._items = testMessages
|
|
MessageStore.trigger(MessageStore)
|
|
@message_list.setState current_thread: test_thread
|
|
|
|
it "renders all the correct number of messages", ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
MessageItem)
|
|
expect(items.length).toBe 5
|
|
|
|
it "aggregates participants across all messages", ->
|
|
expect(@message_list._threadParticipants().length).toBe 4
|
|
expect(@message_list._threadParticipants()[0] instanceof Contact).toBe true
|
|
|
|
it "displays lists of participants on the page", ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
MessageParticipants)
|
|
expect(items.length).toBe 5
|
|
|
|
it "displays the thread participants on the page", ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
ParticipantsItem)
|
|
expect(items.length).toBe 1
|
|
|
|
it "focuses new composers when a draft is added", ->
|
|
spyOn(@message_list, "_focusRef")
|
|
msgs = @message_list.state.messages
|
|
msgs = msgs.concat(draftMessages)
|
|
@message_list.setState messages: msgs
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
ComposerItem)
|
|
expect(items.length).toBe 1
|
|
composer = items[0]
|
|
expect(@message_list._focusRef).toHaveBeenCalledWith(composer)
|
|
|
|
it "doesn't focus if we're just navigating through messages", ->
|
|
spyOn(@message_list, "_focusRef")
|
|
@message_list.setState messages: draftMessages
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
ComposerItem)
|
|
expect(items.length).toBe 1
|
|
composer = items[0]
|
|
expect(@message_list._focusRef).not.toHaveBeenCalled()
|
|
|
|
describe "Message", ->
|
|
beforeEach ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
MessageItem)
|
|
item = items.filter (message) -> message.props.message.id is "111"
|
|
@message_item = item[0]
|
|
|
|
it "finds the message by id", ->
|
|
expect(@message_item.props.message.id).toBe "111"
|
|
|
|
describe "MessageList with draft", ->
|
|
beforeEach ->
|
|
MessageStore._items = testMessages.concat draftMessages
|
|
MessageStore.trigger(MessageStore)
|
|
@message_list.setState current_thread: test_thread
|
|
|
|
it "renders the composer", ->
|
|
items = TestUtils.scryRenderedComponentsWithType(@message_list,
|
|
ComposerItem)
|
|
expect(@message_list.state.messages.length).toBe 6
|
|
expect(@message_list.state.Composer).toEqual ComposerItem
|
|
expect(items.length).toBe 1
|
|
|
|
expect(items.length).toBe 1
|