test: cover auth token, cookie and expiry boundaries (WealthLedger/backend#61) #113

Merged
codex-bot merged 1 commits from test/61-auth-boundary-tests into develop 2026-10-18 15:55:05 +03:00
Owner

Summary

Тесты границ авторизации в существующем test/app.e2e-spec.ts (настоящие подписанные токены + реальная SQLite session). Production-код не менялся.

Linked Issue

Closes WealthLedger/backend#61

Changes

  • Refresh-токен как Bearer → 401 при живой session (та же session после этого успешно refresh-ится).
  • Refresh cookie: HttpOnly, SameSite=Lax, Path=/api/v1/auth, без Domain/Max-Age; Secure в production на issue/rotate/clear; development снимает только Secure.
  • Signed expired access → 401 (те же claims без expiry → 200); signed expired refresh с совпадающим hash в живой session → 401 без Set-Cookie (с валидным exp → 200); DB-expired session → 401, без Set-Cookie, session удалена.
  • Failed refresh не отдаёт Set-Cookie (cookie победителя не затирается); concurrent SQLite winner usable после loser/replay — уже покрыто существующим тестом, проверено мутациями.

Verification

  • npm run test:sqlite -- app.e2e-spec.ts: 19/19.
  • npm run test:e2e: exit 0, все suites passed.
  • npm run verify: exit 0, 40 suites / 288 tests.
  • Мутации (временные, откатаны): удалён type-check в JwtStrategy; Secure always on/off; httpOnly off; SameSite strict; path /; добавлен Domain; ignoreExpiration на access и refresh; проигнорирован DB expiresAt; replay удаляет session; failed refresh чистит cookie; ослаблен CAS — каждая ловится минимум одним тестом.
  • Ограничение: проверяются HTTP-заголовки Set-Cookie, а не browser enforcement cookie.

Breaking Changes

Нет.

## Summary Тесты границ авторизации в существующем `test/app.e2e-spec.ts` (настоящие подписанные токены + реальная SQLite session). Production-код не менялся. ## Linked Issue Closes WealthLedger/backend#61 ## Changes - Refresh-токен как Bearer → 401 при живой session (та же session после этого успешно refresh-ится). - Refresh cookie: HttpOnly, SameSite=Lax, Path=/api/v1/auth, без Domain/Max-Age; Secure в production на issue/rotate/clear; development снимает только Secure. - Signed expired access → 401 (те же claims без expiry → 200); signed expired refresh с совпадающим hash в живой session → 401 без Set-Cookie (с валидным exp → 200); DB-expired session → 401, без Set-Cookie, session удалена. - Failed refresh не отдаёт Set-Cookie (cookie победителя не затирается); concurrent SQLite winner usable после loser/replay — уже покрыто существующим тестом, проверено мутациями. ## Verification - `npm run test:sqlite -- app.e2e-spec.ts`: 19/19. - `npm run test:e2e`: exit 0, все suites passed. - `npm run verify`: exit 0, 40 suites / 288 tests. - Мутации (временные, откатаны): удалён type-check в JwtStrategy; Secure always on/off; httpOnly off; SameSite strict; path `/`; добавлен Domain; ignoreExpiration на access и refresh; проигнорирован DB expiresAt; replay удаляет session; failed refresh чистит cookie; ослаблен CAS — каждая ловится минимум одним тестом. - Ограничение: проверяются HTTP-заголовки Set-Cookie, а не browser enforcement cookie. ## Breaking Changes Нет.
codex-bot added 1 commit 2026-10-18 14:30:24 +03:00
test: cover auth token, cookie and expiry boundaries (WealthLedger/backend#61)
Backend verify / commits (pull_request) Successful in 31s
Backend verify / security (pull_request) Successful in 11s
Backend verify / verify (pull_request) Successful in 5m21s
5823e5f02f
codex-bot merged commit 32622c1dad into develop 2026-10-18 15:55:05 +03:00
codex-bot deleted branch test/61-auth-boundary-tests 2026-10-18 15:55:05 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#113