Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
143 lines
4 KiB
JavaScript
Executable file
143 lines
4 KiB
JavaScript
Executable file
/* global MockDatastore, MockNavigatorDatastore,
|
|
MockBasket, MockL10n, MocksHelper,
|
|
NewsletterManager */
|
|
|
|
'use strict';
|
|
|
|
require('/shared/test/unit/mocks/mock_basket_client.js');
|
|
require('/shared/test/unit/mocks/mock_lazy_loader.js');
|
|
require('/shared/test/unit/mocks/mock_navigator_datastore.js');
|
|
|
|
require('/shared/test/unit/mocks/mock_l10n.js');
|
|
requireApp('system/test/unit/mock_ftu_launcher.js');
|
|
|
|
var mocksHelperForNewsletterManager = new MocksHelper([
|
|
'FtuLauncher',
|
|
'Datastore',
|
|
'LazyLoader',
|
|
'Basket'
|
|
]).init();
|
|
|
|
suite('Newsletter Manager >', function() {
|
|
var realL10n, mockOnce,
|
|
realOnLine,
|
|
realDatastores;
|
|
|
|
mocksHelperForNewsletterManager.attachTestHelpers();
|
|
|
|
suiteSetup(function(done) {
|
|
realOnLine = Object.getOwnPropertyDescriptor(navigator, 'onLine');
|
|
Object.defineProperty(navigator, 'onLine', {
|
|
fakeOnLine: false,
|
|
configurable: true,
|
|
get: function() { return this.fakeOnLine; },
|
|
set: function(status) { this.fakeOnLine = status; }
|
|
});
|
|
|
|
realL10n = navigator.mozL10n;
|
|
mockOnce = MockL10n.once;
|
|
navigator.mozL10n = MockL10n;
|
|
navigator.mozL10n.once = function(callback) {
|
|
callback();
|
|
};
|
|
|
|
realDatastores = navigator.getDataStores;
|
|
navigator.getDataStores = MockNavigatorDatastore.getDataStores;
|
|
|
|
MockBasket._dataStore= MockDatastore;
|
|
|
|
requireApp('system/js/newsletter_manager.js', done);
|
|
});
|
|
|
|
suiteTeardown(function() {
|
|
if (realOnLine) {
|
|
Object.defineProperty(navigator, 'onLine', realOnLine);
|
|
}
|
|
MockL10n.once = mockOnce;
|
|
navigator.mozL10n = realL10n;
|
|
navigator.getDataStores = realDatastores;
|
|
});
|
|
|
|
suite('DataStore accessed >', function() {
|
|
var onlineListener;
|
|
var email = {
|
|
'newsletter_email': 'email@ser.er'
|
|
};
|
|
|
|
setup(function() {
|
|
this.sinon.spy(MockDatastore, 'get');
|
|
this.sinon.spy(NewsletterManager, 'sendNewsletter');
|
|
onlineListener = this.sinon.stub(window, 'addEventListener');
|
|
});
|
|
|
|
teardown(function() {
|
|
MockDatastore.clear();
|
|
});
|
|
|
|
test('Recovered email >', function(done) {
|
|
MockDatastore.add({
|
|
'emailSent': true
|
|
}, 1).then(NewsletterManager.start).then(function() {
|
|
sinon.assert.calledWith(MockDatastore.get, 1);
|
|
done();
|
|
}, done);
|
|
});
|
|
|
|
test('Do not send if email already sent >', function(done) {
|
|
MockDatastore.add({
|
|
'emailSent': true
|
|
}, 1).then(NewsletterManager.start).then(function() {
|
|
sinon.assert.notCalled(NewsletterManager.sendNewsletter);
|
|
done();
|
|
}, done);
|
|
});
|
|
|
|
test('Send it if online >', function(done) {
|
|
navigator.onLine = true;
|
|
MockDatastore.add(email, 1).then(NewsletterManager.start).then(
|
|
function() {
|
|
sinon.assert.calledWith(NewsletterManager.sendNewsletter,
|
|
email.newsletter_email);
|
|
done();
|
|
}, done);
|
|
});
|
|
|
|
test('Wait for connection if offline >', function(done) {
|
|
navigator.onLine = false;
|
|
MockDatastore.add(email, 1).then(NewsletterManager.start).then(
|
|
function() {
|
|
sinon.assert.notCalled(NewsletterManager.sendNewsletter);
|
|
sinon.assert.called(window.addEventListener, 'online');
|
|
done();
|
|
}, done);
|
|
});
|
|
|
|
test('Online change triggers listener >', function(done) {
|
|
navigator.onLine = false;
|
|
onlineListener.yields();
|
|
MockDatastore.add(email, 1).then(NewsletterManager.start).then(
|
|
function() {
|
|
sinon.assert.called(NewsletterManager.sendNewsletter);
|
|
done();
|
|
}, done);
|
|
});
|
|
|
|
suite('Sending the info >', function() {
|
|
var updatedEmail = {
|
|
'emailSent': true
|
|
};
|
|
|
|
setup(function() {
|
|
sinon.spy(MockDatastore, 'put');
|
|
});
|
|
|
|
test('Datastore updated when email sent >', function(done) {
|
|
NewsletterManager.sendNewsletter(email).then(function() {
|
|
sinon.assert.calledWith(MockDatastore.put, updatedEmail);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|