Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
223 lines
5.7 KiB
JavaScript
Executable file
223 lines
5.7 KiB
JavaScript
Executable file
/* global MockNavigatorSettings
|
|
*/
|
|
'use strict';
|
|
|
|
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
|
|
|
|
suite('Network Alerts - cellbroadcast system message handling', function() {
|
|
var handlerStub;
|
|
var realSettings = navigator.mozSettings;
|
|
var CMAS_KEY = 'cmas.enabled';
|
|
var getStub, setStub;
|
|
|
|
function mockMessage(opt = {}) {
|
|
var message = {
|
|
serviceId: 0,
|
|
cdmaServiceCategory: null,
|
|
body: 'Some body'
|
|
};
|
|
|
|
for (var key in opt) {
|
|
message[key] = opt[key];
|
|
}
|
|
|
|
return message;
|
|
}
|
|
|
|
suiteSetup(function(done) {
|
|
if (!window.navigator.mozSetMessageHandler) {
|
|
window.navigator.mozSetMessageHandler = function() {};
|
|
}
|
|
sinon.stub(window.navigator, 'mozSetMessageHandler');
|
|
handlerStub = window.navigator.mozSetMessageHandler;
|
|
|
|
require('/js/index.js', done);
|
|
});
|
|
|
|
setup(function() {
|
|
this.sinon.stub(window, 'close');
|
|
this.sinon.stub(window, 'open');
|
|
|
|
getStub = sinon.stub().returns(Promise.resolve());
|
|
setStub = sinon.stub().returns(Promise.resolve());
|
|
|
|
this.sinon.stub(MockNavigatorSettings, 'createLock').returns({
|
|
get: getStub,
|
|
set: setStub
|
|
});
|
|
|
|
navigator.mozSettings = MockNavigatorSettings;
|
|
});
|
|
|
|
teardown(function() {
|
|
navigator.mozSettings = realSettings;
|
|
MockNavigatorSettings.mTeardown();
|
|
});
|
|
|
|
test('do not open attention screen if error returns from settings DB',
|
|
function(done) {
|
|
|
|
var message = mockMessage({ messageId: 4371 });
|
|
|
|
getStub.returns(Promise.reject(new Error('error')));
|
|
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
finished.then(() => {
|
|
sinon.assert.notCalled(window.open);
|
|
sinon.assert.called(window.close);
|
|
}).then(done, done);
|
|
});
|
|
|
|
suite('if CMAS in settings DB is off', function() {
|
|
setup(function() {
|
|
getStub.returns(Promise.resolve({
|
|
[CMAS_KEY]: {
|
|
0: false,
|
|
1: false
|
|
}
|
|
}));
|
|
});
|
|
|
|
test('do not open attention screen', function(done) {
|
|
|
|
var message = mockMessage({ messageId: 4371 });
|
|
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
finished.then(() => {
|
|
sinon.assert.notCalled(window.open);
|
|
sinon.assert.called(window.close);
|
|
}).then(done, done);
|
|
});
|
|
|
|
[4370, 4383].forEach((presidentialId) => {
|
|
test('opens an attention screen if GSM message is a presidential alert ' +
|
|
presidentialId,
|
|
function(done) {
|
|
|
|
var message = mockMessage({ messageId: presidentialId });
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
var expectedUrl = [
|
|
'attention.html?',
|
|
'title=emergency-alert-title&',
|
|
'body=Some%20body'
|
|
].join('');
|
|
|
|
finished.then(() => {
|
|
sinon.assert.calledWith(
|
|
window.open,
|
|
expectedUrl, '_blank', 'attention'
|
|
);
|
|
sinon.assert.notCalled(window.close);
|
|
}).then(done, done);
|
|
});
|
|
});
|
|
|
|
test('opens an attention screen if CDMA message is a presidential alert ',
|
|
function(done) {
|
|
|
|
var message = mockMessage({ cdmaServiceCategory: 4096 });
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
var expectedUrl = [
|
|
'attention.html?',
|
|
'title=emergency-alert-title&',
|
|
'body=Some%20body'
|
|
].join('');
|
|
|
|
finished.then(() => {
|
|
sinon.assert.calledWith(
|
|
window.open,
|
|
expectedUrl, '_blank', 'attention'
|
|
);
|
|
sinon.assert.notCalled(window.close);
|
|
}).then(done, done);
|
|
});
|
|
});
|
|
|
|
test('opens an attention screen if GSM message is CMAS', function(done) {
|
|
var message = mockMessage({ messageId: 4371 });
|
|
|
|
getStub.returns(Promise.resolve({
|
|
[CMAS_KEY]: {
|
|
0: true,
|
|
1: false
|
|
}
|
|
}));
|
|
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
var expectedUrl = [
|
|
'attention.html?',
|
|
'title=emergency-alert-title&',
|
|
'body=Some%20body'
|
|
].join('');
|
|
|
|
finished.then(() => {
|
|
sinon.assert.calledWith(
|
|
window.open,
|
|
expectedUrl, '_blank', 'attention'
|
|
);
|
|
sinon.assert.notCalled(window.close);
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('do not open attention screen if GSM message is other cellbroadcast',
|
|
function() {
|
|
|
|
var message = mockMessage({ messageId: 4401 });
|
|
|
|
handlerStub.withArgs('cellbroadcast-received').yield(message);
|
|
|
|
sinon.assert.notCalled(window.open);
|
|
sinon.assert.called(window.close);
|
|
});
|
|
|
|
|
|
test('opens an attention screen if CDMA message is CMAS', function(done) {
|
|
var message = mockMessage({ cdmaServiceCategory: 4096 });
|
|
|
|
getStub.returns(Promise.resolve({
|
|
[CMAS_KEY]: {
|
|
0: true,
|
|
1: false
|
|
}
|
|
}));
|
|
|
|
var handler = handlerStub.withArgs('cellbroadcast-received').args[0][1];
|
|
var finished = handler(message);
|
|
|
|
var expectedUrl = [
|
|
'attention.html?',
|
|
'title=emergency-alert-title&',
|
|
'body=Some%20body'
|
|
].join('');
|
|
|
|
finished.then(() => {
|
|
sinon.assert.calledWith(
|
|
window.open,
|
|
expectedUrl, '_blank', 'attention'
|
|
);
|
|
sinon.assert.notCalled(window.close);
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('do not open attention screen if CDMA message is other cellbroadcast',
|
|
function() {
|
|
|
|
var message = mockMessage({ cdmaServiceCategory: 4095 });
|
|
|
|
handlerStub.withArgs('cellbroadcast-received').yield(message);
|
|
|
|
sinon.assert.notCalled(window.open);
|
|
sinon.assert.called(window.close);
|
|
});
|
|
});
|
|
|