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:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
143
gaia/apps/system/test/unit/newsletter_manager_test.js
Executable file
143
gaia/apps/system/test/unit/newsletter_manager_test.js
Executable file
|
|
@ -0,0 +1,143 @@
|
|||
/* 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();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
Loading…
Reference in a new issue