import { GeneratorCategory, GeneratedCredential } from "./";

describe("GeneratedCredential", () => {
  describe("constructor", () => {
    it("assigns credential", () => {
      const result = new GeneratedCredential("example", "passphrase", new Date(100));

      expect(result.credential).toEqual("example");
    });

    it("assigns category", () => {
      const result = new GeneratedCredential("example", "passphrase", new Date(100));

      expect(result.category).toEqual("passphrase");
    });

    it("passes through date parameters", () => {
      const result = new GeneratedCredential("example", "password", new Date(100));

      expect(result.generationDate).toEqual(new Date(100));
    });

    it("converts numeric dates to Dates", () => {
      const result = new GeneratedCredential("example", "password", 100);

      expect(result.generationDate).toEqual(new Date(100));
    });
  });

  it("toJSON converts from a credential into a JSON object", () => {
    const credential = new GeneratedCredential("example", "password", new Date(100));

    const result = credential.toJSON();

    expect(result).toEqual({
      credential: "example",
      category: "password" as GeneratorCategory,
      generationDate: 100,
    });
  });

  it("fromJSON converts Json objects into credentials", () => {
    const jsonValue = {
      credential: "example",
      category: "password" as GeneratorCategory,
      generationDate: 100,
    };

    const result = GeneratedCredential.fromJSON(jsonValue);

    expect(result).toBeInstanceOf(GeneratedCredential);
    expect(result).toEqual({
      credential: "example",
      category: "password",
      generationDate: new Date(100),
    });
  });
});
