describe('persistentState', function () {
  var id = 'testContainer';
  beforeEach(function () {
    this.$container = $("<div id=\"".concat(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["".concat(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["".concat(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["".concat(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["".concat(id, "_testData")] = JSON.stringify(100);
    hot.runHooks('persistentStateReset', 'testData');
    expect(JSON.parse(window.localStorage["".concat(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);
  });
});