// eslint-disable-next-line no-restricted-imports import { Arg, Substitute, SubstituteOf } from "@fluffy-spoon/substitute"; import { ApiService } from "@bitwarden/common/abstractions/api.service"; import { CryptoService } from "@bitwarden/common/abstractions/crypto.service"; import { FileUploadService } from "@bitwarden/common/abstractions/fileUpload.service"; import { I18nService } from "@bitwarden/common/abstractions/i18n.service"; import { LogService } from "@bitwarden/common/abstractions/log.service"; import { SearchService } from "@bitwarden/common/abstractions/search.service"; import { SettingsService } from "@bitwarden/common/abstractions/settings.service"; import { StateService } from "@bitwarden/common/abstractions/state.service"; import { Cipher } from "@bitwarden/common/models/domain/cipher"; import { EncArrayBuffer } from "@bitwarden/common/models/domain/enc-array-buffer"; import { EncString } from "@bitwarden/common/models/domain/enc-string"; import { SymmetricCryptoKey } from "@bitwarden/common/models/domain/symmetric-crypto-key"; import { CipherService } from "@bitwarden/common/services/cipher.service"; const ENCRYPTED_TEXT = "This data has been encrypted"; const ENCRYPTED_BYTES = Substitute.for(); describe("Cipher Service", () => { let cryptoService: SubstituteOf; let stateService: SubstituteOf; let settingsService: SubstituteOf; let apiService: SubstituteOf; let fileUploadService: SubstituteOf; let i18nService: SubstituteOf; let searchService: SubstituteOf; let logService: SubstituteOf; let cipherService: CipherService; beforeEach(() => { cryptoService = Substitute.for(); stateService = Substitute.for(); settingsService = Substitute.for(); apiService = Substitute.for(); fileUploadService = Substitute.for(); i18nService = Substitute.for(); searchService = Substitute.for(); logService = Substitute.for(); cryptoService.encryptToBytes(Arg.any(), Arg.any()).resolves(ENCRYPTED_BYTES); cryptoService.encrypt(Arg.any(), Arg.any()).resolves(new EncString(ENCRYPTED_TEXT)); cipherService = new CipherService( cryptoService, settingsService, apiService, fileUploadService, i18nService, () => searchService, logService, stateService ); }); it("attachments upload encrypted file contents", async () => { const fileName = "filename"; const fileData = new Uint8Array(10).buffer; cryptoService.getOrgKey(Arg.any()).resolves(new SymmetricCryptoKey(new Uint8Array(32).buffer)); await cipherService.saveAttachmentRawWithServer(new Cipher(), fileName, fileData); fileUploadService .received(1) .uploadCipherAttachment(Arg.any(), Arg.any(), new EncString(ENCRYPTED_TEXT), ENCRYPTED_BYTES); }); });