Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
231 lines
8.3 KiB
JavaScript
Executable file
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 });
|
|
});
|
|
|
|
});
|
|
});
|