/* -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
/* global MockMessageDB, MocksHelper, ParsedMessage */
'use strict';
require('/js/provisioning.js');
require('/js/parsed_message.js');
require('/test/unit/mock_messagedb.js');
var mocksHelperParsedMessage = new MocksHelper([
'MessageDB'
]).init();
suite('ParsedMessage', function() {
var messages;
var timestamp;
mocksHelperParsedMessage.attachTestHelpers();
suiteSetup(function() {
timestamp = Date.now();
messages = {
si_text_only: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: 'check this out',
serviceId: 0
},
si_href_only: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'',
serviceId: 0
},
si_text_and_href: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'check this out',
serviceId: 0
},
si_id: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'' +
'check this out' +
'' +
'',
serviceId: 0
},
created: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'' +
'check this out' +
'' +
'',
serviceId: 0
},
expires: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'' +
'check this out' +
'' +
'',
serviceId: 0
},
action: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'' +
'check this out' +
'' +
'',
serviceId: 0
},
invalid_delete: {
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: '' +
'' +
'check this out' +
'' +
'',
serviceId: 0
},
sl: {
sender: '+31641600986',
contentType: 'text/vnd.wap.sl',
content: '',
serviceId: 0
},
sl_action: {
sender: '+31641600986',
contentType: 'text/vnd.wap.sl',
content: '',
serviceId: 0
},
cp_noauth: {
sender: '22997',
contentType: 'text/vnd.wap.connectivity-xml',
content: '',
serviceId: 0
},
cp_netwpin_checked_notpass: {
sender: '22997',
contentType: 'text/vnd.wap.connectivity-xml',
content: '',
authInfo: {
sec: 'NETWPIN',
checked: true,
pass: false
},
serviceId: 0
},
unsupported: {
sender: '+31641600986',
contentType: 'text/foobar',
content: '',
serviceId: 0
}
};
});
suite('ParsedMessage.from()', function() {
test('Text only', function() {
var message = ParsedMessage.from(messages.si_text_only, timestamp);
assert.equal(message.type, 'text/vnd.wap.si');
assert.equal(message.sender, '+31641600986');
assert.equal(message.timestamp, timestamp);
assert.equal(message.text, 'check this out');
assert.equal(message.href, undefined);
assert.equal(message.action, 'signal-medium');
assert.equal(message.serviceId, 0);
});
test('HREF only', function() {
var message = ParsedMessage.from(messages.si_href_only, timestamp);
assert.equal(message.text, '');
assert.equal(message.href, 'http://www.mozilla.org');
assert.equal(message.id, 'http://www.mozilla.org');
});
test('Text and HREF only', function() {
var message = ParsedMessage.from(messages.si_text_and_href, timestamp);
assert.equal(message.text, 'check this out');
assert.equal(message.href, 'http://www.mozilla.org');
assert.equal(message.id, 'http://www.mozilla.org');
});
test('SI message with explicit si-id field', function() {
var message = ParsedMessage.from(messages.si_id, timestamp);
assert.equal(message.href, 'http://www.mozilla.org');
assert.equal(message.id, 'gaia-test@mozilla.org');
});
test('SI message with explicit creation time', function() {
var message = ParsedMessage.from(messages.created, timestamp);
assert.equal(message.created, Date.parse('2013-09-03T10:35:33Z'));
});
test('SI message with explicit expiration date', function() {
var message = ParsedMessage.from(messages.expires, timestamp);
assert.equal(message.expires, Date.parse('2013-09-03T10:35:33Z'));
assert.isTrue(message.isExpired());
});
test('SI message with explicit action', function() {
var message = ParsedMessage.from(messages.action, timestamp);
assert.equal(message.action, 'signal-none');
});
test('SI message with delete action but no si-id field', function() {
assert.isNull(ParsedMessage.from(messages.invalid_delete, timestamp));
});
test('SL message', function() {
var message = ParsedMessage.from(messages.sl, timestamp);
assert.equal(message.type, 'text/vnd.wap.sl');
assert.equal(message.text, undefined);
assert.equal(message.href, 'http://www.mozilla.org');
assert.equal(message.action, 'execute-low');
});
test('SL message with explicit action', function() {
var message = ParsedMessage.from(messages.sl_action, timestamp);
assert.equal(message.action, 'execute-high');
});
test('OMA CP message without auth info', function() {
var message = ParsedMessage.from(messages.cp_noauth, timestamp);
assert.equal(message, null);
});
test('OMA CP message with NETWPIN auth info not authenticated', function() {
var message = ParsedMessage.from(messages.cp_netwpin_checked_notpass,
timestamp);
assert.equal(message, null);
});
test('unsupported content', function() {
var message = ParsedMessage.from(messages.unsupported, timestamp);
assert.equal(message, null);
});
});
suite('ParsedMessage.load()', function() {
var jsonMessage;
suiteSetup(function() {
jsonMessage = ParsedMessage.from({
sender: '+31641600986',
contentType: 'text/vnd.wap.si',
content: 'check this out',
serviceId: 0
}, 0).toJSON();
});
test('Successful retrieve a message', function(done) {
this.sinon.stub(MockMessageDB, 'retrieve').returns(
Promise.resolve(jsonMessage)
);
ParsedMessage.load(0).then(message => {
assert.instanceOf(message, ParsedMessage);
}).then(done, done);
});
test('Rejects if no message is found', function(done) {
this.sinon.stub(MockMessageDB, 'retrieve').returns(Promise.reject());
ParsedMessage.load(0).then(
() => assert.isTrue(false, 'Should not resolve the promise'),
() => {}
).then(done, done);
});
});
});