2015-06-18 10:58:20 +08:00
|
|
|
_ = require 'underscore'
|
|
|
|
Thread = require '../../src/flux/models/thread'
|
|
|
|
Message = require '../../src/flux/models/message'
|
|
|
|
FocusedContentStore = require '../../src/flux/stores/focused-content-store'
|
|
|
|
MessageStore = require '../../src/flux/stores/message-store'
|
|
|
|
DatabaseStore = require '../../src/flux/stores/database-store'
|
2015-08-06 06:53:08 +08:00
|
|
|
ChangeUnreadTask = require '../../src/flux/tasks/change-unread-task'
|
2015-06-18 10:58:20 +08:00
|
|
|
Actions = require '../../src/flux/actions'
|
|
|
|
|
|
|
|
testThread = new Thread(id: '123')
|
|
|
|
testMessage1 = new Message(id: 'a', body: '123', files: [])
|
|
|
|
testMessage2 = new Message(id: 'b', body: '123', files: [])
|
|
|
|
|
|
|
|
describe "MessageStore", ->
|
|
|
|
describe "when thread focus changes", ->
|
|
|
|
beforeEach ->
|
|
|
|
@focus = null
|
|
|
|
spyOn(FocusedContentStore, 'focused').andCallFake (collection) =>
|
|
|
|
if collection is 'thread'
|
|
|
|
@focus
|
|
|
|
else
|
|
|
|
null
|
|
|
|
|
|
|
|
spyOn(FocusedContentStore, 'focusedId').andCallFake (collection) =>
|
|
|
|
if collection is 'thread'
|
|
|
|
@focus?.id
|
|
|
|
else
|
|
|
|
null
|
|
|
|
|
|
|
|
spyOn(DatabaseStore, 'findAll').andCallFake ->
|
|
|
|
include: -> @
|
2015-08-06 06:53:08 +08:00
|
|
|
waitForAnimations: -> @
|
2015-08-27 05:10:28 +08:00
|
|
|
where: -> @
|
2015-06-18 10:58:20 +08:00
|
|
|
then: (callback) -> callback([testMessage1, testMessage2])
|
|
|
|
|
|
|
|
it "should retrieve the focused thread", ->
|
|
|
|
@focus = testThread
|
|
|
|
FocusedContentStore.trigger({impactsCollection: -> true})
|
|
|
|
expect(DatabaseStore.findAll).toHaveBeenCalled()
|
|
|
|
expect(DatabaseStore.findAll.mostRecentCall.args[0]).toBe(Message)
|
|
|
|
|
|
|
|
describe "when the thread is unread", ->
|
|
|
|
beforeEach ->
|
|
|
|
@focus = null
|
|
|
|
FocusedContentStore.trigger({impactsCollection: -> true})
|
2015-07-16 23:54:20 +08:00
|
|
|
testThread.unread = true
|
2015-06-18 10:58:20 +08:00
|
|
|
spyOn(Actions, 'queueTask')
|
2015-08-15 06:40:11 +08:00
|
|
|
spyOn(atom.config, 'get').andCallFake (key) =>
|
|
|
|
if key is 'core.reading.markAsReadDelay'
|
|
|
|
return 600
|
2015-06-18 10:58:20 +08:00
|
|
|
|
|
|
|
it "should queue a task to mark the thread as read", ->
|
|
|
|
@focus = testThread
|
|
|
|
FocusedContentStore.trigger({impactsCollection: -> true})
|
|
|
|
advanceClock(500)
|
|
|
|
expect(Actions.queueTask).not.toHaveBeenCalled()
|
|
|
|
advanceClock(500)
|
|
|
|
expect(Actions.queueTask).toHaveBeenCalled()
|
2015-08-06 06:53:08 +08:00
|
|
|
expect(Actions.queueTask.mostRecentCall.args[0] instanceof ChangeUnreadTask).toBe(true)
|
2015-06-18 10:58:20 +08:00
|
|
|
|
|
|
|
it "should not queue a task to mark the thread as read if the thread is no longer selected 500msec later", ->
|
|
|
|
@focus = testThread
|
|
|
|
FocusedContentStore.trigger({impactsCollection: -> true})
|
|
|
|
advanceClock(500)
|
|
|
|
expect(Actions.queueTask).not.toHaveBeenCalled()
|
|
|
|
@focus = null
|
|
|
|
FocusedContentStore.trigger({impactsCollection: -> true})
|
|
|
|
advanceClock(500)
|
|
|
|
expect(Actions.queueTask).not.toHaveBeenCalled()
|