VulpesOS/gaia/apps/communications/contacts/test/marionette/ice_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

563 lines
16 KiB
JavaScript
Executable file

'use strict';
var Contacts = require('./lib/contacts');
var ContactsData = require('./lib/contacts_data');
var assert = require('assert');
marionette('Contacts > ICE contacts', function() {
var client = marionette.client({
profile: Contacts.config,
desiredCapabilities: { raisesAccessibilityExceptions: false }
});
var contactsData = new ContactsData(client);
var actions, subject, selectors;
var testContactTelNumber = '655555555';
var testContact = {
givenName: ['Hello'],
tel: [{
type: ['mobile'],
value: testContactTelNumber
}]
};
setup(function() {
subject = new Contacts(client);
actions = client.loader.getActions();
subject.actions = actions;
subject.launch();
selectors = Contacts.Selectors;
});
function setFirstContactAsICE() {
openICESettings();
clickICESwitch(1);
var listContactFirstText =
client.helper.waitForElement(selectors.listContactFirstText);
subject.clickOn(listContactFirstText);
}
function clickICESwitch(switchNumber){
var iceSwitch =
client.helper.waitForElement(selectors['iceSwitch' + switchNumber]);
subject.clickOn(iceSwitch);
var iceButton =
client.helper.waitForElement(selectors['iceButton' + switchNumber]);
subject.clickOn(iceButton);
}
function openICESettings() {
var settingsBtn = client.helper.waitForElement(selectors.settingsButton);
subject.clickOn(settingsBtn);
var settings = client.helper.waitForElement(selectors.settingsView);
subject.waitForFadeIn(settings);
client.helper.waitForElement(selectors.setIceButton).click();
}
function addTestContact(addTelephone) {
var tel = addTelephone ? testContactTelNumber : undefined;
subject.addContact({
givenName: 'Hello',
tel: tel
});
}
function clickBackArrow() {
var contactsHeader =
client.helper.waitForElement(selectors.iceSettingsHeader);
actions.wait(0.5).tap(contactsHeader, 10, 10).perform();
}
function isIceContactsGroupHidden() {
return client.executeScript(function(selector) {
return document.querySelector(selector).classList.contains('hide');
}, [selectors.iceGroupOpen]);
}
function assertICEContact(position, name) {
var iceContact = client.helper.waitForElement(
selectors['iceButton' + position]);
assert.equal(iceContact.text(), name);
var checked = client.executeScript(function(selector) {
return document.querySelector(selector).checked;
}, [selectors['iceInputSwitch' + position]]);
assert.ok(checked);
}
function assertICEContactNotSet(position) {
var checked = client.executeScript(function(selector) {
return document.querySelector(selector).checked;
}, [selectors['iceInputSwitch' + position]]);
assert.ok(!checked);
}
// Creates a mozContact by calling the mozContacts API
function createMozContact(contactData) {
return contactsData.createMozContact(contactData);
}
function setICEContacts(iceContactsList) {
var doSetICEContacts = function(iceContactsList) {
var LazyLoader = window.wrappedJSObject.LazyLoader;
LazyLoader.load([
'/shared/js/contacts/utilities/ice_store.js',
'/contacts/js/utilities/ice_data.js',
'/shared/js/async_storage.js'
], function() {
var ICEData = window.wrappedJSObject.ICEData;
ICEData.setICEContacts(iceContactsList).then(function() {
marionetteScriptFinished(true);
}, function(error) {
console.error('Error while setting ICE ', error);
marionetteScriptFinished(false);
});
});
};
var iceContactsSet = false;
client.executeAsyncScript(doSetICEContacts, [iceContactsList],
function(err, val) {
iceContactsSet = val;
});
client.waitFor(function() {
return iceContactsSet;
});
}
function setICEContact(position, contact) {
var contactId = createMozContact(contact || testContact);
var iceContacts = [null, null];
iceContacts[position - 1] = contactId;
setICEContacts(iceContacts);
}
function createAndSetICEContacts(contactList) {
var iceList = [];
contactList.forEach(function(aContact) {
var contactId = createMozContact(aContact);
iceList.push(contactId);
});
setICEContacts(iceList);
}
suite('ICE settings', function() {
test('Check ICE settings transition', function() {
addTestContact();
openICESettings();
clickICESwitch(1);
clickBackArrow();
clickICESwitch(2);
clickBackArrow();
});
test('Clicking on ICE button does not toggle the switch', function() {
addTestContact();
openICESettings();
var iceButton1 = client.helper.waitForElement(selectors.iceButton1);
subject.clickOn(iceButton1);
var checked = client.executeScript(function(selector) {
return document.querySelector(selector).checked;
}, [selectors.iceInputSwitch1]);
assert.ok(!checked);
});
test('Select ICE contact from search, go back to ICE settings', function() {
addTestContact(true);
openICESettings();
clickICESwitch(1);
var searchLabel = client.helper.waitForElement(selectors.searchLabel);
subject.clickOn(searchLabel);
// We search for the first letter of givenName in addTestContact()
client.helper.waitForElement(selectors.searchInput).sendKeys('H');
client.helper.waitForElement(selectors.searchResultFirst).click();
clickBackArrow();
var settingsClose = client.helper.waitForElement(selectors.settingsClose);
subject.clickOn(settingsClose);
var openIce = client.helper.waitForElement(selectors.iceGroupOpen);
subject.clickOn(openIce);
var iceContact = client.helper.waitForElement(selectors.iceContact);
// 'Hello' is givenName in addTestContact()
assert.ok(iceContact.text().indexOf('Hello') >= 0,
'The name of the contact should appear as ICE contact');
});
test('ICE contacts can\'t be repeated', function() {
addTestContact(true);
setFirstContactAsICE();
clickICESwitch(2);
var listContactFirstText =
client.helper.waitForElement(selectors.listContactFirstText);
subject.clickOn(listContactFirstText);
var confirmText = client.helper.waitForElement(selectors.confirmBody)
.text();
var expectedResult = subject.l10n(
'/locales-obj/contacts.index.en-US.json',
'ICERepeatedContact');
assert.equal(confirmText, expectedResult);
});
test('Contact must have a phone number', function() {
addTestContact(false); // Added contact without phone
setFirstContactAsICE();
var confirmText = client.helper.waitForElement(selectors.confirmBody)
.text();
var expectedResult = subject.l10n(
'/locales-obj/contacts.index.en-US.json',
'ICEContactNoNumber');
assert.equal(confirmText, expectedResult);
});
});
suite('ICE contacts edition', function() {
function dismissAndGoBack() {
client.helper.waitForElement(selectors.confirmDismiss).click();
var header = client.helper.waitForElement(selectors.detailsHeader);
actions.wait(0.5).tap(header, 10, 10).perform();
}
function deleteFirstContactFirstTel() {
var firstContact =
client.helper.waitForElement(selectors.listContactFirst);
subject.clickOn(firstContact);
var edit = client.helper.waitForElement(selectors.detailsEditContact);
subject.clickOn(edit);
subject.waitForFadeIn(client.helper.waitForElement(selectors.form));
client.findElement(selectors.formDelFirstTel).click();
var save = client.findElement(selectors.formSave);
save.enabled();
save.click();
}
function closeSettings() {
var close = client.helper.waitForElement(selectors.settingsClose);
subject.clickOn(close);
}
suite('With one phone number', function() {
setup(function() {
addTestContact(true);
setFirstContactAsICE();
clickBackArrow();
closeSettings();
deleteFirstContactFirstTel();
});
test('Confirm window appears with correct message', function() {
var confirmBody = client.helper.waitForElement(selectors.confirmBody);
var expectedResult = subject.l10n(
'/locales-obj/contacts.index.en-US.json',
'ICEContactDelTelAll');
assert.equal(confirmBody.text(), expectedResult);
});
test('Contact is deleted from ICE when no numbers left', function() {
dismissAndGoBack();
openICESettings();
var iceButton1 = client.helper.waitForElement(selectors.iceButton1);
assert.ok(!iceButton1.enabled());
});
test('ICE list empty after removing phone', function() {
dismissAndGoBack();
client.helper.waitForElement(selectors.contactListHeader);
assert.ok(isIceContactsGroupHidden());
});
});
suite('With more than one phone number', function() {
test('Deleting the first number keeps the contact as ICE', function() {
var mozContact = {
tel: [
{
value: '01234',
type: ['home']
},
{
value: '56789',
type:['home']
}
],
givenName: ['Hello'],
familyName: ['World'],
name: ['Hello World']
};
createMozContact(mozContact);
setFirstContactAsICE();
clickBackArrow();
closeSettings();
deleteFirstContactFirstTel();
dismissAndGoBack();
subject.waitForFadeIn(client.helper.waitForElement(selectors.list));
openICESettings();
assertICEContact(1, mozContact.name[0]);
});
});
});
suite('ICE contacts and Merge', function() {
// Merges a duplicate contact and closes the duplicates iframe
function mergeDuplicate() {
var duplicateFrame = client.findElement(selectors.duplicateFrame);
subject.waitForSlideUp(duplicateFrame);
client.switchToFrame(duplicateFrame);
var mergeAction = client.helper.waitForElement(selectors.duplicateMerge);
subject.clickOn(mergeAction);
client.switchToFrame();
client.apps.switchToApp(Contacts.URL, 'contacts');
subject.waitForSlideDown(duplicateFrame);
}
function setTwoICEDuplicates() {
var duplicateContact = testContact;
var contactId1 = createMozContact(duplicateContact);
var contactId2 = createMozContact(duplicateContact);
setICEContacts([contactId1, contactId2]);
}
function addNewAndMatchTest(position) {
addTestContact(true);
mergeDuplicate();
// Now we go back to the ICE settings and check that our ICE remains
subject.waitForFadeIn(client.helper.waitForElement(selectors.list));
openICESettings();
assertICEContact(position, 'Hello');
}
function findDuplicatesAndMatchTest(position) {
var secondContactID = createMozContact({
givenName: ['Hello'],
tel: [{
type: ['mobile'],
value: testContactTelNumber
}]
});
var selectorForSecondContact = 'li[data-uuid="' + secondContactID + '"]';
// Going to the recently created contact
var listContactElement =
client.helper.waitForElement(selectorForSecondContact);
subject.clickOn(listContactElement);
subject.waitSlideLeft('details');
var findDups = client.helper.waitForElement(selectors.findDupsButton);
subject.clickOn(findDups);
mergeDuplicate();
subject.backToList();
openICESettings();
assertICEContact(position, 'Hello');
}
function editAndMatchTest(position) {
subject.addContact({
givenName: 'Good Bye',
tel: '+34638883074'
});
var selectorForSecondContact = 'li[data-group="G"].contact-item';
// Going to the recently created contact
var listContactElement =
client.helper.waitForElement(selectorForSecondContact);
subject.clickOn(listContactElement);
// Editing contact
subject.editContact();
// Adding a tel number equal to the tel number of 'Hello'
client.findElement(selectors.formAddNewTel).click();
client.helper.waitForElement(selectors.formTelNumberSecond).
sendKeys(testContactTelNumber);
// Saving the contact
var save = client.findElement(selectors.formSave);
save.enabled();
save.click();
mergeDuplicate();
subject.backToList();
openICESettings();
assertICEContact(position, 'Good Bye');
}
suite('> 1 ICE Contact. Position 1', function() {
setup(function() {
setICEContact(1);
});
test('> Add a new Contact that matches ICE Contact', function() {
addNewAndMatchTest(1);
assertICEContactNotSet(2);
});
test('> Find duplicates. ICE Contact Matches', function() {
findDuplicatesAndMatchTest(1);
assertICEContactNotSet(2);
});
test('> Edit existing, change data. ICE Matches. ICE changed',
function() {
editAndMatchTest(1);
assertICEContactNotSet(2);
});
});
suite('> 1 ICE Contact. Position 2', function() {
setup(function() {
setICEContact(2);
});
test('> Add a new Contact that matches ICE Contact', function() {
addNewAndMatchTest(2);
assertICEContactNotSet(1);
});
test('> Find duplicates. ICE Contact Matches', function() {
findDuplicatesAndMatchTest(2);
assertICEContactNotSet(1);
});
test('> Edit existing, change data. ICE Matches. ICE changed',
function() {
editAndMatchTest(2);
assertICEContactNotSet(1);
});
});
suite('> 2 ICE Contacts. Change position 1. Keep Position 2', function() {
setup(function() {
createAndSetICEContacts([testContact, {
givenName: ['Aufwiedersehen'],
tel: [{
type: ['mobile'],
value: '9999999'
}]
}]);
});
test('> Add a new Contact that matches ICE Contact', function() {
addNewAndMatchTest(1);
assertICEContact(2, 'Aufwiedersehen');
});
test('> Find duplicates. ICE Contact Matches', function() {
findDuplicatesAndMatchTest(1);
assertICEContact(2, 'Aufwiedersehen');
});
test('> Edit existing, change data. ICE Matches. ICE changed',
function() {
editAndMatchTest(1);
assertICEContact(2, 'Aufwiedersehen');
});
});
suite('> 2 ICE Contacts. Change position 2. Keep Position 1', function() {
setup(function() {
createAndSetICEContacts([{
givenName: ['Aufwiedersehen'],
tel: [{
type: ['mobile'],
value: '9999999'
}]
}, testContact]);
});
test('> Add a new Contact that matches ICE Contact', function() {
addNewAndMatchTest(2);
assertICEContact(1, 'Aufwiedersehen');
});
test('> Find duplicates. ICE Contact Matches', function() {
findDuplicatesAndMatchTest(2);
assertICEContact(1, 'Aufwiedersehen');
});
test('> Edit existing, change data. ICE Matches. ICE changed',
function() {
editAndMatchTest(2);
assertICEContact(1, 'Aufwiedersehen');
});
});
suite('> 2 ICE Contacts which are merged', function() {
setup(function() {
setTwoICEDuplicates();
});
test('> Two ICE Contacts are merged into 1', function() {
// Going to the recently created contact
var listContactElement =
client.helper.waitForElement(selectors.listContactFirst);
subject.clickOn(listContactElement);
subject.waitSlideLeft('details');
var findDups = client.helper.waitForElement(selectors.findDupsButton);
subject.clickOn(findDups);
mergeDuplicate();
subject.backToList();
openICESettings();
assertICEContact(1, 'Hello');
assertICEContactNotSet(2);
});
test('> A third incoming Contact merges two ICE contacts', function() {
addTestContact(true);
mergeDuplicate();
// Now we go back to the ICE settings and check that our ICE remains
subject.waitForFadeIn(client.helper.waitForElement(selectors.list));
openICESettings();
assertICEContact(1, 'Hello');
assertICEContactNotSet(2);
});
});
});
});