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

228 lines
6.9 KiB
JavaScript
Executable file

/* globals Service, MocksHelper, MockAppWindowManager */
'use strict';
requireApp('system/test/unit/mock_app_window_manager.js');
require('/shared/test/unit/mocks/mock_lazy_loader.js');
var mocksForService = new MocksHelper([
'AppWindowManager', 'LazyLoader'
]).init();
suite('system/Service', function() {
var clock;
mocksForService.attachTestHelpers();
setup(function(done) {
clock = this.sinon.useFakeTimers();
requireApp('system/js/service.js', done);
window.appWindowManager = new MockAppWindowManager();
});
suite('States', function() {
var fakeFtuLauncher;
setup(function() {
fakeFtuLauncher = {
_upgrading: false,
name: 'FakeFtuLauncher',
isFtuRunning: false,
isUpgrading: function() {
return this._upgrading;
},
reachStep: function(step) {
if (step === '#wifi') {
return true;
} else {
return false;
}
}
};
});
teardown(function() {
Service._states.clear();
Service._statesByState.clear();
});
test('State provider is valid', function() {
Service.registerState('isFtuRunning', fakeFtuLauncher);
Service.registerState('isUpgrading', fakeFtuLauncher);
Service.registerState('reachStep', fakeFtuLauncher);
assert.equal(Service.query('isFtuRunning'), false);
assert.equal(Service.query('isUpgrading'), false);
assert.equal(Service.query('FakeFtuLauncher.isFtuRunning'), false);
assert.equal(Service.query('FakeFtuLauncher.isUpgrading'), false);
fakeFtuLauncher.isFtuRunning = true;
assert.equal(Service.query('isFtuRunning'), true);
assert.equal(Service.query('FakeFtuLauncher.isFtuRunning'), true);
fakeFtuLauncher._upgrading = true;
assert.equal(Service.query('isUpgrading'), true);
assert.equal(Service.query('FakeFtuLauncher.isUpgrading'), true);
assert.equal(Service.query('reachStep', '#wifi'), true);
assert.equal(Service.query('reachStep', '#languages'), false);
});
test('State provider is invalid', function() {
assert.equal(Service.query('isFtuRunning'), undefined);
assert.equal(Service.query('FakeFtuLauncher.isFtuRunning'), undefined);
});
});
suite('Services', function() {
teardown(function() {
Service._services.clear();
Service._providers.clear();
});
suite('Promise in Promise', function() {
var fakeSettingsServer = {
get: function() {
this.promise = new Promise(function(resolve, reject) {
this.resolve = resolve;
this.reject = reject;
}.bind(this));
return this.promise;
}
};
test('Success', function(done) {
Service.register('get', fakeSettingsServer);
Service.request('get').then(function(result) {
assert.equal(result, 2);
done();
});
fakeSettingsServer.resolve(2);
});
test('Error', function(done) {
Service.register('get', fakeSettingsServer);
Service.request('get').then(function(result) {
assert.isFalse(true);
}).catch(function(error) {
assert.equal(error, 'uhhhhh');
done();
});
fakeSettingsServer.reject('uhhhhh');
});
test('Success: offline and then online', function(done) {
Service.request('get').then(function(result) {
assert.equal(result, 3);
done();
});
Service.register('get', fakeSettingsServer);
fakeSettingsServer.resolve(3);
});
test('Error: offline and then online', function(done) {
Service.request('get').then(function(result) {
assert.isFalse(true);
}).catch(function(error) {
assert.equal(error, 'oooooh');
done();
});
Service.register('get', fakeSettingsServer);
fakeSettingsServer.reject('oooooh');
});
});
test('Service provider is online.', function(done) {
var spy = this.sinon.spy();
var fakeLockscreenWindowManager = {
lock: spy
};
Service.register('lock', fakeLockscreenWindowManager);
Service.request('lock').then(function() {
assert.isTrue(spy.called);
done();
});
});
test('Service provider is offline.', function() {
Service.request('lock');
var fakeLockscreenWindowManager = {
name: 'fakeLWM',
lock: function() {}
};
var stubLock = this.sinon.stub(fakeLockscreenWindowManager, 'lock');
Service.register('lock', fakeLockscreenWindowManager);
assert.isTrue(stubLock.called);
});
test('Specific service provider is online.', function() {
var fakeLockscreenWindowManager = {
name: 'fakeLWM',
lock: function() {}
};
Service.register('lock', fakeLockscreenWindowManager);
var stubLock = this.sinon.stub(fakeLockscreenWindowManager, 'lock');
Service.request('fakeLWM:lock');
assert.isTrue(stubLock.called);
});
test('Specific service provider was ever online.', function() {
var fakeLockscreenWindowManager = {
name: 'fakeLWM',
lock: function() {}
};
Service.register('lock', fakeLockscreenWindowManager);
var stubLock = this.sinon.stub(fakeLockscreenWindowManager, 'lock');
Service.unregister('lock', fakeLockscreenWindowManager);
Service.request('fakeLWM:lock');
assert.isFalse(stubLock.called);
});
test('Specific service provider is offline.', function() {
Service.request('fakeLWM:lock');
var fakeLockscreenWindowManager = {
name: 'fakeLWM',
lock: function() {}
};
var stubLock = this.sinon.stub(fakeLockscreenWindowManager, 'lock');
Service.register('lock', fakeLockscreenWindowManager);
assert.isTrue(stubLock.called);
});
test('Passing arguments to specific service provider.', function() {
var client = {
value: null,
observe: function(value) {
this.value = value;
}
};
Service.request('addObserver', client);
var fakeSettingsServer = {
name: 'fakeSettingsServer',
addObserver: function(client) {
this.client = client;
}
};
Service.register('addObserver', fakeSettingsServer);
fakeSettingsServer.client.observe(2);
assert.equal(client.value, 2);
});
test('Chaining promises.', function(done) {
var client = {
value: 1,
read: function(value) {
var self = this;
Service.request('read').then(function(value) {
self.value = value;
assert.equal(self.value, 2);
done();
});
}
};
var fakeSettingsServer = {
name: 'fakeSettingsServer',
read: function() {
return new Promise(function(resolve) {
resolve(2);
});
}
};
client.read();
Service.register('read', fakeSettingsServer);
});
});
});