114 lines
4.8 KiB
TypeScript
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);
|
|
});
|
|
});
|