forked from baron/baron-sso
84 lines
3.2 KiB
Markdown
84 lines
3.2 KiB
Markdown
# Issue #269 테스트 시나리오
|
|
|
|
## 목적
|
|
`/{locale}/` 라우팅 도입 이후 query parameter 유실 회귀를 방지합니다.
|
|
|
|
## 범위
|
|
- UserFront locale 경로 보정 (`buildLocalizedPath`)
|
|
- 비로그인 redirect 경로 생성 (`buildSigninRedirectPath`)
|
|
- locale 지원 목록 동기화 (`assets/translations/*.toml` -> `LocaleRegistry`)
|
|
|
|
## 테스트 시나리오
|
|
|
|
### S1. locale 보정 시 기본 query 보존
|
|
- 입력: `/signin?redirect_uri=https://example.com`
|
|
- 기대: `/ko/signin?redirect_uri=https://example.com`
|
|
|
|
### S2. locale 보정 시 raw query 순서/중복 key 보존
|
|
- 입력: `/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2`
|
|
- 기대: `/ko/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2`
|
|
|
|
### S3. locale 보정 시 fragment 보존
|
|
- 입력: `/signin?notice=qr_login_required#auth`
|
|
- 기대: `/ko/signin?notice=qr_login_required#auth`
|
|
|
|
### S4. unknown 2-letter prefix 오인 제거
|
|
- 입력: `/zz/signin`
|
|
- 기대: `/ko/zz/signin`
|
|
|
|
### S5. 비로그인 redirect에서 query 없음
|
|
- 입력: locale=`ko`, uri=`/ko/profile`
|
|
- 기대: `/ko/signin`
|
|
|
|
### S6. 비로그인 redirect에서 query 전체 보존
|
|
- 입력: locale=`ko`, uri=`/ko/profile?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2¬ice=qr_login_required`
|
|
- 기대: `/ko/signin?a=1&a=2&redirect_uri=https%3A%2F%2Fexample.com%2Fcb%3Fx%3D1%26y%3D2¬ice=qr_login_required`
|
|
|
|
### S7. locale 목록 하드코딩 제거 검증
|
|
- 입력: asset 목록 (`assets/translations/en.toml`, `assets/translations/ko.toml`, `assets/translations/template.toml`, 기타 invalid 파일)
|
|
- 기대:
|
|
- `template.toml` 제외
|
|
- 유효 locale 파일(`en.toml`, `ko.toml`)만 지원 목록에 반영
|
|
|
|
### S8. 실계정 비밀번호 변경 스모크(E2E)
|
|
- 목적: 로그인 상태 플로우가 기존 동작을 깨지 않았는지 확인
|
|
- 절차:
|
|
- Kratos Admin API로 임시 계정 생성(초기 비밀번호 포함)
|
|
- 구 비밀번호 로그인 성공 확인
|
|
- Settings API로 비밀번호 변경
|
|
- 구 비밀번호 로그인 실패 확인
|
|
- 신 비밀번호 로그인 성공 확인
|
|
- 테스트 계정 삭제(정리)
|
|
- 기대:
|
|
- 비밀번호 변경 전/후 인증 결과가 정확히 반전
|
|
- 테스트 종료 후 identity 삭제 완료(잔존 계정 없음)
|
|
|
|
## 실행 방법
|
|
```bash
|
|
cd userfront
|
|
flutter test test/locale_utils_test.dart
|
|
flutter test test/locale_registry_test.dart
|
|
flutter test test/router_redirect_widget_test.dart
|
|
flutter test --platform chrome test/locale_utils_test.dart test/locale_registry_test.dart test/router_redirect_widget_test.dart
|
|
```
|
|
|
|
## 자동화 매핑
|
|
- `userfront/test/locale_utils_test.dart`
|
|
- S1~S6 전부 커버
|
|
- `userfront/test/locale_registry_test.dart`
|
|
- S7 커버
|
|
- `userfront/test/router_redirect_widget_test.dart`
|
|
- 로그인/비로그인 redirect 동작 검증(`redirect_uri`, `redirect_url`)
|
|
|
|
## 최근 실행 결과
|
|
- 실행일: 2026-02-19
|
|
- 결과:
|
|
- Flutter 테스트(VM): 통과
|
|
- Flutter 테스트(Chrome): 통과
|
|
- S8 실계정 E2E: 통과
|
|
- `login_old_password=200`
|
|
- `change_password=200`
|
|
- `login_old_after_change=400`
|
|
- `login_new_after_change=200`
|
|
- `cleanup(delete identity)=204`
|