Files
authentik/web/unit/authenticator-validate-challenge-selection.test.ts
Oluwatobi Mustapha a10ec34aec web/flow: reset stale authenticator selection between consecutive validate stages (#20802)
* fix(web): reset stale MFA challenge selection across stages

* Surface API errors in plucked details.

* Clean up error messages, lifecycle, cancel states.

* Address review feedback on base host property and tag resolver

Fix lint and typing for authenticator component resolver

Format authenticator resolver signature

chore: trigger CI rerun after transient npm network failure

* Tidy return value.

---------

Co-authored-by: Teffen Ellis <592134+GirlBossRush@users.noreply.github.com>
2026-03-19 15:49:49 +01:00

44 lines
1.5 KiB
TypeScript

import { shouldResetSelectedChallenge } from "#flow/stages/authenticator_validate/challenge-selection";
import { type DeviceChallenge, DeviceClassesEnum } from "@goauthentik/api";
import { describe, expect, it } from "vitest";
const makeDeviceChallenge = (
deviceClass: DeviceClassesEnum,
deviceUid: string,
): DeviceChallenge => ({
deviceClass,
deviceUid,
challenge: {},
lastUsed: null,
});
describe("shouldResetSelectedChallenge", () => {
it("returns true when the previously selected challenge is no longer allowed", () => {
const selected = makeDeviceChallenge(DeviceClassesEnum.Email, "email-1");
const allowed = [
makeDeviceChallenge(DeviceClassesEnum.Totp, "totp-1"),
makeDeviceChallenge(DeviceClassesEnum.Webauthn, "webauthn-1"),
];
expect(shouldResetSelectedChallenge(selected, allowed)).toBe(true);
});
it("returns false when the previously selected challenge is still allowed", () => {
const selected = makeDeviceChallenge(DeviceClassesEnum.Email, "email-1");
const allowed = [
makeDeviceChallenge(DeviceClassesEnum.Email, "email-1"),
makeDeviceChallenge(DeviceClassesEnum.Sms, "sms-1"),
];
expect(shouldResetSelectedChallenge(selected, allowed)).toBe(false);
});
it("returns false when there was no selected challenge", () => {
const allowed = [makeDeviceChallenge(DeviceClassesEnum.Email, "email-1")];
expect(shouldResetSelectedChallenge(null, allowed)).toBe(false);
});
});