mirror of
https://github.com/bitwarden/browser
synced 2024-12-26 18:04:07 +01:00
78248db590
* Rename service-factory folder
* Move cryptographic service factories
* Move crypto models
* Move crypto services
* Move domain base class
* Platform code owners
* Move desktop log services
* Move log files
* Establish component library ownership
* Move background listeners
* Move background background
* Move localization to Platform
* Move browser alarms to Platform
* Move browser state to Platform
* Move CLI state to Platform
* Move Desktop native concerns to Platform
* Move flag and misc to Platform
* Lint fixes
* Move electron state to platform
* Move web state to Platform
* Move lib state to Platform
* Fix broken tests
* Rename interface to idiomatic TS
* `npm run prettier` 🤖
* Resolve review feedback
* Set platform as owners of web core and shared
* Expand moved services
* Fix test types
---------
Co-authored-by: Hinton <hinton@users.noreply.github.com>
125 lines
4.4 KiB
TypeScript
125 lines
4.4 KiB
TypeScript
import { Utils } from "@bitwarden/common/platform/misc/utils";
|
|
|
|
import { KeeperCsvImporter } from "../src/importers";
|
|
|
|
import { testData as TestData } from "./test-data/keeper-csv/testdata.csv";
|
|
|
|
describe("Keeper CSV Importer", () => {
|
|
let importer: KeeperCsvImporter;
|
|
beforeEach(() => {
|
|
importer = new KeeperCsvImporter();
|
|
});
|
|
|
|
it("should parse login data", async () => {
|
|
const result = await importer.parse(TestData);
|
|
expect(result != null).toBe(true);
|
|
|
|
const cipher = result.ciphers.shift();
|
|
expect(cipher.name).toEqual("Bar");
|
|
expect(cipher.login.username).toEqual("john.doe@example.com");
|
|
expect(cipher.login.password).toEqual("1234567890abcdef");
|
|
expect(cipher.login.uris.length).toEqual(1);
|
|
const uriView = cipher.login.uris.shift();
|
|
expect(uriView.uri).toEqual("https://example.com/");
|
|
expect(cipher.notes).toEqual("These are some notes.");
|
|
|
|
const cipher2 = result.ciphers.shift();
|
|
expect(cipher2.name).toEqual("Bar 1");
|
|
expect(cipher2.login.username).toEqual("john.doe1@example.com");
|
|
expect(cipher2.login.password).toEqual("234567890abcdef1");
|
|
expect(cipher2.login.uris.length).toEqual(1);
|
|
const uriView2 = cipher2.login.uris.shift();
|
|
expect(uriView2.uri).toEqual("https://an.example.com/");
|
|
expect(cipher2.notes).toBeNull();
|
|
|
|
const cipher3 = result.ciphers.shift();
|
|
expect(cipher3.name).toEqual("Bar 2");
|
|
expect(cipher3.login.username).toEqual("john.doe2@example.com");
|
|
expect(cipher3.login.password).toEqual("34567890abcdef12");
|
|
expect(cipher3.notes).toBeNull();
|
|
expect(cipher3.login.uris.length).toEqual(1);
|
|
const uriView3 = cipher3.login.uris.shift();
|
|
expect(uriView3.uri).toEqual("https://another.example.com/");
|
|
});
|
|
|
|
it("should import TOTP when present", async () => {
|
|
const result = await importer.parse(TestData);
|
|
expect(result != null).toBe(true);
|
|
|
|
const cipher = result.ciphers.shift();
|
|
expect(cipher.login.totp).toBeNull();
|
|
|
|
const cipher2 = result.ciphers.shift();
|
|
expect(cipher2.login.totp).toBeNull();
|
|
|
|
const cipher3 = result.ciphers.shift();
|
|
expect(cipher3.login.totp).toEqual(
|
|
"otpauth://totp/Amazon:me@company.com?secret=JBSWY3DPEHPK3PXP&issuer=Amazon&algorithm=SHA1&digits=6&period=30"
|
|
);
|
|
});
|
|
|
|
it("should parse custom fields", async () => {
|
|
const result = await importer.parse(TestData);
|
|
expect(result != null).toBe(true);
|
|
|
|
const cipher = result.ciphers.shift();
|
|
expect(cipher.fields).toBeNull();
|
|
|
|
const cipher2 = result.ciphers.shift();
|
|
expect(cipher2.fields.length).toBe(2);
|
|
expect(cipher2.fields[0].name).toEqual("Account ID");
|
|
expect(cipher2.fields[0].value).toEqual("12345");
|
|
expect(cipher2.fields[1].name).toEqual("Org ID");
|
|
expect(cipher2.fields[1].value).toEqual("54321");
|
|
|
|
const cipher3 = result.ciphers.shift();
|
|
expect(cipher3.fields[0].name).toEqual("Account ID");
|
|
expect(cipher3.fields[0].value).toEqual("23456");
|
|
});
|
|
|
|
it("should create folders, with subfolders and relationships", async () => {
|
|
const result = await importer.parse(TestData);
|
|
expect(result != null).toBe(true);
|
|
|
|
const folders = result.folders;
|
|
expect(folders).not.toBeNull();
|
|
expect(folders.length).toBe(2);
|
|
|
|
const folder1 = folders.shift();
|
|
expect(folder1.name).toBe("Foo");
|
|
|
|
//With subfolders
|
|
const folder2 = folders.shift();
|
|
expect(folder2.name).toBe("Foo/Baz");
|
|
|
|
// [Cipher, Folder]
|
|
expect(result.folderRelationships.length).toBe(3);
|
|
expect(result.folderRelationships[0]).toEqual([0, 0]);
|
|
expect(result.folderRelationships[1]).toEqual([1, 0]);
|
|
expect(result.folderRelationships[2]).toEqual([2, 1]);
|
|
});
|
|
|
|
it("should create collections, with subcollections and relationships", async () => {
|
|
importer.organizationId = Utils.newGuid();
|
|
const result = await importer.parse(TestData);
|
|
expect(result != null).toBe(true);
|
|
|
|
const collections = result.collections;
|
|
expect(collections).not.toBeNull();
|
|
expect(collections.length).toBe(2);
|
|
|
|
const collections1 = collections.shift();
|
|
expect(collections1.name).toBe("Foo");
|
|
|
|
//With subCollection
|
|
const collections2 = collections.shift();
|
|
expect(collections2.name).toBe("Foo/Baz");
|
|
|
|
// [Cipher, Folder]
|
|
expect(result.collectionRelationships.length).toBe(3);
|
|
expect(result.collectionRelationships[0]).toEqual([0, 0]);
|
|
expect(result.collectionRelationships[1]).toEqual([1, 0]);
|
|
expect(result.collectionRelationships[2]).toEqual([2, 1]);
|
|
});
|
|
});
|