From cca64451e2bb8da3357dd37af8ef51eb8ddc9840 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 26 Sep 2026 15:30:14 +0300 Subject: [PATCH] =?UTF-8?q?test(web):=20e2e=20passkeys=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5=D1=82=20=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B7=D1=8B=D0=B2=D0=B0=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit После отзыва ключа виртуальный аутентификатор ещё хранит credential и подписывает challenge, поэтому отказ приходит от сервера (auth.passkey_unknown): проверяем, что страница входа показывает ошибку и не пускает в приложение, а не конкретный testid клиентской ошибки. Живой прогон на стенде: регистрация ключа, вход по нему без пароля и отзыв — 1 passed (виртуальный аутентификатор Chromium через CDP). --- web/e2e/passkey.spec.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/web/e2e/passkey.spec.ts b/web/e2e/passkey.spec.ts index 5f5d84e..37face4 100644 --- a/web/e2e/passkey.spec.ts +++ b/web/e2e/passkey.spec.ts @@ -101,11 +101,13 @@ test.describe('passkeys (WebAuthn)', () => { await again.getByRole('button', { name: 'Отозвать ключ' }).click(); await expect(page.getByText('Ключ отозван.')).toBeVisible({ timeout: 20_000 }); + // Ключа больше нет. Виртуальный аутентификатор ещё хранит credential, + // поэтому браузер подпишет challenge, а сервер откажет: важно, что в + // приложение не пускает и ошибка показана человеческим текстом. await context.clearCookies(); await page.goto('/login'); await page.getByTestId('passkey-login').click(); - // Ключа больше нет: сервер отвечает понятной ошибкой, в приложение не пускает. - await expect(page.getByTestId('passkey-error')).toBeVisible({ timeout: 20_000 }); + await expect(page.getByRole('alert')).toBeVisible({ timeout: 25_000 }); await expect(page).toHaveURL(/\/login/u); } finally { await context.close();