import { StorageKey, LocalStorageUtility, SessionStorageUtility } from "./StorageUtility";

describe("Storage Utility", () => {
  beforeAll(() => {
    localStorage.clear();
  });

  afterEach(() => {
    localStorage.clear();
  });

  it("should find a value that exist in local storage", () => {
    localStorage.setItem(StorageKey[StorageKey.ActualItemPerPage], "123");
    expect(LocalStorageUtility.hasItem(StorageKey.ActualItemPerPage)).toBe(true);
  });

  it("should not find a value that does not exist in local storage", () => {
    expect(LocalStorageUtility.hasItem(StorageKey.ActualItemPerPage)).toBe(false);
  });

  it("should place the string key/value pair into local storage", () => {
    LocalStorageUtility.setEntryString(StorageKey.ActualItemPerPage, "abc");
    expect(localStorage.getItem(StorageKey[StorageKey.ActualItemPerPage])).toEqual("abc");
  });

  it("should place the number key/value pair into local storage as a string", () => {
    LocalStorageUtility.setEntryNumber(StorageKey.ActualItemPerPage, 123);
    expect(localStorage.getItem(StorageKey[StorageKey.ActualItemPerPage])).toEqual("123");
  });

  it("should retrieve the string value", () => {
    localStorage.setItem(StorageKey[StorageKey.ActualItemPerPage], "123");
    expect(LocalStorageUtility.getEntryString(StorageKey.ActualItemPerPage)).toEqual("123");
  });

  it("should retrieve the string value and convert to number", () => {
    localStorage.setItem(StorageKey[StorageKey.ActualItemPerPage], "123");
    const result = LocalStorageUtility.getEntryNumber(StorageKey.ActualItemPerPage);
    expect(Number(result)).toEqual(123);
  });

  it("should remove the entry from local storage if exists", () => {
    localStorage.setItem(StorageKey[StorageKey.ActualItemPerPage], "123");
    LocalStorageUtility.removeEntry(StorageKey.ActualItemPerPage);

    expect(LocalStorageUtility.getEntryString(StorageKey.ActualItemPerPage)).toBeNull();
  });

  it("should remove the entry from session storage if exists", () => {
    sessionStorage.setItem(StorageKey[StorageKey.ActualItemPerPage], "123");
    SessionStorageUtility.removeEntry(StorageKey.ActualItemPerPage);

    expect(LocalStorageUtility.getEntryString(StorageKey.ActualItemPerPage)).toBeNull();
  });
});
