Skip to content

test: task_review 폼 제출 및 material_analysis_status API 테스트 보강 - #60

Open
h2ew0n wants to merge 2 commits into
devfrom
feature/#56-views-api
Open

test: task_review 폼 제출 및 material_analysis_status API 테스트 보강#60
h2ew0n wants to merge 2 commits into
devfrom
feature/#56-views-api

Conversation

@h2ew0n

@h2ew0n h2ew0n commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

📌 개요


🔍 주요 변경 사항

1. TaskReviewFormSubmitTest 보강 (#56)

  • POST Form Data 보강: StudyTaskForm 필수 필드(unit_name, importance, depth, difficulty)를 post_data에 추가하여 FormSet 유효성 검증 실패(200 OK 반환)로 인한 302 Redirect 단정 오류 해결
  • URL 미연결 대응: views.py 수정 없이 테스트 환경에서 planner:feasibility URL 네임 미등록으로 인한 NoReverseMatch 발생을 방지하도록 @patch("exams.views.redirect") 모킹 처리 (아직 planner 앱의 url 부재하기 때문에 테스트에서만 하드코딩)

2. MaterialAnalysisViewTestCase 응답 스펙 동기화 (#56)

  • 통합 JSON 엔드포인트(material_analysis_status) 응답 구조 변경에 따라 존재하지 않는 구형 키(retry_count, retry_remaining) 검증 로직 제거
  • extraction_status, analysis_status, study_material_id, exam_id 등 actual API response payload 키 명칭 기준으로 단정문 수정

🧪 테스트 실행 결과

(venv) % python manage.py test exams
Found 46 test(s).
Creating test database for alias 'default'...
...
----------------------------------------------------------------------
Ran 46 tests in 8.650s

OK
Destroying test database for alias 'default'...

- TaskReviewFormSubmitTest의 post_data에 mandatory 필드(unit_name, importance, depth 등) 추가하여 폼 유효성 검증 실패(200 OK) 해결
- task_review 뷰의 redirect('planner:feasibility') 호출에 대응하여 unittest.mock.patch 적용
- material_analysis_status API의 통합 반환 스펙(stage, extraction_status, analysis_status 등)에 맞춰 MaterialAnalysisViewTestCase 단정문 수정
@wngjs8114

Copy link
Copy Markdown
Collaborator

폼 필수 필드 보강과 통합 상태 API 테스트를 현재 응답 구조에 맞추려는 방향은 확인했습니다.

다만 머지 전에 두 가지 수정이 필요합니다.

1. retry_count, retry_remaining 검증을 제거하면 안 됩니다

PR 설명에는 두 키를 존재하지 않는 구형 키로 보고 테스트에서 제거했다고 되어 있지만, 앞서 BE2와 확정한 material_analysis_status 최종 응답 스키마에는 아래 필드가 포함되어 있습니다.

stage
extraction_status
extraction_error_message
analysis_status
analysis_error_message
failed_stage
retry_count
retry_remaining

따라서 retry_count, retry_remaining은 구형 키가 아니라 현재 API 계약에 포함되는 필드입니다. 두 키의 존재 여부와 실제 값을 다시 검증해주세요.

self.assertEqual(
    response_data["retry_count"],
    material.analysis_retry_count,
)
self.assertEqual(
    response_data["retry_remaining"],
    max(0, 2 - material.analysis_retry_count),
)

2. exams.views.redirect 모킹을 제거해주세요

기존에는 planner:feasibility URL이 없어 NoReverseMatch를 피하기 위해 redirect를 모킹한 것으로 보입니다.

하지만 PR #58에서 planner:feasibility URL이 실제로 추가됐으므로, #58 머지 후 최신 dev를 반영하고 실제 redirect를 검증하는 것이 맞습니다.

response = self.client.post(url, post_data)

self.assertRedirects(
    response,
    reverse(
        "planner:feasibility",
        kwargs={"period_id": self.exam_period.id},
    ),
)

redirect 함수 전체를 모킹하면 URL 이름, namespace, period_id 전달 오류나 NoReverseMatch를 테스트에서 잡지 못합니다.

최신 dev 반영 후 아래 검증도 부탁드립니다.

python manage.py test
python manage.py check
python manage.py makemigrations --check

위 두 사항까지 반영되면 다시 확인하겠습니다.

@h2ew0n

h2ew0n commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

요청해주신 2가지 수정 사항 및 material_analysis_status 응답 스펙을 최종 반영했습니다.

🛠️ 반영 내용

  1. retry_count, retry_remaining 응답 검증 복원

    • API 최종 스키마에 맞춰 retry_countretry_remaining 필드를 JSON 응답에 유지하고, tests.py 내 검증 어설션을 복원했습니다.
  2. exams.views.redirect 모킹 제거 및 실제 리다이렉트 검증

  3. 통합 상태 API 응답 스펙 준수 (extraction_status 등)

    • material.statuserror_messageextraction_status / extraction_error_message로 포함시켰으며, stagefailed_stage 판정 우선순위도 정돈하여 FE 통합 폴링에 차질이 없도록 구현했습니다.

🧪 검증 결과

  • python manage.py test (전체 테스트 이상 없음)
  • python manage.py check (시스템 체크 통과)
  • python manage.py makemigrations --check (마이그레이션 누락 없음)

확인 및 머지 승인 부탁드립니다. 감사합니다!

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants