import * as IconExports from "./icon";
import { DynamicContentNotAllowedError, isIcon, svgIcon } from "./icon";

describe("Icon", () => {
  it("exports should not expose Icon class", () => {
    expect(Object.keys(IconExports)).not.toContain("Icon");
  });

  describe("isIcon", () => {
    it("should return true when input is icon", () => {
      const result = isIcon(svgIcon`icon`);

      expect(result).toBe(true);
    });

    it("should return false when input is not an icon", () => {
      const result = isIcon({ svg: "not an icon" });

      expect(result).toBe(false);
    });
  });

  describe("template literal", () => {
    it("should throw when attempting to create dynamic icons", () => {
      const dynamic = "some user input";

      const f = () => svgIcon`static and ${dynamic}`;

      expect(f).toThrow(DynamicContentNotAllowedError);
    });

    it("should return svg content when supplying icon with svg string", () => {
      const icon = svgIcon`safe static content`;

      expect(icon.svg).toBe("safe static content");
    });
  });
});
