From f58439ee10353c4244df2a512b099dc0e72e6aef Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 10:23:46 -0800 Subject: [PATCH 1/8] fix tests --- libs/common/src/models/export/folder.export.ts | 2 +- .../src/services/individual-vault-export.service.spec.ts | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/libs/common/src/models/export/folder.export.ts b/libs/common/src/models/export/folder.export.ts index 1bffcee8c2d..803dd5d2985 100644 --- a/libs/common/src/models/export/folder.export.ts +++ b/libs/common/src/models/export/folder.export.ts @@ -19,7 +19,7 @@ export class FolderExport { } static toDomain(req: FolderExport, domain = new FolderDomain()) { - domain.name = new EncString(req.name); + domain.name = req.name ? new EncString(req.name) : undefined; return domain; } 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 0d7be81aee2..17f18f971cf 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", () => { From 7a8ec65c54b9bcb8a514f7a95d59baacbe214d83 Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 10:29:08 -0800 Subject: [PATCH 2/8] no need to check for presence --- libs/common/src/models/export/folder.export.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/common/src/models/export/folder.export.ts b/libs/common/src/models/export/folder.export.ts index 803dd5d2985..1bffcee8c2d 100644 --- a/libs/common/src/models/export/folder.export.ts +++ b/libs/common/src/models/export/folder.export.ts @@ -19,7 +19,7 @@ export class FolderExport { } static toDomain(req: FolderExport, domain = new FolderDomain()) { - domain.name = req.name ? new EncString(req.name) : undefined; + domain.name = new EncString(req.name); return domain; } From 1d5da940a7359a7c55a0ac9f2e341f24d151d94e Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 10:31:33 -0800 Subject: [PATCH 3/8] check for empty name in folder toDomain --- libs/common/src/models/export/folder.export.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/common/src/models/export/folder.export.ts b/libs/common/src/models/export/folder.export.ts index 1bffcee8c2d..803dd5d2985 100644 --- a/libs/common/src/models/export/folder.export.ts +++ b/libs/common/src/models/export/folder.export.ts @@ -19,7 +19,7 @@ export class FolderExport { } static toDomain(req: FolderExport, domain = new FolderDomain()) { - domain.name = new EncString(req.name); + domain.name = req.name ? new EncString(req.name) : undefined; return domain; } From ab47d10038a8cb2a0961bcbdb5963a1f53dbfbb5 Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 16:48:33 -0800 Subject: [PATCH 4/8] fixes to folder --- .../components/folder-add-edit.component.ts | 2 +- .../common/src/models/export/folder.export.ts | 2 +- libs/common/src/vault/models/domain/folder.ts | 29 +++++++------------ .../src/vault/models/view/folder.view.ts | 10 ++++--- 4 files changed, 18 insertions(+), 25 deletions(-) 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/models/export/folder.export.ts b/libs/common/src/models/export/folder.export.ts index 803dd5d2985..1bffcee8c2d 100644 --- a/libs/common/src/models/export/folder.export.ts +++ b/libs/common/src/models/export/folder.export.ts @@ -19,7 +19,7 @@ export class FolderExport { } static toDomain(req: FolderExport, domain = new FolderDomain()) { - domain.name = req.name ? new EncString(req.name) : undefined; + domain.name = new EncString(req.name); return domain; } diff --git a/libs/common/src/vault/models/domain/folder.ts b/libs/common/src/vault/models/domain/folder.ts index 1b75a98b480..410d976253a 100644 --- a/libs/common/src/vault/models/domain/folder.ts +++ b/libs/common/src/vault/models/domain/folder.ts @@ -8,26 +8,16 @@ 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.name = new EncString(obj.name); this.revisionDate = new Date(obj.revisionDate); } @@ -44,7 +34,7 @@ export class Folder extends Domain { 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 +48,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..6806143de5b 100644 --- a/libs/common/src/vault/models/view/folder.view.ts +++ b/libs/common/src/vault/models/view/folder.view.ts @@ -10,14 +10,14 @@ export class FolderView implements View, ITreeNodeObject { name: string = ""; revisionDate: Date; - constructor(f?: Folder | DecryptedObject) { + constructor(f?: Folder | DecryptedObject) { 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 +25,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; } } From cfb32180654c82a053e5c851f9cf5fd8234e4655 Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 21:56:15 -0800 Subject: [PATCH 5/8] initialize id in folder constructor. fix failing tests --- libs/common/src/vault/models/domain/folder.spec.ts | 6 +++--- libs/common/src/vault/models/domain/folder.ts | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libs/common/src/vault/models/domain/folder.spec.ts b/libs/common/src/vault/models/domain/folder.spec.ts index 1a15a6d199b..8347fc07681 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); }); }); @@ -74,7 +74,7 @@ describe("Folder", () => { const revisionDate = new Date("2022-08-04T01:06:40.441Z"); const actual = Folder.fromJSON({ revisionDate: revisionDate.toISOString(), - name: "name", + name: "name_fromJSON", id: "id", }); diff --git a/libs/common/src/vault/models/domain/folder.ts b/libs/common/src/vault/models/domain/folder.ts index 410d976253a..d4d1ed06a84 100644 --- a/libs/common/src/vault/models/domain/folder.ts +++ b/libs/common/src/vault/models/domain/folder.ts @@ -18,6 +18,7 @@ export class Folder extends Domain { return; } + this.id = obj.id; this.name = new EncString(obj.name); this.revisionDate = new Date(obj.revisionDate); } From e09cab210ca6ab6ceb0a87d69ea0e5ddcad390f0 Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 21:58:12 -0800 Subject: [PATCH 6/8] remove optional param to folder constructor --- libs/common/src/vault/models/view/folder.view.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libs/common/src/vault/models/view/folder.view.ts b/libs/common/src/vault/models/view/folder.view.ts index 6806143de5b..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,7 +9,7 @@ export class FolderView implements View, ITreeNodeObject { name: string = ""; revisionDate: Date; - constructor(f?: Folder | DecryptedObject) { + constructor(f?: Folder) { if (!f) { this.revisionDate = new Date(); return; From a4fec9e172c611d69fccbc710fa9584176b7e7c9 Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Thu, 20 Nov 2025 22:35:05 -0800 Subject: [PATCH 7/8] fix folder --- libs/common/src/vault/models/domain/folder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/common/src/vault/models/domain/folder.ts b/libs/common/src/vault/models/domain/folder.ts index d4d1ed06a84..0baeabbf9b5 100644 --- a/libs/common/src/vault/models/domain/folder.ts +++ b/libs/common/src/vault/models/domain/folder.ts @@ -32,7 +32,7 @@ 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, key); From 9122a8fd40c282eca2b920b7345057e43f46218f Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Sat, 22 Nov 2025 13:13:40 -0800 Subject: [PATCH 8/8] fix test --- libs/common/src/vault/models/domain/folder.spec.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libs/common/src/vault/models/domain/folder.spec.ts b/libs/common/src/vault/models/domain/folder.spec.ts index 8347fc07681..6c6e126c185 100644 --- a/libs/common/src/vault/models/domain/folder.spec.ts +++ b/libs/common/src/vault/models/domain/folder.spec.ts @@ -74,14 +74,13 @@ describe("Folder", () => { const revisionDate = new Date("2022-08-04T01:06:40.441Z"); const actual = Folder.fromJSON({ revisionDate: revisionDate.toISOString(), - name: "name_fromJSON", + name: "name", id: "id", }); 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"); }); });