VulpesOS/gaia/apps/sharedtest/test/unit/contact2vcard_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

231 lines
8.3 KiB
JavaScript
Executable file

/* global ContactToVcard, ContactToVcardBlob, MockContactAllFields,
MocksHelper, mozContact */
'use strict';
require('/shared/test/unit/mocks/mock_moz_contact.js');
require('/shared/test/unit/mocks/mock_contact_all_fields.js');
require('/shared/js/contact2vcard.js');
require('/shared/js/setImmediate.js');
var mocksHelperForContact2vcard = new MocksHelper([
'mozContact'
]).init();
suite('mozContact to vCard', function() {
function contains(vcard) {
return function(str) {
return vcard.toLowerCase().indexOf(str.toLowerCase()) !== -1;
};
}
var b64 = 'R0lGODlhEAAQAMQfAKxoR8VkLxFw1feVPITSWv+eQv7Qo0Cc6OyIN/v7+3PLTSCZ' +
'EFy17Wa6XuT1x2bGQ3nNUU6vRXPAa9mLXMTkwJZEHJt7LL5aJ/z8/O2KONx3L/ubP/r6+rtV' +
'I////////yH5BAEAAB8ALAAAAAAQABAAAAWD4CeOZDlimOitnvlhXefFiyCs3NkZMe9QDMGi' +
'k3t1BgZDIcZgHCCxHAyxKRQmnYOkoYgaNYMNr3JoEB6dDBGmyWxihwNBgVZz2Js3YB+JWNpr' +
'HW15YgA2FxkaRB8JgoQxHQEbdiKNg4R5iYuVgpcZmkUjHDEapYqbJRyjkKouoqqhIyEAOw==';
mocksHelperForContact2vcard.attachTestHelpers();
suite('mozContact to vCard', function() {
test('Convert a single contact to a vcard', function(done) {
var mc = new MockContactAllFields();
mc.anniversary = new Date(0);
var contacts = [mc];
var str = '';
var count = 0;
ContactToVcard([mc], function append(vcards, nCards) {
str += vcards;
count += nCards;
}, function success() {
done(function() {
var _contains = contains(str);
assert.equal(count, contacts.length);
assert.ok(_contains('version:3.0'));
assert.ok(_contains('fn:pepito grillo'));
assert.ok(_contains('n:grillo;pepito;green;mr.;;'));
assert.ok(_contains('nickname:pg'));
assert.ok(_contains('category:favorite'));
assert.ok(_contains('org:test org'));
assert.ok(_contains('title:sr. software architect'));
assert.ok(_contains('note:note 1'));
assert.ok(_contains('bday:1970-01-01T00:00:00Z'));
assert.ok(_contains('anniversary:1970-01-01T00:00:00Z'));
assert.ok(_contains('photo;encoding=b;type=image/gif:' + b64));
assert.ok(_contains('email;type=home:test@test.com'));
assert.ok(_contains('email;type=work,pref:test@work.com'));
assert.ok(_contains('tel;type=cell,pref:+346578888888'));
assert.ok(_contains('tel;type=home:+3120777777'));
assert.ok(_contains('adr;type=home,pref:;;gotthardstrasse 22;' +
'chemnitz;chemnitz;09034;germany'));
assert.ok(!_contains('url;type=fb_profile_photo:https://abcd1.jpg'));
});
});
});
test('Convert a single contact to a vcard without photo', function(done) {
var mc = new MockContactAllFields();
mc.anniversary = new Date(0);
var contacts = [mc];
var str = '';
var count = 0;
ContactToVcard([mc], function append(vcards, nCards) {
str += vcards;
count += nCards;
}, function success() {
done(function() {
var _contains = contains(str);
assert.equal(count, contacts.length);
assert.ok(_contains('version:3.0'));
assert.ok(_contains('fn:pepito grillo'));
assert.ok(_contains('n:grillo;pepito;green;mr.;;'));
assert.ok(_contains('nickname:pg'));
assert.ok(_contains('category:favorite'));
assert.ok(_contains('org:test org'));
assert.ok(_contains('title:sr. software architect'));
assert.ok(_contains('note:note 1'));
assert.ok(_contains('bday:1970-01-01T00:00:00Z'));
assert.ok(_contains('anniversary:1970-01-01T00:00:00Z'));
assert.ok(!_contains('photo;encoding=b;type=image/gif:' + b64));
assert.ok(_contains('email;type=home:test@test.com'));
assert.ok(_contains('email;type=work,pref:test@work.com'));
assert.ok(_contains('tel;type=cell,pref:+346578888888'));
assert.ok(_contains('tel;type=home:+3120777777'));
assert.ok(_contains('adr;type=home,pref:;;gotthardstrasse 22;' +
'chemnitz;chemnitz;09034;germany'));
assert.ok(!_contains('url;type=fb_profile_photo:https://abcd1.jpg'));
});
},
null,
true
);
});
test('Convert multiple contacts to a vcard', function(done) {
var mc = new MockContactAllFields();
mc.anniversary = new Date(0);
var contacts = [mc, mc];
var str = '';
var count = 0;
ContactToVcard(contacts, function(vcards, nCards) {
str += vcards;
count += nCards;
}, function success() {
done(function() {
var _contains = contains(str);
assert.equal(count, contacts.length);
assert.ok(_contains('fn:pepito grillo'));
assert.ok(_contains('n:grillo;pepito;green;mr.;;'));
assert.ok(_contains('nickname:pg'));
assert.ok(_contains('category:favorite'));
assert.ok(_contains('org:test org'));
assert.ok(_contains('title:sr. software architect'));
assert.ok(_contains('note:note 1'));
assert.ok(_contains('bday:1970-01-01T00:00:00Z'));
assert.ok(_contains('anniversary:1970-01-01T00:00:00Z'));
assert.ok(_contains('photo;encoding=b;type=image/gif:' + b64));
assert.ok(_contains('email;type=home:test@test.com'));
assert.ok(_contains('tel;type=cell,pref:+346578888888'));
assert.ok(_contains('tel;type=home:+3120777777'));
assert.ok(_contains('adr;type=home,pref:;;gotthardstrasse 22;' +
'chemnitz;chemnitz;09034;germany'));
assert.ok(!_contains('url;type=fb_profile_photo:https://abcd1.jpg'));
});
}, b64.length / 2); // This ensures at least two batches
});
test('Convert an empty contact to a vcard', function(done) {
var contacts = [new mozContact()];
var str = '';
var count = 0;
ContactToVcard(contacts, function append(vcards, nCards) {
str += vcards;
count += nCards;
}, function success() {
done(function() {
assert.equal(count, contacts.length);
assert.strictEqual(str, '');
});
});
});
test('Convert contact to vcard blob', function(done) {
var mc = new MockContactAllFields();
var contacts = [mc];
var str = '';
var count = 0;
ContactToVcardBlob(contacts, function(blob) {
assert.isNotNull(blob);
// Fetch the same content as a normal vcard
ContactToVcard(contacts, function append(vcards, nCards) {
str += vcards;
count += nCards;
}, function success() {
// Read the content and verify that is what we generate
var reader = new FileReader();
reader.addEventListener('loadend', function() {
var blobContent = reader.result;
done(function() {
// Size and content of the blob should match that of the string
assert.equal(str.length, blob.size);
assert.equal(str, blobContent);
});
});
reader.readAsText(blob);
});
});
});
});
suite('MIME types >', function() {
var contact;
suiteSetup(function() {
contact = new MockContactAllFields(true);
contact.photo = null;
});
test('> Contact transformed to vcard. No options', function(done) {
ContactToVcardBlob([contact], function blobReady(vcardBlob) {
assert.isTrue(vcardBlob.size > 0);
assert.equal(vcardBlob.type, 'text/vcard; charset=utf-8');
done();
});
});
test('> Contact transformed to vcard. Only MIME type', function(done) {
var targetType = 'text/x-vcard';
ContactToVcardBlob([contact], function blobReady(vcardBlob) {
assert.isTrue(vcardBlob.size > 0);
assert.equal(vcardBlob.type, targetType + '; charset=utf-8');
done();
}, { type: targetType });
});
test('> Contact transformed to vcard. MIME type & charset',
function(done) {
var targetType = 'text/x-vcard; charset=iso-8859-1';
ContactToVcardBlob([contact], function blobReady(vcardBlob) {
assert.isTrue(vcardBlob.size > 0);
assert.equal(vcardBlob.type, targetType);
done();
}, { type: targetType });
});
});
});