VulpesOS/gaia/apps/system/test/unit/newsletter_manager_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

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();
});
});
});
});
});