Skip to content

라우팅/인증 게이트 테스트 추가 및 CI에서 테스트 실패가 머지를 막도록 수정 #271

Description

@aiden30015

배경

현재 테스트는 52개(라우터 테스트 추가 후)지만, 두 가지 구멍이 있다.

1. CI가 테스트 실패를 막지 않는다

.github/workflows/flutter-ci.yaml 의 테스트 스텝에 continue-on-error: true 가 붙어 있다.

- name: Run tests
  run: fvm flutter test
  continue-on-error: true

테스트가 깨져도 CI는 초록불이 뜬다. 실제로 이 상태에서 #261(예약/취소 single-flight 키 누락) 회귀가 작업 트리에 들어와 테스트 2개가 실패하고 있었지만 아무도 알아채지 못했다. 테스트를 52개 짜놓고 게이트를 꺼둔 셈.

flutter analyze 스텝에도 같은 플래그가 있다.

2. 라우팅과 인증 게이트를 아무도 검증하지 않는다

appRouter 경로에 오타가 나거나 redirect 조건이 틀어져도 기존 테스트 52개는 전부 통과하고 앱만 흰 화면이 된다. 인증 게이트(세션 없으면 로그인으로) 역시 검증된 적이 없다.

원인은 appRouterredirect 가 top-level const _storage = FlutterSecureStorage() 를 직접 잡고 있어서, 기기 없이는 테스트 자체가 불가능했다는 점.

작업 내용

  • app_router.dart 에서 리다이렉트 판단부만 순수 함수 resolveAuthRedirect 로 분리 (저장소 읽기/토큰 삭제 부수효과는 라우터에 유지, 동작 동일)
  • test/core/router_test.dart 추가
    • 라우트 테이블: 실제 appRouter.configuration 을 순회해 8개 경로 등록 확인
    • 인증 게이트: 세션 없음→로그인, 스플래시 통과, 액세스 만료+리프레시 생존→통과, 양쪽 만료→로그인, 리다이렉트 루프 방지
  • flutter-ci.yaml 테스트/분석 스텝에서 continue-on-error: true 제거

비고

에뮬레이터가 필요한 integration_test/ 대신 기존 flutter test 에서 그대로 도는 유닛 테스트로 작성한다. CI가 ubuntu-latest 라 에뮬레이터가 없고, #261/#256/타임존/재시도 같은 실제 버그들은 통합 테스트로는 결정적으로 재현되지 않는다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions