Bug 1084384: support alternate phone number values for Google import. r=abr

This commit is contained in:
Mike de Boer 2014-10-17 17:22:53 +02:00
Родитель 7df061c788
Коммит 7c2f78133d
4 изменённых файлов: 45 добавлений и 12 удалений

Просмотреть файл

@ -448,10 +448,13 @@ this.GoogleImporter.prototype = {
if (phoneNodes.length) { if (phoneNodes.length) {
contact.tel = []; contact.tel = [];
for (let [,phoneNode] of Iterator(phoneNodes)) { for (let [,phoneNode] of Iterator(phoneNodes)) {
let phoneNumber = phoneNode.hasAttribute("uri") ?
phoneNode.getAttribute("uri").replace("tel:", "") :
phoneNode.firstChild.nodeValue;
contact.tel.push({ contact.tel.push({
pref: (phoneNode.getAttribute("primary") == "true"), pref: (phoneNode.getAttribute("primary") == "true"),
type: [getFieldType(phoneNode)], type: [getFieldType(phoneNode)],
value: phoneNode.getAttribute("uri").replace("tel:", "") value: phoneNumber
}); });
} }
} }

Просмотреть файл

@ -17,19 +17,25 @@ function promiseImport() {
}); });
} }
const kContactsCount = 7;
add_task(function* test_GoogleImport() { add_task(function* test_GoogleImport() {
let stats; let stats;
// An error may throw and the test will fail when that happens. // An error may throw and the test will fail when that happens.
stats = yield promiseImport(); stats = yield promiseImport();
let contactsCount = mockDb.size;
// Assert the world. // Assert the world.
Assert.equal(stats.total, 6, "Five contacts should get processed"); Assert.equal(stats.total, contactsCount, "Five contacts should get processed");
Assert.equal(stats.success, 6, "Five contacts should be imported"); Assert.equal(stats.success, contactsCount, "Five contacts should be imported");
yield promiseImport(); yield promiseImport();
Assert.equal(Object.keys(mockDb._store).length, 6, "Database should contain only five contact after reimport"); Assert.equal(Object.keys(mockDb._store).length, contactsCount, "Database should be the same size after reimport");
let c = mockDb._store[mockDb._next_guid - 6]; let currentContact = contactsCount;
let c = mockDb._store[mockDb._next_guid - currentContact];
Assert.equal(c.name[0], "John Smith", "Full name should match"); Assert.equal(c.name[0], "John Smith", "Full name should match");
Assert.equal(c.givenName[0], "John", "Given name should match"); Assert.equal(c.givenName[0], "John", "Given name should match");
Assert.equal(c.familyName[0], "Smith", "Family name should match"); Assert.equal(c.familyName[0], "Smith", "Family name should match");
@ -39,7 +45,7 @@ add_task(function* test_GoogleImport() {
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/0", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/0", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - 5]; c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "Jane Smith", "Full name should match"); Assert.equal(c.name[0], "Jane Smith", "Full name should match");
Assert.equal(c.givenName[0], "Jane", "Given name should match"); Assert.equal(c.givenName[0], "Jane", "Given name should match");
Assert.equal(c.familyName[0], "Smith", "Family name should match"); Assert.equal(c.familyName[0], "Smith", "Family name should match");
@ -49,7 +55,7 @@ add_task(function* test_GoogleImport() {
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/1", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/1", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - 4]; c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "Davy Randall Jones", "Full name should match"); Assert.equal(c.name[0], "Davy Randall Jones", "Full name should match");
Assert.equal(c.givenName[0], "Davy Randall", "Given name should match"); Assert.equal(c.givenName[0], "Davy Randall", "Given name should match");
Assert.equal(c.familyName[0], "Jones", "Family name should match"); Assert.equal(c.familyName[0], "Jones", "Family name should match");
@ -59,7 +65,7 @@ add_task(function* test_GoogleImport() {
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/2", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/2", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - 3]; c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "noname@example.com", "Full name should match"); Assert.equal(c.name[0], "noname@example.com", "Full name should match");
Assert.equal(c.email[0].type, "other", "Email type should match"); Assert.equal(c.email[0].type, "other", "Email type should match");
Assert.equal(c.email[0].value, "noname@example.com", "Email should match"); Assert.equal(c.email[0].value, "noname@example.com", "Email should match");
@ -67,7 +73,7 @@ add_task(function* test_GoogleImport() {
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/3", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/3", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - 2]; c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "lycnix", "Full name should match"); Assert.equal(c.name[0], "lycnix", "Full name should match");
Assert.equal(c.email[0].type, "other", "Email type should match"); Assert.equal(c.email[0].type, "other", "Email type should match");
Assert.equal(c.email[0].value, "lycnix", "Email should match"); Assert.equal(c.email[0].value, "lycnix", "Email should match");
@ -75,11 +81,19 @@ add_task(function* test_GoogleImport() {
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/7", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/7", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - 1]; c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "+31-6-12345678", "Full name should match"); Assert.equal(c.name[0], "+31-6-12345678", "Full name should match");
Assert.equal(c.tel[0].type, "mobile", "Email type should match"); Assert.equal(c.tel[0].type, "mobile", "Phone type should match");
Assert.equal(c.tel[0].value, "+31-6-12345678", "Email should match"); Assert.equal(c.tel[0].value, "+31-6-12345678", "Phone should match");
Assert.equal(c.tel[0].pref, false, "Pref should match"); Assert.equal(c.tel[0].pref, false, "Pref should match");
Assert.equal(c.category[0], "google", "Category should match"); Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/8", "UID should match and be scoped to provider"); Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/8", "UID should match and be scoped to provider");
c = mockDb._store[mockDb._next_guid - (--currentContact)];
Assert.equal(c.name[0], "215234523452345", "Full name should match");
Assert.equal(c.tel[0].type, "mobile", "Phone type should match");
Assert.equal(c.tel[0].value, "215234523452345", "Phone should match");
Assert.equal(c.tel[0].pref, false, "Pref should match");
Assert.equal(c.category[0], "google", "Category should match");
Assert.equal(c.id, "http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/6", "UID should match and be scoped to provider");
}); });

Просмотреть файл

@ -102,4 +102,16 @@
<link href="https://www.google.com/m8/feeds/contacts/tester%40mochi.com/full/8" rel="edit" type="application/atom+xml"/> <link href="https://www.google.com/m8/feeds/contacts/tester%40mochi.com/full/8" rel="edit" type="application/atom+xml"/>
<gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile" uri="tel:+31-6-12345678">0612345678</gd:phoneNumber> <gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile" uri="tel:+31-6-12345678">0612345678</gd:phoneNumber>
</entry> </entry>
<entry gd:etag="&quot;SX8-ejVSLit7I2A9XRdQFUkDRgY.&quot;">
<id>http://www.google.com/m8/feeds/contacts/tester%40mochi.com/base/6</id>
<updated>2014-10-17T12:32:08.152Z</updated>
<app:edited xmlns:app="http://www.w3.org/2007/app">2014-10-17T12:32:08.152Z</app:edited>
<category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact"/>
<title/>
<link href="https://www.google.com/m8/feeds/photos/media/tester%40mochi.com/6" rel="http://schemas.google.com/contacts/2008/rel#photo" type="image/*"/>
<link href="https://www.google.com/m8/feeds/contacts/tester%40mochi.com/full/6" rel="self" type="application/atom+xml"/>
<link href="https://www.google.com/m8/feeds/contacts/tester%40mochi.com/full/6" rel="edit" type="application/atom+xml"/>
<gd:phoneNumber rel="http://schemas.google.com/g/2005#mobile">215234523452345</gd:phoneNumber>
<gContact:groupMembershipInfo deleted="false" href="http://www.google.com/m8/feeds/groups/tester%40mochi.com/base/6"/>
</entry>
</feed> </feed>

Просмотреть файл

@ -218,6 +218,10 @@ const mockDb = {
_store: { }, _store: { },
_next_guid: 1, _next_guid: 1,
get size() {
return Object.getOwnPropertyNames(this._store).length;
},
add: function(details, callback) { add: function(details, callback) {
if (!("id" in details)) { if (!("id" in details)) {
callback(new Error("No 'id' field present")); callback(new Error("No 'id' field present"));