Skip to content

마음의 기록 전체 기능 QA 회귀 체크리스트 #269

Open
3 of 3 issues completed
Open

Description

@Sadturtleman

📜 Overview (Required)

마음의 기록 (Mind Record) 도메인 전체 기능에 대한 전수 QA. fix/253 (PR #255 머지 완료) 와 그 직전·이후 마음의 기록 영역 누적 변경의 회귀를 한 번에 잡고, 평소 미커버되던 엣지를 정리. 발견된 버그는 child issue 로 spawn — 본 이슈는 QA 진행 추적/체크리스트.

0) 횡단 회귀 (Cross-cutting)

  • VM 에 Context 미주입 — grep "@ApplicationContext.*Context" feature/mindrecord/presentation/.../*ViewModel.kt 결과 0 hit
  • UiText 패턴: 에러 메시지가 Dynamic(서버 message) 우선, 없으면 Resource(fallback) 매핑되어 표시
  • CategoryError sealed: 컴파일 시점에 신규 케이스 추가 누락이 강제 — 신규 case 1개 임시 추가 후 컴파일 에러 발생 확인
  • SharingStarted.WhileSubscribed(5_000) 동작: 화면을 떠난 5초 안 재진입 시 cache 유지, 5초 초과 시 재 collect
  • 회전 / 다크모드 / 폰트 스케일 (large) 각각에서 레이아웃 깨짐 없음
  • 빈 네트워크 (airplane mode) 진입 시 각 에러 상태 → 재시도 후 정상 복구

1) 데일리 질문 (Daily Question)

목록 (DailyQuestionAnswerListScreen — 리스트/캘린더 토글)

  • 리스트 뷰: 오늘 질문 헤더 + 과거 답변 카드 정상 표시
  • 리스트 뷰: 오늘 질문 없고 답변도 없을 때 MindRecordEmptyState 표시
  • 캘린더 뷰: 답변한 날만 dot 표시, 오늘 강조
  • 캘린더 뷰: 월 이동 시 해당 월 데이터 갱신
  • 네트워크 실패 → ErrorBox 메시지 (서버 message 우선, 없으면 mindrecord_error_daily_question_list_failed)
  • FAB 클릭 → 작성 화면 이동, 작성 완료 후 돌아오면 목록 자동 refresh

작성 (DailyQuestionWriteScreen)

  • 오늘 질문 로딩 중 → "오늘 질문을 불러오는 중..." 헤더
  • 오늘 질문 로딩 실패 → 에러 텍스트가 헤더 위치에 표시
  • 답변 빈칸이면 등록 버튼 비활성, 1자라도 있으면 활성
  • 등록 중 (InProgress) → 버튼 비활성, 이중 클릭 방지
  • 등록 성공 → 화면 자동 종료, 목록 refresh
  • 등록 실패 → 인라인 에러 텍스트 (Red), 버튼 재활성
  • 키보드 툴바: 링크 아이콘 (core:ui 통합 리소스) 정상 표시

2) 일기 (Diary)

목록 (DiaryScreen — 리스트/그리드 토글)

  • 리스트 뷰: 월별 캘린더 + DiaryComponent, 이모지 표시, 빈 상태 처리
  • 그리드 뷰 (2-column): DiaryCard 썸네일/제목/이모지, DiaryReportCard 상단 fixed
  • 월 이동 시 해당 월 데이터 fetch
  • 네트워크 실패 → ErrorBox 표시

작성 (DiaryWriteScreen)

  • 날짜 선택 — BottomSheetCalendar 정상 동작, 미래 일자 선택 가능 여부 확인
  • 무드 선택 (😊 / 😐 / 😢) 토글, 선택 칩 배경 변경
  • 제목/본문 빈칸이면 등록 비활성, 둘 다 있으면 활성
  • 위치 추가 / 사진 추가 버튼 — 백엔드 미연동이면 noop 명시
  • 등록 성공/실패 흐름, mindrecord_error_diary_submit_failed fallback

3) 깊은 생각 (DeepThought)

목록 (DeepThoughtScreen — 리스트/캘린더 토글)

  • 리스트 뷰: 카테고리 탭 (전체 + 사용자 카테고리), 탭 선택 시 필터링
  • 리스트 뷰: 태그 (TAGS) 영역 — 칩 클릭 시 필터, 다시 클릭 시 해제
  • 리스트 뷰: 카테고리 설정 아이콘 → CategorySettingBottomSheet
  • 캘린더 뷰: 작성한 날 dot 표시
  • 카테고리 변경 후 (LaunchedEffect(categoryState.categories)) 목록 자동 refresh
  • 네트워크 실패 → ErrorBox

작성 (DeepThoughtWriteScreen)

  • 기본 카테고리 "나의 가치관" 자동 시드 (LaunchedEffect(Unit))
  • 제목/본문/카테고리 모두 입력 시 등록 활성
  • 카테고리 변경 바텀시트
  • 등록 성공/실패, fallback mindrecord_error_deep_thought_submit_failed

카테고리 CRUD — CategoryError sealed 분기 검증

  • 추가 빈 이름 → CategoryError.EmptyName (메시지 표시 와이어업 시)
  • 추가 정상 → 리스트 즉시 반영
  • 추가 서버 실패 → CategoryError.AddFailed
  • 이름 변경 정상 / 빈 이름 / 서버 실패
  • 삭제 정상 / 서버 실패
  • consumeError() 호출 후 errorMessage null 복원

4) 위클리 리포트 (Weekly Report)

상단 요약 카드 (WeeklyReportReviewCard)

  • 사용자 이름 (GET /users/me 응답) 굵게 + 액센트 컬러로 인라인
  • 주차 드롭다운 라벨 — WeekOption.monday → "N월 N주차 리포트" 포맷 (UI 측 stringResource)
  • 과거 5주 (WEEK_OPTION_COUNT = 5) 선택 가능, 선택 변경 시 리포트 재조회
  • dateRange 상단 표시 (yyyy.MM.dd. - yyyy.MM.dd.)
  • 카운트 3종 (데일리질문/일기/깊은생각) 표시
  • 작성 기록일 수 (N일 포맷) 액센트 컬러

무드 캘린더 (WeeklyMoodCalendar)

  • 요일 라벨 (월~일) — DayOfWeek 로부터 stringResource(...) 매핑
  • 일기 작성 + 이모지 → EmojiWithDot
  • 이모지만 → EmojiOnly
  • 일기만 (이모지 없음) → NumberWithDot
  • 비어있음 → NumberOnly
  • 배경: HAPPY=Green, SAD=Pink, 그 외 None

감정 키워드 / 인사이트

  • Top 4 emotion bubble — percentage 내림차순 슬롯 배치 (1위 가장 크고 진함)
  • Summary text, Insight 카드 정상 표시
  • HISTORY — Daily question 목록, 날짜 포맷 다양성 (yyyy.MM.dd 요일 / ISO) 모두 파싱

에러 흐름

  • 리포트 + 프로필 동시 조회 (coroutineScope { async ... }) 중 하나 실패 → ErrorBox
  • fallback mindrecord_error_weekly_report_failed

5) 디바이스/매트릭스

  • API 26 / 31 / 34 각각 정상 동작
  • 다크모드 (지원 시)
  • 폰트 스케일 large 에서 텍스트 잘림 없음
  • 언어: ko-KR (en/ja 미지원 가정)

📌 Child Issue(Optional)

QA 중 발견된 버그는 child issue 로 spawn 후 본 이슈 본문에 누적 링크.

📍 Note (Optional)

Activity

  1. added a commit that references this issue on Aug 25, 2026
  2. changed the title [-]test(mindrecord): 마음의 기록 전체 기능 QA 회귀 체크리스트[/-] [+]마음의 기록 전체 기능 QA 회귀 체크리스트[/+] on Aug 28, 2026
  3. added
    test테스트·검증·회귀 방지 작업
    area:mindrecord마음의 기록 기능 영역
    and removed
    bugSomething isn't working
    on Aug 28, 2026
  4. Sadturtleman commented on Sep 1, 2026

    @Sadturtleman
    CollaboratorAuthor

    1차 QA 회귀 — 실기 진행분

    Medium_Phone 에뮬레이터(API 36) · 실 백엔드 · 2026-09-01. 체크리스트 순서대로 진입해 확인했습니다.

    체크리스트가 낡았습니다 — 먼저 정리

    항목 현황
    3) 깊은 생각 (DeepThought) 섹션 전체 화면이 없습니다 — DeepThoughtScreen·DeepThoughtWriteScreen·CategorySettingBottomSheet 모두 코드에 0건. 카테고리 CRUD·CategoryError sealed 검증도 함께 사라졌습니다
    0) 횡단 회귀의 CategoryError sealed 항목 위와 같은 이유로 성립하지 않습니다
    이후 추가돼 체크리스트에 없는 화면 MemorySpaceScreen(추억 공간) · RecordDetailScreen(기록 상세) · DraftListScreen(임시저장 목록) · 수신자 마음의 기록

    체크리스트를 지금 구조로 다시 쓰는 편이 좋아 보입니다. 이번 회차는 실재하는 화면만 돌았습니다.

    통과한 것

    화면 확인
    데일리질문 목록(리스트) 오늘 질문 헤더 + 과거 답변 카드 정상
    데일리질문 목록(캘린더) 오늘 강조, 답변한 날 dot, 월 이동 시 해당 월 재조회(9월 0건 ↔ 8월 1건)
    데일리질문 빈 상태 9월 0건에서 MindRecordEmptyState 표시
    기록 상세 히어로 이미지·제목·날짜·본문 렌더, 앱바 뒤로가기 동작
    데일리질문 작성 빈 입력 → 「저장」 비활성 / 1자 입력 → 활성, 글자수 카운터 동기화
    텍스트 설정 패널 열기·닫기, 정렬 3종 + B·I·U·S + 제목/머릿말/부머릿말/본문
    주간리포트 이름 인라인, 주차 드롭다운, 기간 표기, 카운트, 무드 캘린더, 감정 키워드 0건 안내
    감정 키워드 0건 「0」 버블 + 안내 문구 — 시안 명세대로입니다(EmotionKeywordCard KDoc #725), 결함 아님
    홈 MEMORIES 카드·본문·CTA 렌더, 추억 공간 진입
    추억 공간 카드 배치 렌더, 「돌아가기」 동작

    발견한 결함 — 자식 이슈 2건

    곁들여 — 열려 있는 PR 의 전제 하나를 정정했습니다

    #793(PR #1668) 본문에 「다시 읽기 버튼에 목적지가 없어 눌러도 아무 일이 없다」고 적어 뒀는데, 실기에서 눌러 보니 추억 공간으로 이동합니다(develop HomeTabMindRecordLazyItems.kt:129). 「비어 있다」가 아니라 「섹션과 중복된다」가 맞아 PR 본문을 고쳤습니다.

    남은 범위

    • 일기 작성 흐름(날짜 선택·무드·등록 성공/실패)
    • 임시저장 목록·삭제, 수신자 마음의 기록, 기록 수정 흐름
      1. 디바이스/매트릭스 — API 26/31/34, 다크모드, 폰트 스케일 large

    등록 성공 경로는 실 백엔드에 시험 데이터를 남기게 되어 이번 회차에서 실행하지 않았습니다(작성 화면까지만 확인하고 저장하지 않고 나왔습니다). 남길 데이터 정리 방침이 정해지면 이어서 돌리겠습니다.

  5. Sadturtleman commented on Sep 2, 2026

    @Sadturtleman
    CollaboratorAuthor

    2차 QA 회귀 — 서버 복구 후 이어서

    Medium_Phone 에뮬레이터(API 36) · 실 백엔드 · 2026-09-02 12:20~12:30 KST. 1차에서 남긴 범위를 이어 돌았습니다.

    앞서 12시 이전 실측에서 홈·기록이 전부 실패한 것은 dev 서버 휴지 시간대(03~12시 KST) 였습니다(docs/qa/status.md:204). 12:20 에 서버가 열린 것을 확인하고 재개했습니다 — 앱 결함이 아니었습니다.

    통과한 것

    흐름 확인
    일기 작성 → 등록 빈 입력 「등록」 비활성 → 제목+본문 채우면 활성. 무드 선택 시 좌측 표식 반영
    등록 후 목록 갱신 새 기록이 즉시 목록에 뜨고 캘린더 dot·카운트도 함께 갱신
    기록 삭제 ⋯ → 삭제하기 → 목록에서 즉시 사라지고 빈 상태로 복귀
    임시저장 목록 총 5개, 툴바 카운트(5)와 목록 건수(5) 일치 — #769 의 「두 화면이 같은 범위를 본다」 계약 유지
    임시저장 저장 실패 안내 제목 없이 「임시저장」 → 인라인 빨간 문구 「제목을 입력해 주세요.」

    테스트로 만든 일기는 삭제해 정리했습니다. 임시저장 5건은 기존 데이터라 건드리지 않았습니다.

    새로 발견한 결함 — 자식 이슈 2건

    체크리스트가 또 낡은 것

    「일기 작성 — 날짜 선택 BottomSheetCalendar 정상 동작」 항목은 성립하지 않습니다. 날짜는 의도적으로 표시 전용입니다 — 서버가 생성·수정 어느 쪽에서도 date 를 받지 않아 피커를 걷어냈고, 코드에 그 근거와 「BE 가 수용하면 되돌린다」가 적혀 있습니다(#1008). 실기에서도 눌리지 않습니다.

    열린 이슈 전제를 실기로 재확인

    이슈 확인
    #1712 일기 탭에 「1개의 답변 완료」·「DAILY ANSWER」 그대로 — PR #1715 대상
    #1713 폰트 1.3 에서 빈 상태 문구까지 FAB 에 가림(「보아요」) — PR #1715 의 contentPadding 이 같은 LazyColumn item 이라 함께 해소됨
    #1065 임시저장에 제목이 필수인 것이 실기에서 재현
    #1542 실패 안내가 인라인 빨간 문구인 것이 실기에서 재현

    PR #1615 시연

    refactor/1615-media-select-sheet 를 설치해 확인했습니다 — 작성 화면 툴바의 링크 버튼 → core:ui 정본 시트가 뜹니다. 드래그 핸들·「미디어 추가하기」 헤더·4개 항목·들여쓰기된 디바이더(정본 지오메트리)가 시안대로이고, 「링크 추가하기」를 누르면 URL 입력 시트로 정확히 이어집니다.

    남은 범위

    • 수신자 마음의 기록(수신자 계정 필요)
    • 기록 수정 흐름
    • API 26 / 31 / 34 매트릭스 (현재 AVD 는 36 하나)
    • 회전

    실측 뒤 기기 설정(font_scale·night mode)은 원복했습니다.

  6. Sadturtleman commented on Sep 2, 2026

    @Sadturtleman
    CollaboratorAuthor

    3차 QA 회귀 — 수정 흐름 · 회전

    Medium_Phone 에뮬레이터(API 36) · 실 백엔드 · 2026-09-02 13:12~13:16 KST.

    통과한 것

    흐름 확인
    일기 수정 진입 ⋯ → 수정하기 → 프리필 전부 복원 (제목·본문·기분 선택 상태·날짜)
    수정 저장 본문 변경 후 등록 → 목록에 즉시 반영 (beedit → beedit TE)
    수정 후 삭제 목록에서 사라짐 — 테스트 데이터 정리 완료
    등록 필수값 안내 기분 미선택 시 「오늘의 기분을 골라 주세요.」 인라인 문구

    체크리스트 항목 2건이 더 성립하지 않습니다

    항목 실제
    「회전 … 레이아웃 깨짐 없음」 해당 없음 — AndroidManifest.xml:85 이 android:screenOrientation="portrait" 로 앱 전체를 세로 고정합니다. user_rotation 을 강제로 바꿔도 화면이 돌지 않는 것을 확인했습니다
    「일기 작성 — 날짜 선택 BottomSheetCalendar 정상 동작」 (2차에서 보고) 해당 없음 — 서버가 date 를 받지 않아 피커를 의도적으로 걷었습니다 (#1008)

    곁들여 — 결함으로 올리진 않은 관찰

    • 수정 화면의 제목이 「일기 기록하기」입니다. 신규 작성과 같은 문구라 수정 중임이 화면에 드러나지 않습니다. 시안에 수정 모드 제목이 따로 있는지 확인이 필요해 이슈로 올리지는 않았습니다.
    • adb input text 로 빠르게 입력하면 본문 글자가 일부 누락됩니다. 앱 결함이 아닙니다 — 0.4초 간격으로 한 글자씩 넣으면 8타 → 8글자로 정확합니다. 도구 속도 문제라 기록만 남깁니다.

    남은 범위

    • 수신자 마음의 기록 (수신자 계정 필요)
    • API 26 / 31 / 34 매트릭스 (현재 AVD 는 36 하나)

    기기 설정(user_rotation·accelerometer_rotation)은 원복했고 에뮬레이터는 종료했습니다.

  7. Sadturtleman commented on Sep 7, 2026

    @Sadturtleman
    CollaboratorAuthor

    횡단 회귀(0절) 정적 확인 (2026-09-07, develop)

    기기 QA 는 아직 돌리지 않았다. 다만 0절 항목 중 코드로 판정되는 것은 지금 확인할 수 있어 먼저 실측해 둔다. 나머지(회전·다크모드·폰트 스케일·비행기 모드)는 기기에서 해야 한다.

    항목 결과
    VM 에 Context 미주입 ✅ feature/mindrecord/presentation 의 *ViewModel.kt 에 @ApplicationContext 0건
    SharingStarted.WhileSubscribed(5_000) ✅ 3곳에서 사용 중
    CategoryError sealed 강제 ⚠️ 그 타입이 지금은 없다. 모듈 전체에 CategoryError 심볼이 0건이라 이 항목은 판정 대상 자체가 사라졌다. 오류 표현은 화면별 UiState 의 sealed·@StringRes·UiText 로 갈라져 있다
    UiText 패턴 ❌ 체크리스트가 낡았다 — 아래 참고

    UiText 항목은 지금 정책과 반대다

    체크리스트는 「에러 메시지가 Dynamic(서버 message) 우선, 없으면 Resource(fallback)」를 기대한다. 그 방향은 이후에 뒤집혔다.

    즉 이 모듈은 「서버 원문 우선」이 아니라 「원문을 화면에 싣지 않는다」 가 정본이다. 0절의 이 줄은 그대로 두면 QA 가 현행 동작을 결함으로 잡게 되므로, 기기 QA 착수 전에 문구를 뒤집어야 한다.

    기기 QA 는 별도로 진행한다.

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

Metadata

Metadata

Assignees

Labels

area:mindrecord마음의 기록 기능 영역test테스트·검증·회귀 방지 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions