/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */

import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
import LocalStorage from 'vault/lib/local-storage';

module('Unit | lib | local-storage', function (hooks) {
  setupTest(hooks);

  hooks.beforeEach(function () {
    window.localStorage.clear();
  });

  test('it does not error if nothing is in local storage', async function (assert) {
    assert.expect(1);
    assert.strictEqual(
      LocalStorage.cleanupStorage('something', 'something-key'),
      undefined,
      'returns undefined and does not throw an error when method is called and nothing exist in localStorage.'
    );
  });

  test('it does not remove anything in localStorage that does not start with the string or we have specified to keep.', async function (assert) {
    assert.expect(3);
    LocalStorage.setItem('string-key-remove', 'string-key-remove-value');
    LocalStorage.setItem('beep-boop-bop-key', 'beep-boop-bop-value');
    LocalStorage.setItem('string-key', 'string-key-value');
    const storageLengthBefore = window.localStorage.length;
    LocalStorage.cleanupStorage('string', 'string-key');
    const storageLengthAfter = window.localStorage.length;
    assert.strictEqual(
      storageLengthBefore - storageLengthAfter,
      1,
      'the method should only remove one key from localStorage.'
    );
    assert.strictEqual(
      LocalStorage.getItem('string-key'),
      'string-key-value',
      'the key we asked to keep still exists in localStorage.'
    );
    assert.strictEqual(
      LocalStorage.getItem('string-key-remove'),
      null,
      'the key we did not specify to keep was removed from localStorage.'
    );
    // clear storage
    window.localStorage.clear();
  });
});
