1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-26 01:23:24 +00:00

[PM-25688] Add unit test to ensure Folder Id is never set for import request

This commit is contained in:
Shane
2026-02-24 12:09:40 -08:00
parent 0ad90d6f7d
commit d4b655148e

View File

@@ -1,4 +1,5 @@
import { mock, MockProxy } from "jest-mock-extended";
import { of } from "rxjs";
// This import has been flagged as unallowed for this class. It may be involved in a circular dependency loop.
// eslint-disable-next-line no-restricted-imports
@@ -10,13 +11,14 @@ import {
import { AccountService } from "@bitwarden/common/auth/abstractions/account.service";
import { KeyGenerationService } from "@bitwarden/common/key-management/crypto";
import { EncryptService } from "@bitwarden/common/key-management/crypto/abstractions/encrypt.service";
import { EncString } from "@bitwarden/common/key-management/crypto/models/enc-string";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { Utils } from "@bitwarden/common/platform/misc/utils";
import { CollectionId, OrganizationId } from "@bitwarden/common/types/guid";
import { CollectionId, OrganizationId, UserId } from "@bitwarden/common/types/guid";
import { CipherService } from "@bitwarden/common/vault/abstractions/cipher.service";
import { FolderService } from "@bitwarden/common/vault/abstractions/folder/folder.service.abstraction";
import { Folder } from "@bitwarden/common/vault/models/domain/folder";
import { FolderWithIdRequest } from "@bitwarden/common/vault/models/request/folder-with-id.request";
import { FolderRequest } from "@bitwarden/common/vault/models/request/folder.request";
import { CipherView } from "@bitwarden/common/vault/models/view/cipher.view";
import { FolderView } from "@bitwarden/common/vault/models/view/folder.view";
import { RestrictedItemTypesService } from "@bitwarden/common/vault/services/restricted-item-types.service";
@@ -280,19 +282,31 @@ describe("ImportService", () => {
expect(importResult.collectionRelationships.every((r) => r[1] === 0)).toBe(true);
});
});
});
describe("FolderWithIdRequest", () => {
function makeFolder(id: string): Folder {
const folder = new Folder();
folder.id = id;
return folder;
}
describe("handleIndividualImport", () => {
it("sends folder requests without an id property", async () => {
const importResult = new ImportResult();
const folderView = new FolderView();
folderView.name = "Test Folder";
importResult.folders.push(folderView);
it("preserves a real folder id", () => {
const guid = "f1a2b3c4-d5e6-7890-abcd-ef1234567890";
const request = new FolderWithIdRequest(makeFolder(guid));
expect(request.id).toBe(guid);
const encryptedFolder = new Folder();
encryptedFolder.id = "";
encryptedFolder.name = new EncString("2.encryptedName");
folderService.encrypt.mockResolvedValue(encryptedFolder);
cipherService.encryptMany.mockResolvedValue([]);
keyService.userKey$.mockReturnValue(of(null));
const userId = "test-user-id" as UserId;
await importService["handleIndividualImport"](importResult, userId);
const request = importApiService.postImportCiphers.mock.calls[0][0];
expect(request.folders).toHaveLength(1);
expect(request.folders[0]).toBeInstanceOf(FolderRequest);
expect(request.folders[0].name).toBe("2.encryptedName");
expect(request.folders[0]).not.toHaveProperty("id");
});
});
});