VulpesOS/gaia/apps/homescreen/test/unit/settings_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

238 lines
6.3 KiB
JavaScript
Executable file

/* global mockLocalStorage, MockNavigatorDatastore, MockDatastore, Settings */
/* jshint nonew: false */
'use strict';
require('mocks/mock_localStorage.js');
require('/shared/test/unit/mocks/mock_navigator_datastore.js');
require('/js/settings.js');
suite('Settings', () => {
const DEFAULT_SETTINGS = '{"version":0,"small":false,"scrollSnapping":false}';
var realLocalStorage;
var realNavigatorDatastores;
setup(() => {
realNavigatorDatastores = navigator.getDataStores;
navigator.getDataStores = MockNavigatorDatastore.getDataStores;
realLocalStorage = Object.getOwnPropertyDescriptor(window, 'localStorage');
Object.defineProperty(window, 'localStorage', {
configurable: true,
get: () => mockLocalStorage
});
});
teardown(() => {
navigator.getDataStores = realNavigatorDatastores;
Object.defineProperty(window, 'localStorage', realLocalStorage);
});
suite('Settings constructor', () => {
test('attempts to retrieve existing settings', () => {
var getItemStub = sinon.stub(window.localStorage, 'getItem');
new Settings();
assert.isTrue(getItemStub.calledWith('settings'));
getItemStub.restore();
});
test('sets firstRun to true if no settings', () => {
mockLocalStorage.removeItem('settings');
var settings = new Settings();
assert.isTrue(settings.firstRun);
});
suite('settings exist', () => {
setup(() => {
mockLocalStorage.setItem('settings', DEFAULT_SETTINGS);
});
test('firstRun is false', () => {
var settings = new Settings();
assert.isFalse(settings.firstRun);
});
test('restores settings', () => {
var settings = new Settings();
assert.isFalse(settings.small);
assert.isFalse(settings.scrollSnapping);
mockLocalStorage.setItem('settings',
'{"version":0,"small":true,"scrollSnapping":true}');
settings = new Settings();
assert.isTrue(settings.small);
assert.isTrue(settings.scrollSnapping);
});
test('should not restore data if version number differs', () => {
mockLocalStorage.setItem('settings', '{"version":500,"small":true}');
var settings = new Settings();
assert.isFalse(settings.small);
});
test('opens settings datastore', () => {
var getDataStoresStub = sinon.stub(navigator, 'getDataStores',
() => Promise.reject());
new Settings();
assert.isTrue(getDataStoresStub.calledWith('homescreen_settings'));
getDataStoresStub.restore();
});
suite('datastore settings', () => {
var target;
var cols;
var page;
var afterGetCall;
var datastoreGetStub;
setup(() => {
cols = 3;
page = false;
datastoreGetStub = sinon.stub(MockDatastore, 'get', id => {
var returnData;
var returnObject = {
then: callback => {
callback(returnData);
if (id === target) {
afterGetCall();
}
}
};
switch (id) {
case 'grid.cols':
returnData = cols;
break;
case 'grid.paging':
returnData = page;
break;
}
return returnObject;
});
});
teardown(() => {
datastoreGetStub.restore();
});
test('restores columns setting', done => {
var settings;
target = 'grid.cols';
afterGetCall = () => {
try {
assert.isFalse(settings.small);
} catch(e) {
done(e);
}
afterGetCall = () => {
done(() => {
assert.isTrue(settings.small);
});
};
cols = 4;
settings = new Settings();
};
settings = new Settings();
});
test('responds to columns setting change', done => {
var settings;
target = 'grid.cols';
afterGetCall = () => {
try {
assert.isFalse(settings.small);
} catch(e) {
done(e);
}
var dispatchEventStub = sinon.stub(window, 'dispatchEvent');
afterGetCall = () => {
done(() => {
assert.isTrue(dispatchEventStub.called);
assert.isTrue(settings.small);
dispatchEventStub.restore();
});
};
cols = 4;
MockDatastore._cb({ id: 'grid.cols' });
};
settings = new Settings();
});
test('restores paging setting', done => {
var settings;
target = 'grid.paging';
afterGetCall = () => {
try {
assert.isFalse(settings.scrollSnapping);
} catch(e) {
done(e);
}
afterGetCall = () => {
done(() => {
assert.isTrue(settings.scrollSnapping);
});
};
page = true;
settings = new Settings();
};
settings = new Settings();
});
test('responds to paging setting change', done => {
var settings;
target = 'grid.paging';
afterGetCall = () => {
try {
assert.isFalse(settings.scrollSnapping);
} catch(e) {
done(e);
}
var dispatchEventStub = sinon.stub(window, 'dispatchEvent');
afterGetCall = () => {
done(() => {
assert.isTrue(dispatchEventStub.called);
assert.isTrue(settings.scrollSnapping);
dispatchEventStub.restore();
});
};
page = true;
MockDatastore._cb({ id: 'grid.paging' });
};
settings = new Settings();
});
});
});
});
suite('Settings#save()', () => {
test('saves columns setting', () => {
mockLocalStorage.setItem('settings', DEFAULT_SETTINGS);
var settings = new Settings();
settings.small = true;
settings.save();
var settingsObj = JSON.parse(mockLocalStorage.getItem('settings'));
assert.isTrue(settingsObj.small);
});
});
});