bitwarden-estensione-browser/apps/browser/src/autofill/spec/fido2-testing-utils.ts

75 lines
2.4 KiB
TypeScript

import { mock } from "jest-mock-extended";
import {
AssertCredentialResult,
CreateCredentialResult,
} from "@bitwarden/common/vault/abstractions/fido2/fido2-client.service.abstraction";
export function createCredentialCreationOptionsMock(
customFields: Partial<CredentialCreationOptions> = {},
): CredentialCreationOptions {
return mock<CredentialCreationOptions>({
publicKey: mock<PublicKeyCredentialCreationOptions>({
authenticatorSelection: { authenticatorAttachment: "platform" },
excludeCredentials: [{ id: new ArrayBuffer(32), type: "public-key" }],
pubKeyCredParams: [{ alg: -7, type: "public-key" }],
user: { id: new ArrayBuffer(32), name: "test", displayName: "test" },
}),
...customFields,
});
}
export function createCreateCredentialResultMock(
customFields: Partial<CreateCredentialResult> = {},
): CreateCredentialResult {
return mock<CreateCredentialResult>({
credentialId: "mock",
clientDataJSON: "mock",
attestationObject: "mock",
authData: "mock",
publicKey: "mock",
publicKeyAlgorithm: -7,
transports: ["internal"],
...customFields,
});
}
export function createCredentialRequestOptionsMock(
customFields: Partial<CredentialRequestOptions> = {},
): CredentialRequestOptions {
return mock<CredentialRequestOptions>({
mediation: "optional",
publicKey: mock<PublicKeyCredentialRequestOptions>({
allowCredentials: [{ id: new ArrayBuffer(32), type: "public-key" }],
}),
...customFields,
});
}
export function createAssertCredentialResultMock(
customFields: Partial<AssertCredentialResult> = {},
): AssertCredentialResult {
return mock<AssertCredentialResult>({
credentialId: "mock",
clientDataJSON: "mock",
authenticatorData: "mock",
signature: "mock",
userHandle: "mock",
...customFields,
});
}
export function setupMockedWebAuthnSupport() {
(globalThis as any).PublicKeyCredential = class PolyfillPublicKeyCredential {
static isUserVerifyingPlatformAuthenticatorAvailable = () => Promise.resolve(true);
};
(globalThis as any).AuthenticatorAttestationResponse =
class PolyfillAuthenticatorAttestationResponse {};
(globalThis as any).AuthenticatorAssertionResponse =
class PolyfillAuthenticatorAssertionResponse {};
(globalThis as any).navigator.credentials = {
create: jest.fn().mockResolvedValue({}),
get: jest.fn().mockResolvedValue({}),
};
}