import { describe, expect, it, jest } from "@jest/globals"

jest.mock("./getPrefix", () => ({
  getPrefix: jest.fn(() => "gitsha"),
}))

// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const indexModule: typeof import(".") = require(".")

const { generateCacheKey } = indexModule

describe("generateCacheKey", () => {
  const OLD_ENV = process.env

  beforeEach(() => {
    jest.resetModules()
  })

  afterEach(() => {
    process.env = OLD_ENV
  })

  it("generates cachekey with prefix and key using string", () => {
    expect(generateCacheKey("key1")).toBe("gitsha:key1")
  })

  it("generates cachekey with prefix and key using array", () => {
    expect(generateCacheKey(["key1"])).toBe("gitsha:key1")
  })

  it("generates cachekey with prefix and keys", () => {
    const actual = generateCacheKey(["key1", "key2"])
    expect(actual).toBe("gitsha:key1_key2")
  })

  it("should throw an error if no keys are provided", () => {
    expect(() => generateCacheKey([])).toThrow("No keys provided")
  })

  it("should throw an error if only invalid keys are provided", () => {
    expect(() => generateCacheKey(["", undefined, null] as string[])).toThrow(
      "No keys provided"
    )
    expect(() => generateCacheKey("")).toThrow("No keys provided")
  })
})
