@quantlab/handsontable
Version:
Spreadsheet-like data grid editor that provides copy/paste functionality compatible with Excel/Google Docs
183 lines (128 loc) • 5.73 kB
JavaScript
;
describe('persistentState', function () {
var id = 'testContainer';
beforeEach(function () {
this.$container = $('<div id="' + id + '"></div>').appendTo('body');
});
afterEach(function () {
if (this.$container) {
destroy();
this.$container.remove();
}
window.localStorage.clear();
});
it('should save data, when persistentStateSave is run', function () {
var hot = handsontable({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData', 100);
var rawStoredData = window.localStorage[id + '_testData'];
expect(rawStoredData).toBeDefined();
var storedData = JSON.parse(rawStoredData);
expect(storedData).toEqual(100);
});
it('should NOT save data, when persistentStateSave is run, if plugin is not enabled', function () {
var hot = handsontable({
persistentState: false
});
hot.runHooks('persistentStateSave', 'testData', 100);
var rawStoredData = window.localStorage[id + '_testData'];
expect(rawStoredData).toBeUndefined();
});
it('should load data, when persistentStateLoad is run', function () {
var hot = handsontable({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData', 100);
var storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toEqual(100);
});
it('should NOT load data, when persistentStateLoad is run, if plugin is not enabled', function () {
var hot = handsontable({
persistentState: false
});
// We have to manually save data, as persistentStateSave won't work when the plugin is disabled
window.localStorage[id + '_testData'] = JSON.stringify(100);
var storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toBeUndefined();
});
it('should clear the data under the given key, when persistentStateReset is run', function () {
var hot = handsontable({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData', 100);
var storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toEqual(100);
hot.runHooks('persistentStateReset', 'testData');
storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toBeUndefined();
});
it('should NOT clear the data under the given key, when persistentStateReset is run', function () {
var hot = handsontable({
persistentState: false
});
// We have to manually save data, as persistentStateSave won't work when the plugin is disabled
window.localStorage[id + '_testData'] = JSON.stringify(100);
var storedData = {};
hot.runHooks('persistentStateReset', 'testData');
expect(JSON.parse(window.localStorage[id + '_testData'])).toEqual(100);
});
it('should clear all data, when persistentStateReset is run without specifying a key to reset', function () {
var hot = handsontable({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData0', 100);
hot.runHooks('persistentStateSave', 'testData1', 'foo');
hot.runHooks('persistentStateSave', 'testData2', 200);
var storedData = [{}, {}, {}];
hot.runHooks('persistentStateLoad', 'testData0', storedData[0]);
hot.runHooks('persistentStateLoad', 'testData1', storedData[1]);
hot.runHooks('persistentStateLoad', 'testData2', storedData[2]);
expect(storedData[0].value).toEqual(100);
expect(storedData[1].value).toEqual('foo');
expect(storedData[2].value).toEqual(200);
hot.runHooks('persistentStateReset');
storedData = [{}, {}, {}];
hot.runHooks('persistentStateLoad', 'testData0', storedData[0]);
hot.runHooks('persistentStateLoad', 'testData1', storedData[1]);
hot.runHooks('persistentStateLoad', 'testData2', storedData[2]);
expect(storedData[0].value).toBeUndefined();
expect(storedData[1].value).toBeUndefined();
expect(storedData[2].value).toBeUndefined();
});
it('should allow to DISABLE plugin with updateSettings', function () {
var hot = handsontable({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData', 100);
var storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toEqual(100);
updateSettings({
persistentState: false
});
storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toBeUndefined();
});
it('should allow to ENABLE plugin with updateSettings', function () {
var hot = handsontable({
persistentState: false
});
hot.runHooks('persistentStateSave', 'testData', 100);
var storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toBeUndefined();
updateSettings({
persistentState: true
});
hot.runHooks('persistentStateSave', 'testData', 100);
storedData = {};
hot.runHooks('persistentStateLoad', 'testData', storedData);
expect(storedData.value).toEqual(100);
});
});