Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
315 lines
8.3 KiB
JavaScript
Executable file
315 lines
8.3 KiB
JavaScript
Executable file
/*global Thread, Threads, MockMessages, Drafts, MocksHelper */
|
|
|
|
'use strict';
|
|
|
|
require('/services/js/threads.js');
|
|
|
|
require('/services/test/unit/mock_drafts.js');
|
|
require('/views/shared/test/unit/mock_messages.js');
|
|
|
|
|
|
var mocksHelperForThreadsTest = new MocksHelper([
|
|
'Drafts'
|
|
]).init();
|
|
|
|
function assertDeepEqual(test, expected) {
|
|
for (var key in expected) {
|
|
assert.deepEqual(test[key], expected[key]);
|
|
}
|
|
}
|
|
|
|
suite('Threads', function() {
|
|
var message;
|
|
|
|
mocksHelperForThreadsTest.attachTestHelpers();
|
|
|
|
setup(function() {
|
|
// Create a message with read status 'true'
|
|
message = MockMessages.sms();
|
|
});
|
|
|
|
teardown(function() {
|
|
Threads.clear();
|
|
});
|
|
|
|
suite('create', function() {
|
|
test('Thread.fromMessage, Thread.fromDraft', function() {
|
|
assert.ok(Thread.fromMessage);
|
|
assert.ok(Thread.fromDraft);
|
|
});
|
|
|
|
test(' > create with unread status in options', function() {
|
|
var options = { unread: true };
|
|
var thread = Thread.create(message, options);
|
|
|
|
assert.equal(thread.unreadCount, 1);
|
|
});
|
|
|
|
test(' > create without options', function() {
|
|
var thread = Thread.create(message);
|
|
assert.equal(thread.unreadCount, 0);
|
|
});
|
|
|
|
test(' > create with read status in options', function() {
|
|
var options = { read: true };
|
|
var thread = Thread.create(message, options);
|
|
assert.equal(thread.unreadCount, 0);
|
|
});
|
|
|
|
test(' > create from SMS sended', function() {
|
|
var options = { read: true };
|
|
message.delivery = 'sent';
|
|
var thread = Thread.create(message, options);
|
|
assert.equal(thread.participants.length, 1);
|
|
assert.equal(thread.participants[0], message.receiver);
|
|
});
|
|
|
|
test(' > create from SMS received', function() {
|
|
var options = { unread: true };
|
|
message.delivery = 'received';
|
|
var thread = Thread.create(message, options);
|
|
assert.equal(thread.participants.length, 1);
|
|
assert.equal(thread.participants[0], message.sender);
|
|
});
|
|
|
|
test(' > create from MMS sending', function() {
|
|
var options = { read: true };
|
|
var mms = MockMessages.mms();
|
|
mms.delivery = 'sent';
|
|
var thread = Thread.create(mms, options);
|
|
assert.equal(thread.participants, mms.receivers);
|
|
});
|
|
|
|
test(' > create from MMS received', function() {
|
|
var options = { unread: true };
|
|
var mms = MockMessages.mms();
|
|
mms.delivery = 'received';
|
|
var thread = Thread.create(mms, options);
|
|
assert.equal(thread.participants.length, 1);
|
|
assert.equal(thread.participants[0], message.sender);
|
|
});
|
|
|
|
test(' > create from Draft with null threadId', function() {
|
|
var now = Date.now();
|
|
var thread = Thread.create({
|
|
id: 1,
|
|
recipients: ['555'],
|
|
content: ['This is a new draft for thread 44'],
|
|
subject: 'This is a subject',
|
|
timestamp: now,
|
|
threadId: null,
|
|
type: 'sms'
|
|
});
|
|
|
|
assertDeepEqual(thread, {
|
|
// id was used
|
|
id: 1,
|
|
participants: ['555'],
|
|
body: 'This is a new draft for thread 44',
|
|
timestamp: new Date(now),
|
|
unreadCount: 0,
|
|
lastMessageSubject: undefined,
|
|
lastMessageType: 'sms',
|
|
messages: new Map()
|
|
});
|
|
});
|
|
|
|
test(' > create from Draft with a threadId', function() {
|
|
var now = Date.now();
|
|
var thread = Thread.create({
|
|
id: 1,
|
|
recipients: ['555'],
|
|
content: ['This is a new draft for thread 44'],
|
|
subject: 'This is a subject',
|
|
timestamp: now,
|
|
threadId: 44,
|
|
type: 'sms'
|
|
});
|
|
|
|
assertDeepEqual(thread, {
|
|
// threadId was used
|
|
id: 44,
|
|
participants: ['555'],
|
|
body: 'This is a new draft for thread 44',
|
|
timestamp: new Date(now),
|
|
unreadCount: 0,
|
|
lastMessageSubject: undefined,
|
|
lastMessageType: 'sms',
|
|
messages: new Map()
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('Collection', function() {
|
|
test('is like a Map', function() {
|
|
assert.ok(Threads);
|
|
assert.isFunction(Threads.set);
|
|
assert.isFunction(Threads.get);
|
|
assert.isFunction(Threads.has);
|
|
assert.isFunction(Threads.delete);
|
|
assert.isFunction(Threads.clear);
|
|
assert.isNumber(Threads.size);
|
|
});
|
|
|
|
test('Threads.set(key, val)', function() {
|
|
Threads.set(1, {});
|
|
assertDeepEqual(Threads.get(1), {
|
|
body: undefined,
|
|
id: undefined,
|
|
lastMessageSubject: undefined,
|
|
lastMessageType: undefined,
|
|
participants: undefined,
|
|
timestamp: undefined,
|
|
unreadCount: undefined,
|
|
messages: new Map()
|
|
});
|
|
assert.equal(Threads.size, 1);
|
|
});
|
|
|
|
test('Threads.get(key)', function() {
|
|
Threads.set(1, {});
|
|
var value = Threads.get(1);
|
|
assert.ok(value.messages instanceof Map);
|
|
assert.equal(Threads.size, 1);
|
|
});
|
|
|
|
test('Threads.has(key)', function() {
|
|
assert.equal(Threads.has(1), false);
|
|
Threads.set(1, {});
|
|
assert.equal(Threads.has(1), true);
|
|
});
|
|
|
|
test('Threads.delete()', function() {
|
|
Threads.set(1, {});
|
|
assert.equal(Threads.has(1), true);
|
|
assert.equal(Threads.size, 1);
|
|
Threads.delete(1);
|
|
assert.equal(Threads.has(1), false);
|
|
assert.equal(Threads.size, 0);
|
|
});
|
|
|
|
test('Threads.delete() calls Drafts.delete()', function() {
|
|
this.sinon.spy(Drafts, 'delete');
|
|
this.sinon.stub(Drafts, 'store');
|
|
|
|
this.sinon.stub(Threads, 'get').returns({
|
|
id: 1,
|
|
getDraft: () => { return { threadId: 1 }; }
|
|
});
|
|
|
|
Threads.delete(1);
|
|
|
|
sinon.assert.calledWith(Drafts.delete, { threadId: 1 });
|
|
sinon.assert.callOrder(Drafts.delete, Drafts.store);
|
|
});
|
|
|
|
suite('Threads.registerMessage/unregisterMessage', function () {
|
|
setup(function() {
|
|
this.sinon.spy(Threads, 'get');
|
|
});
|
|
test('thread existed', function() {
|
|
Threads.set(1, {});
|
|
Threads.registerMessage(message);
|
|
assert.equal(Threads.get(1).messages.get(message.id), message);
|
|
assert.equal(Threads.Messages.get(message.id), message);
|
|
|
|
// unregister the message
|
|
Threads.unregisterMessage(message.id);
|
|
assert.isUndefined(Threads.get(1).messages.get(message.id));
|
|
});
|
|
|
|
test('thread does not exist', function() {
|
|
Threads.registerMessage(message);
|
|
assert.isTrue(Threads.has(1));
|
|
assert.equal(Threads.get(1).messages.get(message.id), message);
|
|
assert.equal(Threads.Messages.get(message.id), message);
|
|
});
|
|
|
|
test('remove the message that does not exist in Threads', function() {
|
|
Threads.unregisterMessage(message);
|
|
sinon.assert.notCalled(Threads.get);
|
|
assert.isNull(Threads.Messages.get(message.id));
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
suite('Thread', function() {
|
|
var date = new Date();
|
|
var fixture = {
|
|
id: 1,
|
|
participants: ['555'],
|
|
lastMessageType: 'sms',
|
|
body: 'Hello 555',
|
|
timestamp: date,
|
|
unreadCount: 0
|
|
};
|
|
|
|
mocksHelperForThreadsTest.attachTestHelpers();
|
|
|
|
teardown(function() {
|
|
Threads.clear();
|
|
});
|
|
|
|
setup(function() {
|
|
Threads.set(1, fixture);
|
|
});
|
|
|
|
test('Thread object', function() {
|
|
var thread = new Thread(fixture);
|
|
|
|
assertDeepEqual(thread, {
|
|
id: 1,
|
|
participants: ['555'],
|
|
lastMessageSubject: undefined,
|
|
lastMessageType: 'sms',
|
|
body: 'Hello 555',
|
|
timestamp: date,
|
|
unreadCount: 0,
|
|
messages: new Map()
|
|
});
|
|
});
|
|
|
|
test('thread has draft', function() {
|
|
var draft = {
|
|
id: 101,
|
|
recipients: ['555'],
|
|
content: ['This is a new draft for thread 1'],
|
|
subject: 'This is a subject',
|
|
timestamp: 2,
|
|
threadId: 1,
|
|
type: 'sms'
|
|
};
|
|
|
|
this.sinon.stub(Drafts, 'byThreadId').withArgs(1).returns(draft);
|
|
|
|
Threads.set(1, {
|
|
id: 1,
|
|
participants: ['555'],
|
|
lastMessageType: 'sms',
|
|
body: 'Hello 555',
|
|
timestamp: date,
|
|
unreadCount: 0,
|
|
messages: new Map()
|
|
});
|
|
|
|
assert.deepEqual(Threads.get(1).getDraft(), draft);
|
|
});
|
|
|
|
test('thread does not have draft', function() {
|
|
this.sinon.stub(Drafts, 'byThreadId').withArgs(1).returns(null);
|
|
|
|
Threads.set(1, {
|
|
id: 1,
|
|
participants: ['555'],
|
|
lastMessageType: 'sms',
|
|
body: 'Hello 555',
|
|
timestamp: date,
|
|
unreadCount: 0,
|
|
messages: new Map()
|
|
});
|
|
|
|
assert.isNull(Threads.get(1).getDraft());
|
|
});
|
|
|
|
});
|