bibimbap/.atp/work-session/20260622-092800/implementation/fix-L1.md

4.3 KiB

phase agent agent_version generated_at fix_loop concerns concerns_checked planned_workers actual_workers workers_spawned
implementation implementation-advisor 1 2026-06-22T10:10:00+09:00 L1
true 1 0 0

FIX LOOP L1 — GameReviewControllerTest RED 8건 해소

근본 원인 (확정)

가설 1 (기존/신규 테스트 계약 미갱신) 단독. 컨트롤러 버그(가설 2) 아님.

  • 실패 8건 전부 POST body 가 BODY_MIN(10자) 미만 → 컨트롤러가 design.md AC-9 "리뷰 본문 trim 후 9자 거부(400), 10자 통과" 에 따라 정당하게 400 반환.
  • 컨트롤러 axes 바인딩은 무관: 테스트가 controller.createReview(...) 를 6개 위치 인자로 직접 호출(createReview/updateReview 래퍼, test:409-421) → MockMvc 폼바인딩 경로 미사용. @RequestParam 평면 파라미터(immersion=…) 구성과도 무관. 검증 순서도 design §5.3 정합 확인 (CSRF→auth→game존재→axes파싱→body검증→overall계산→conflict→insert→axes insert).
  • conflict 테스트(409 기대)도 동일 원인: 1st POST 의 body 가 3자("또작성") 라 body 검증에서 400 으로 죽어 conflict(169행) 까지 도달 못 함.

실패 8건 본문 길이 (수정 전)

테스트 본문(전) 길이 수정 후 본문 길이
createReviewReturnsEditedFalse:72 재미있음 4 정말 재미있는 게임입니다 13
updateReviewReturnsEditedTrue:90 더 좋아짐 5 수정 후 훨씬 더 좋아졌습니다 16
createSecondReviewReturnsConflict:109 또작성 3 같은 게임에 또 작성 시도합니다 17
assertCreateRatingAccepted(1/5 경계) 내용입니다열자 7 별점 경계값 통과 검증 본문입니다 18
createReviewAutoAveragesOverall…:258 자동평균테스트 7 별점 자동평균 계산 검증 본문 16
createReviewUsesManualOverall…:281 수동평점테스트 7 수동 별점 사용 검증 본문입니다 17
createReviewPersistsSixAxes:306 여섯축저장테스트 8 여섯 축 저장 검증용 본문입니다 17

수정 내역 (테스트만, 컨트롤러/계약 불변)

파일: src/test/java/com/pandoli365/bibimbap/controller/api/GameReviewControllerTest.java

7개 지점 본문 문자열 교체(헬퍼 assertCreateRatingAccepted 1곳이 rating 1/5 두 boundary 케이스 커버 → 실패 8건):

  • 72행, 90행, 109행, 258행, 281행, 306행 직접 교체
  • assertCreateRatingAccepted 본문(402행) 교체 → createReviewAcceptsRatingOneBoundary / FiveBoundary 동시 해소

추가(우연통과 배제, §2.6 다항목 재검):

  • assertCreateRatingRejected 본문(382행) "내용입니다열자"(7자)→"별점 범위 검증용 본문입니다"(15자) 로 상향. 기존 7자였다면 rating 0/6 거부를 검증하려 해도 body 검증(400)에서 먼저 걸려 우연히 400 통과할 위험이 있었음. body 를 10자 이상으로 올려 rating 검증 분기까지 실제 도달함을 보장.

행위 검증 전부 보존: edited 마커(false/true), 게임당1회 409(never addGameReview), rating 1~5 경계, overall 자동평균(rating=4·ratingManual=false)/수동(rating=2·manual=true), addReviewAxes 6행 — 모든 assertion 원형 유지. 검증을 무력화하거나 계약을 약화하지 않음.

공유 문자열 일괄치환 회피 (정밀성)

"내용입니다열자"(7자) 는 통과 중인 CSRF/forbidden/missing-axis 테스트(190/204/235행)에도 쓰임. 그 테스트들은 본문 검증 이전 단계(CSRF 403 / 비작성자 FORBIDDEN / axis 누락 400)에서 분기되어 짧은 본문이어도 정상 통과 → 의도된 단축 본문. 따라서 일괄 치환 금지, 성공경로 헬퍼 2곳만 정밀 교체.

실행 결과

  • ./mvnw test -Dtest=GameReviewControllerTestTests run: 20, Failures: 0 (GREEN)
  • ./mvnw test (전체) → Tests run: 43, Failures: 0, Errors: 0, Skipped: 0 (회귀 0)
    • GameCommentControllerTest 17/17, GameReviewControllerTest 20/20, UserControllerCsrfTest 5/5, BibimbapApplicationTests 1/1

손대지 않은 항목 (지시 준수)

  • GameReviewController.java 등 main 소스 무수정 (계약·검증순서 design §5 정합 확인만).
  • ${}0 / sort5 / axis6 grep 검증, DbUpdateQueryGeneratorTest — 미접촉.