test(infra): medewerker login must be refused without a second factor (refs #132)

The keycloak smoke check now asserts that a password-only grant on the medewerker
realm is rejected and that a TOTP code completes it. The e2e medewerker logins move
to a shared helper that submits Keycloak's OTP challenge. Both fail against the
current realm export, which enforces no MFA.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
not
2026-09-03 09:07:45 +02:00
co-authored by Claude Opus 5
parent 94720f0fcb
commit 30c5279e90
5 changed files with 77 additions and 22 deletions
+4 -4
View File
@@ -1,4 +1,5 @@
import { expect, test } from '@playwright/test';
import { loginMedewerker } from './medewerker-login';
// S-15a walking skeleton: a beheerder logs in to the beheer portal (medewerker realm) and sees the
// read-only ZTC catalogus. The verify stack seeds and publishes the BIG-REGISTRATIE zaaktype (the
@@ -7,10 +8,9 @@ import { expect, test } from '@playwright/test';
test('a beheerder sees the published zaaktypen in the catalogus', async ({ page }) => {
await page.goto('http://beheer/');
// The beheer portal redirects to the Keycloak medewerker realm login (same realm as behandel).
await page.locator('#username').fill('bram-beheerder');
await page.locator('#password').fill('test123');
await page.locator('#kc-login').click();
// The beheer portal redirects to the Keycloak medewerker realm login (same realm as behandel),
// which enforces MFA: password, then a TOTP code.
await loginMedewerker(page, 'bram-beheerder');
await expect(page.getByRole('heading', { name: /Catalogus/i })).toBeVisible();