VulpesOS/gaia/apps/network-alerts/test/unit/index_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

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);
});
});