import { ContextKeysManager, REFERENCE_NAMESPACE } from "../..";
import { buildNamespaceKey } from "../../utils";
import { StorageLevel } from "../../consts";

describe("Context Keys Manager - setReferenceForKey", () => {
  it("returns true if save success", async () => {
    // setup
    const key = "key";
    const namespace = "namespace";
    const value = StorageLevel.default;

    const mockedLogger = {
      warn: jest.fn(),
    };

    const mockedReferenceStorage = {
      getItem: jest.fn(),
      setItem: jest.fn().mockResolvedValueOnce(true),
      removeItem: jest.fn(),
    };

    const contextManager = new ContextKeysManager({
      logger: mockedLogger,
      referenceStorage: mockedReferenceStorage,
    });

    // run
    const result = await contextManager.setReferenceForKey(
      key,
      namespace,
      value
    );

    // verify
    expect(result).toBe(true);

    expect(mockedLogger.warn).not.toHaveBeenCalled();

    expect(mockedReferenceStorage.setItem).toHaveBeenCalledWith(
      buildNamespaceKey(key, namespace),
      value,
      REFERENCE_NAMESPACE
    );
  });
});
