Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
238 lines
6.3 KiB
JavaScript
Executable file
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);
|
|
});
|
|
});
|
|
});
|