import { KeePassXCsvImporter } from "../src/importers";

import { keepassxTestData } from "./test-data/keepassx-csv/testdata.csv";

describe("KeePassX CSV Importer", () => {
  let importer: KeePassXCsvImporter;

  beforeEach(() => {
    importer = new KeePassXCsvImporter();
  });

  describe("given login data", () => {
    it("should parse login data when provided valid CSV", async () => {
      const result = await importer.parse(keepassxTestData);
      expect(result != null).toBe(true);

      const cipher = result.ciphers.shift();
      expect(cipher.name).toEqual("Example Entry");
      expect(cipher.login.username).toEqual("testuser");
      expect(cipher.login.password).toEqual("password123");
      expect(cipher.login.uris.length).toEqual(1);
      const uriView = cipher.login.uris.shift();
      expect(uriView.uri).toEqual("https://example.com");
      expect(cipher.notes).toEqual("Some notes");
    });

    it("should import TOTP when present in the CSV", async () => {
      const result = await importer.parse(keepassxTestData);
      expect(result != null).toBe(true);

      const cipher = result.ciphers.pop();
      expect(cipher.name).toEqual("Another Entry");
      expect(cipher.login.username).toEqual("anotheruser");
      expect(cipher.login.password).toEqual("anotherpassword");
      expect(cipher.login.uris.length).toEqual(1);
      const uriView = cipher.login.uris.shift();
      expect(uriView.uri).toEqual("https://another.com");
      expect(cipher.notes).toEqual("Another set of notes");
      expect(cipher.login.totp).toEqual("otpauth://totp/Another?secret=ABCD1234EFGH5678");
    });
  });
});