Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
174 lines
5.5 KiB
JavaScript
Executable file
174 lines
5.5 KiB
JavaScript
Executable file
'use strict';
|
|
|
|
/* global CallHandler, CustomElementsHelper, KeypadManager, MockICEContacts,
|
|
MockNavigatorMozTelephony, MocksHelper, MockSimSettingsHelper,
|
|
MockTelephonyMessages, Promise */
|
|
|
|
require('/test/unit/mock_keypad.js');
|
|
require('/test/unit/mock_ice_contacts.js');
|
|
require('/shared/test/unit/mocks/mocks_helper.js');
|
|
require('/shared/test/unit/mocks/mock_navigator_moz_telephony.js');
|
|
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
|
require('/shared/test/unit/mocks/mock_sim_settings_helper.js');
|
|
require('/shared/test/unit/mocks/dialer/mock_telephony_messages.js');
|
|
require(
|
|
'/shared/test/unit/mocks/elements/gaia_sim_picker/mock_gaia_sim_picker.js');
|
|
|
|
require('/js/dialer.js');
|
|
|
|
var mocksHelperForDialer = new MocksHelper([
|
|
'GaiaSimPicker',
|
|
'KeypadManager',
|
|
'ICEContacts',
|
|
'LazyLoader',
|
|
'SimSettingsHelper',
|
|
'TelephonyMessages'
|
|
]).init();
|
|
|
|
var customElementsForDialer = new CustomElementsHelper([
|
|
'GaiaSimPicker'
|
|
]);
|
|
|
|
suite('Emergency Dialer', function() {
|
|
var realMozTelephony;
|
|
|
|
var num = '123';
|
|
var mockCall;
|
|
var mockPromise;
|
|
|
|
var simPicker;
|
|
|
|
mocksHelperForDialer.attachTestHelpers();
|
|
|
|
suiteSetup(function() {
|
|
realMozTelephony = navigator.mozTelephony;
|
|
navigator.mozTelephony = MockNavigatorMozTelephony;
|
|
|
|
CallHandler._telephony = MockNavigatorMozTelephony;
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
navigator.mozTelephony = realMozTelephony;
|
|
});
|
|
|
|
setup(function() {
|
|
simPicker = document.createElement('gaia-sim-picker');
|
|
simPicker.id = 'sim-picker';
|
|
document.body.appendChild(simPicker);
|
|
customElementsForDialer.resolve();
|
|
});
|
|
|
|
teardown(function() {
|
|
document.body.removeChild(simPicker);
|
|
});
|
|
|
|
suite('> Telephony API', function() {
|
|
setup(function() {
|
|
mockCall = {};
|
|
mockPromise = Promise.resolve(mockCall);
|
|
this.sinon.stub(navigator.mozTelephony, 'dialEmergency')
|
|
.returns(mockPromise);
|
|
CallHandler.call(num);
|
|
});
|
|
|
|
test('> calls dialEmergency', function() {
|
|
sinon.assert.calledWith(navigator.mozTelephony.dialEmergency, num);
|
|
});
|
|
|
|
test('> installs onconnected handler', function(done) {
|
|
mockPromise.then(function() {
|
|
assert.isFunction(mockCall.onconnected);
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('> installs ondisconnected handler', function(done) {
|
|
mockPromise.then(function() {
|
|
assert.isFunction(mockCall.ondisconnected);
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('> clears the keypad on connected', function(done) {
|
|
this.sinon.spy(KeypadManager, 'updatePhoneNumber');
|
|
mockPromise.then(function() {
|
|
mockCall.onconnected();
|
|
sinon.assert.calledWith(KeypadManager.updatePhoneNumber, '');
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('> clears the keypad on disconnected', function(done) {
|
|
this.sinon.spy(KeypadManager, 'updatePhoneNumber');
|
|
mockPromise.then(function() {
|
|
mockCall.ondisconnected({
|
|
call: { disconnectedReason: 'NormalCallClearing' }
|
|
});
|
|
sinon.assert.calledWith(KeypadManager.updatePhoneNumber, '');
|
|
}).then(done, done);
|
|
});
|
|
|
|
test('> displays an appropriate message on disconnected', function(done) {
|
|
this.sinon.spy(MockTelephonyMessages, 'handleDisconnect');
|
|
mockPromise.then(function() {
|
|
mockCall.ondisconnected({
|
|
call: { disconnectedReason: 'NormalCallClearing' }
|
|
});
|
|
sinon.assert.calledOnce(MockTelephonyMessages.handleDisconnect);
|
|
sinon.assert.calledWith(
|
|
MockTelephonyMessages.handleDisconnect, 'NormalCallClearing', num
|
|
);
|
|
}).then(done, done);
|
|
});
|
|
});
|
|
|
|
suite('> Dialing ICE Contacts Behavior', function() {
|
|
setup(function() {
|
|
mockCall = {};
|
|
mockPromise = Promise.resolve(mockCall);
|
|
this.sinon.stub(navigator.mozTelephony, 'dialEmergency')
|
|
.returns(mockPromise);
|
|
this.sinon.stub(navigator.mozTelephony, 'dial').returns(mockPromise);
|
|
this.sinon.stub(MockICEContacts, 'isFromICEContact');
|
|
});
|
|
|
|
test('> dials when default outgoing SIM "always ask" and SIM selected',
|
|
function() {
|
|
MockSimSettingsHelper._defaultCards.outgoingCall =
|
|
MockSimSettingsHelper.ALWAYS_ASK_OPTION_VALUE;
|
|
this.sinon.stub(simPicker, 'getOrPick');
|
|
MockICEContacts.isFromICEContact.returns(true);
|
|
|
|
CallHandler.call(num);
|
|
simPicker.getOrPick.yield(0);
|
|
sinon.assert.calledWith(navigator.mozTelephony.dial, num);
|
|
sinon.assert.calledWith(simPicker.getOrPick,
|
|
MockSimSettingsHelper.ALWAYS_ASK_OPTION_VALUE,
|
|
num);
|
|
});
|
|
|
|
[0, 1].forEach(function(cardIndex) {
|
|
test('> calls dial when ICE dialed with SIM ' + cardIndex, function() {
|
|
MockSimSettingsHelper._defaultCards.outgoingCall = cardIndex;
|
|
MockICEContacts.isFromICEContact.returns(true);
|
|
|
|
CallHandler.call(num);
|
|
sinon.assert.calledWith(navigator.mozTelephony.dial, num, cardIndex);
|
|
});
|
|
});
|
|
|
|
test('> calls dialEmergency when non-ICE Contact is dialed', function() {
|
|
MockICEContacts.isFromICEContact.returns(false);
|
|
|
|
CallHandler.call(num);
|
|
sinon.assert.calledWith(navigator.mozTelephony.dialEmergency, num);
|
|
});
|
|
|
|
test('> SimPicker NOT called when Emergency number is dialed',
|
|
function() {
|
|
MockICEContacts.isFromICEContact.returns(false);
|
|
this.sinon.spy(simPicker, 'getOrPick');
|
|
|
|
CallHandler.call(num);
|
|
sinon.assert.calledOnce(navigator.mozTelephony.dialEmergency);
|
|
sinon.assert.notCalled(simPicker.getOrPick);
|
|
});
|
|
});
|
|
});
|