Skip to content

Commit 6311318

Browse files
committed
Cover ZITADEL password transition in browser test
1 parent d34f729 commit 6311318

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

tests/integration/assertions/browser.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,4 +239,48 @@ describe("browser assertion helpers", () => {
239239
await browser.close();
240240
}
241241
});
242+
243+
test("waits through ZITADEL username to password transition without stale username typing", async () => {
244+
const browser = await chromium.launch({ headless: true });
245+
try {
246+
const page = await browser.newPage();
247+
await page.route("**/*", (route) =>
248+
route.fulfill({
249+
contentType: "text/html",
250+
body: [
251+
"<form>",
252+
'<input data-testid="username-text-input" value="">',
253+
'<button type="submit">Continue</button>',
254+
"</form>",
255+
"<script>",
256+
"window.submits = 0;",
257+
"document.querySelector('form').addEventListener('submit', (event) => {",
258+
" event.preventDefault();",
259+
" window.submits += 1;",
260+
" setTimeout(() => {",
261+
" history.pushState(null, '', '/ui/v2/login/password?requestId=oidc_123');",
262+
" document.body.innerHTML = '<form><input data-testid=\"password-text-input\" name=\"password\" type=\"password\"><button type=\"submit\">Continue</button></form>';",
263+
" }, 10);",
264+
"});",
265+
"</script>"
266+
].join("")
267+
})
268+
);
269+
270+
await page.goto("http://issuer.example.test/ui/v2/login/loginname?requestId=oidc_123");
271+
const selector = await __browserTestHooks.waitForPasswordInputAfterUsernameSubmit(
272+
page,
273+
'[data-testid="username-text-input"]',
274+
"agent@example.test",
275+
"app.example.test"
276+
);
277+
278+
expect(selector).toBe('[data-testid="password-text-input"]');
279+
expect(page.url()).toContain("/ui/v2/login/password");
280+
expect(await page.locator('[data-testid="password-text-input"]').isVisible()).toBe(true);
281+
expect(await page.evaluate(() => (window as unknown as { submits: number }).submits)).toBe(1);
282+
} finally {
283+
await browser.close();
284+
}
285+
});
242286
});

tests/integration/assertions/browser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ async function resubmitUsernameIfStillOnUsernameStep(page: Page, userEmail: stri
198198
}
199199

200200
export const __browserTestHooks = {
201-
resubmitUsernameIfStillOnUsernameStep
201+
resubmitUsernameIfStillOnUsernameStep,
202+
waitForPasswordInputAfterUsernameSubmit
202203
};
203204

204205
function isUsernameLoginStep(currentUrl: string): boolean {

0 commit comments

Comments
 (0)