bitwarden-estensione-browser/libs/importer/spec/msecure-csv-importer.spec.ts

114 lines
4.8 KiB
TypeScript

import { CipherType } from "@bitwarden/common/vault/enums";
import { MSecureCsvImporter } from "../src/importers/msecure-csv-importer";
describe("MSecureCsvImporter.parse", () => {
let importer: MSecureCsvImporter;
beforeEach(() => {
importer = new MSecureCsvImporter();
});
it("should correctly parse credit card entries as Secret Notes", async () => {
const mockCsvData =
`myCreditCard|155089404,Credit Card,,,Card Number|12|41111111111111111,Expiration Date|11|05/2026,Security Code|9|123,Name on Card|0|John Doe,PIN|9|1234,Issuing Bank|0|Visa,Phone Number|4|,Billing Address|0|,`.trim();
const result = await importer.parse(mockCsvData);
expect(result.success).toBe(true);
expect(result.ciphers.length).toBe(1);
const cipher = result.ciphers[0];
expect(cipher.name).toBe("myCreditCard");
expect(cipher.type).toBe(CipherType.Card);
expect(cipher.card.number).toBe("41111111111111111");
expect(cipher.card.expiration).toBe("05 / 2026");
expect(cipher.card.code).toBe("123");
expect(cipher.card.cardholderName).toBe("John Doe");
expect(cipher.card.brand).toBe("Visa");
});
it("should correctly parse login entries", async () => {
const mockCsvData = `
Bitwarden|810974637,Login,,,Website|2|bitwarden.com,Username|7|bitwarden user,Password|8|bitpassword,
`.trim();
const result = await importer.parse(mockCsvData);
expect(result.success).toBe(true);
expect(result.ciphers.length).toBe(1);
const cipher = result.ciphers[0];
expect(cipher.name).toBe("Bitwarden");
expect(cipher.type).toBe(CipherType.Login);
expect(cipher.login.username).toBe("bitwarden user");
expect(cipher.login.password).toBe("bitpassword");
expect(cipher.login.uris[0].uri).toContain("bitwarden.com");
});
it("should correctly parse login entries with notes", async () => {
const mockCsvData =
`Example|188987444,Login,,This is a note |,Website|2|example2.com,Username|7|username || lol,Password|8|this is a password,`.trim();
const result = await importer.parse(mockCsvData);
expect(result.success).toBe(true);
expect(result.ciphers.length).toBe(1);
const cipher = result.ciphers[0];
expect(cipher.name).toBe("Example");
expect(cipher.type).toBe(CipherType.Login);
expect(cipher.login.username).toBe("username || lol");
expect(cipher.login.password).toBe("this is a password");
expect(cipher.login.uris[0].uri).toContain("example2.com");
expect(cipher.notes).toBe("This is a note |");
});
it("should correctly parse login entries with a tag", async () => {
const mockCsvData = `
Website with a tag|1401978655,Login,tag holding it,,Website|2|johndoe.com,Username|7|JohnDoeWebsite,Password|8|JohnDoePassword,
`.trim();
const result = await importer.parse(mockCsvData);
expect(result.success).toBe(true);
expect(result.ciphers.length).toBe(1);
const cipher = result.ciphers[0];
expect(cipher.name).toBe("Website with a tag");
expect(cipher.type).toBe(CipherType.Login);
expect(cipher.login.username).toBe("JohnDoeWebsite");
expect(cipher.login.password).toBe("JohnDoePassword");
expect(cipher.login.uris[0].uri).toContain("johndoe.com");
expect(cipher.notes).toBeNull();
expect(result.folders[0].name).toContain("tag holding it");
});
it("should handle multiple entries correctly", async () => {
const mockCsvData =
`myCreditCard|155089404,Credit Card,,,Card Number|12|41111111111111111,Expiration Date|11|05/2026,Security Code|9|123,Name on Card|0|John Doe,PIN|9|1234,Issuing Bank|0|Visa,Phone Number|4|,Billing Address|0|,
Bitwarden|810974637,Login,,,Website|2|bitwarden.com,Username|7|bitwarden user,Password|8|bitpassword,
Example|188987444,Login,,This is a note |,Website|2|example2.com,Username|7|username || lol,Password|8|this is a password,
Website with a tag|1401978655,Login,tag holding it,,Website|2|johndoe.com,Username|7|JohnDoeWebsite,Password|8|JohnDoePassword,`.trim();
const result = await importer.parse(mockCsvData);
expect(result.success).toBe(true);
expect(result.ciphers.length).toBe(4);
// Check first entry (Credit Card)
const cipher1 = result.ciphers[0];
expect(cipher1.name).toBe("myCreditCard");
expect(cipher1.type).toBe(CipherType.Card);
// Check second entry (Login - Bitwarden)
const cipher2 = result.ciphers[1];
expect(cipher2.name).toBe("Bitwarden");
expect(cipher2.type).toBe(CipherType.Login);
// Check third entry (Login with note - Example)
const cipher3 = result.ciphers[2];
expect(cipher3.name).toBe("Example");
expect(cipher3.type).toBe(CipherType.Login);
// Check fourth entry (Login with tag - Website with a tag)
const cipher4 = result.ciphers[3];
expect(cipher4.name).toBe("Website with a tag");
expect(cipher4.type).toBe(CipherType.Login);
});
});