diff --git a/libs/angular/src/vault/components/folder-add-edit.component.ts b/libs/angular/src/vault/components/folder-add-edit.component.ts index 31c26b4625f..486585b810c 100644 --- a/libs/angular/src/vault/components/folder-add-edit.component.ts +++ b/libs/angular/src/vault/components/folder-add-edit.component.ts @@ -58,7 +58,7 @@ export class FolderAddEditComponent implements OnInit { async submit(): Promise { this.folder.name = this.formGroup.controls.name.value; - if (this.folder.name === "") { + if (this.folder.name == null || this.folder.name === "") { this.toastService.showToast({ variant: "error", title: this.i18nService.t("errorOccurred"), diff --git a/libs/common/src/vault/models/domain/folder.spec.ts b/libs/common/src/vault/models/domain/folder.spec.ts index 1a15a6d199b..6c6e126c185 100644 --- a/libs/common/src/vault/models/domain/folder.spec.ts +++ b/libs/common/src/vault/models/domain/folder.spec.ts @@ -60,8 +60,8 @@ describe("Folder", () => { it("initializes empty properties when no FolderData is provided", () => { const folder = new Folder(); - expect(folder.id).toBe(undefined); - expect(folder.name).toBe(undefined); + expect(folder.id).toBe(""); + expect(folder.name).toBeInstanceOf(EncString); expect(folder.revisionDate).toBeInstanceOf(Date); }); }); @@ -80,8 +80,7 @@ describe("Folder", () => { expect(actual?.id).toBe("id"); expect(actual?.revisionDate).toEqual(revisionDate); - expect(actual?.name).toBeInstanceOf(EncString); - expect((actual?.name as EncString).encryptedString).toBe("name"); + expect(actual?.name).toBe("name_fromJSON"); }); }); diff --git a/libs/common/src/vault/models/domain/folder.ts b/libs/common/src/vault/models/domain/folder.ts index 1b75a98b480..0baeabbf9b5 100644 --- a/libs/common/src/vault/models/domain/folder.ts +++ b/libs/common/src/vault/models/domain/folder.ts @@ -8,26 +8,17 @@ import { FolderData } from "../data/folder.data"; import { FolderView } from "../view/folder.view"; export class Folder extends Domain { - id?: string; - name?: EncString; - revisionDate: Date; + id: string = ""; + name: EncString = new EncString(""); + revisionDate: Date = new Date(); constructor(obj?: FolderData) { super(); if (obj == null) { - this.revisionDate = new Date(); return; } - this.buildDomainModel( - this, - obj, - { - id: null, - name: null, - }, - ["id"], - ); + this.id = obj.id; this.name = new EncString(obj.name); this.revisionDate = new Date(obj.revisionDate); } @@ -41,10 +32,10 @@ export class Folder extends Domain { encryptService: EncryptService, ): Promise { const folderView = new FolderView(); - folderView.id = this.id ?? ""; + folderView.id = this.id; folderView.revisionDate = this.revisionDate; try { - folderView.name = await encryptService.decryptString(this.name ?? new EncString(""), key); + folderView.name = await encryptService.decryptString(this.name, key); } catch (e) { // Note: This should be replaced by the owning team with appropriate, domain-specific behavior. // eslint-disable-next-line no-console @@ -58,10 +49,11 @@ export class Folder extends Domain { if (obj == null) { return null; } - return new Folder({ - name: obj.name ?? "", - revisionDate: obj.revisionDate, - id: obj.id ?? "", - }); + + const folder = new Folder(); + folder.id = obj.id; + folder.name = EncString.fromJSON(obj.name); + folder.revisionDate = new Date(obj.revisionDate); + return folder; } } diff --git a/libs/common/src/vault/models/view/folder.view.ts b/libs/common/src/vault/models/view/folder.view.ts index f397b8b4dbc..ead32c4a322 100644 --- a/libs/common/src/vault/models/view/folder.view.ts +++ b/libs/common/src/vault/models/view/folder.view.ts @@ -1,7 +1,6 @@ import { Jsonify } from "type-fest"; import { View } from "../../../models/view/view"; -import { DecryptedObject } from "../../../platform/models/domain/domain-base"; import { Folder } from "../domain/folder"; import { ITreeNodeObject } from "../domain/tree-node"; @@ -10,14 +9,14 @@ export class FolderView implements View, ITreeNodeObject { name: string = ""; revisionDate: Date; - constructor(f?: Folder | DecryptedObject) { + constructor(f?: Folder) { if (!f) { this.revisionDate = new Date(); return; } - this.id = f.id ?? ""; - this.name = f.name?.decryptedValue ?? ""; + this.id = f.id; + this.name = f.name.toString(); this.revisionDate = f.revisionDate; } @@ -25,7 +24,9 @@ export class FolderView implements View, ITreeNodeObject { const folderView = new FolderView(); folderView.id = obj.id ?? ""; folderView.name = obj.name ?? ""; - folderView.revisionDate = new Date(obj.revisionDate); + if (obj.revisionDate != null) { + folderView.revisionDate = new Date(obj.revisionDate); + } return folderView; } } diff --git a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts index 59e94d3144f..9da7395c779 100644 --- a/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts +++ b/libs/tools/export/vault-export/vault-export-core/src/services/individual-vault-export.service.spec.ts @@ -154,12 +154,13 @@ function expectEqualFolderViews(folderViews: FolderView[] | Folder[], jsonResult function expectEqualFolders(folders: Folder[], jsonResult: string) { const actual = JSON.parse(jsonResult).folders; - const expected = folders.map((f) => ({ - id: f.id, - name: f.name.encryptedString, + const expected = folders.map((c) => ({ + id: c.id, + name: c.name?.encryptedString, })); - expect(actual).toMatchObject(expected); + expect(actual.length).toBeGreaterThan(0); + expect(actual).toEqual(expected); } describe("VaultExportService", () => {