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.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,563 @@
'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);
});
});
});
});