From 8a018d7ae7f90b87ea7281033fcd5fe9b8c8aef2 Mon Sep 17 00:00:00 2001 From: BcKmini <151009045+BcKmini@users.noreply.github.com> Date: Fri, 14 Aug 2026 14:13:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20AiRunReview=20'=EB=B6=84=EC=84=9D=20?= =?UTF-8?q?=EA=B7=BC=EA=B1=B0'=EB=A5=BC=20=EC=8B=A4=EC=A0=9C=20API=20?= =?UTF-8?q?=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EB=A0=8C=EB=8D=94=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit evidence 필드와 무관하게 항상 '현재 분석 API에서 제공하지 않음'을 하드코딩 출력하던 것을 실제 run.evidence 값으로 대체 (값 없을 때만 안내 문구). server#170에서 evidence 필드를 실제로 채워서 보내도록 먼저 수정함. Closes #336 Co-Authored-By: Claude Sonnet 5 --- src/api/aiRuns.ts | 1 + .../CreateWorkPage/CreateWorkPage.test.tsx | 1 + src/pages/ReviewWorkPage/AiRunReview.test.tsx | 38 +++++++++++++++++++ src/pages/ReviewWorkPage/AiRunReview.tsx | 4 +- .../ReviewWorkPage/ReviewWorkPage.test.tsx | 1 + 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/api/aiRuns.ts b/src/api/aiRuns.ts index 795d60d..ff370b0 100644 --- a/src/api/aiRuns.ts +++ b/src/api/aiRuns.ts @@ -28,6 +28,7 @@ export interface AiRunResponse { status: AiRunStatus analysis_outcome: AiAnalysisOutcome | null detected_intent: string | null + evidence: string | null error_code: string | null attempt_count: number version: number diff --git a/src/pages/CreateWorkPage/CreateWorkPage.test.tsx b/src/pages/CreateWorkPage/CreateWorkPage.test.tsx index bd6925b..790aa9b 100644 --- a/src/pages/CreateWorkPage/CreateWorkPage.test.tsx +++ b/src/pages/CreateWorkPage/CreateWorkPage.test.tsx @@ -21,6 +21,7 @@ const AI_RUN = { status: 'SUCCEEDED', analysis_outcome: 'NEEDS_INFO', detected_intent: 'EXPIRY_RENEWAL', + evidence: null, error_code: null, attempt_count: 1, version: 1, diff --git a/src/pages/ReviewWorkPage/AiRunReview.test.tsx b/src/pages/ReviewWorkPage/AiRunReview.test.tsx index 4a07130..2d8ef93 100644 --- a/src/pages/ReviewWorkPage/AiRunReview.test.tsx +++ b/src/pages/ReviewWorkPage/AiRunReview.test.tsx @@ -20,6 +20,7 @@ const RUN: AiRunResponse = { status: 'SUCCEEDED', analysis_outcome: 'REVIEW_REQUIRED', detected_intent: 'EXPIRY_RENEWAL', + evidence: null, error_code: null, attempt_count: 1, version: 3, @@ -92,6 +93,7 @@ function processingRun(): AiRunResponse { status: 'RUNNING', analysis_outcome: null, detected_intent: null, + evidence: null, version: 1, questions: [], candidates: [], @@ -104,6 +106,7 @@ function needsInfoRun(): AiRunResponse { status: 'SUCCEEDED', analysis_outcome: 'NEEDS_INFO', detected_intent: 'EXPIRY_RENEWAL', + evidence: null, version: 2, questions: [ { @@ -234,6 +237,41 @@ describe('AiRunReview candidate decision', () => { }) }) +describe('AiRunReview 분석 근거', () => { + function mockCatalogAndWorkers() { + vi.mocked(fetch).mockImplementation((input) => { + const url = String(input) + if (url.includes('/workflow-catalogs')) return Promise.resolve(jsonResponse(CATALOG)) + if (url.includes('/workers')) { + return Promise.resolve(jsonResponse({ items: [], page: 0, size: 100, total_elements: 0 })) + } + return Promise.reject(new Error(`Unexpected request: ${url}`)) + }) + } + + it('renders the evidence text returned by the API', async () => { + mockCatalogAndWorkers() + render( + + + , + ) + + expect(await screen.findByText('체류만료일이 30일 이내로 확인됨')).toBeInTheDocument() + }) + + it('falls back to a placeholder when the API has no evidence yet', async () => { + mockCatalogAndWorkers() + render( + + + , + ) + + expect(await screen.findByText('현재 분석 API에서 제공하지 않음')).toBeInTheDocument() + }) +}) + describe('AiRunReview progress updates', () => { afterEach(() => { vi.useRealTimers() diff --git a/src/pages/ReviewWorkPage/AiRunReview.tsx b/src/pages/ReviewWorkPage/AiRunReview.tsx index 671e8ee..0af41d0 100644 --- a/src/pages/ReviewWorkPage/AiRunReview.tsx +++ b/src/pages/ReviewWorkPage/AiRunReview.tsx @@ -391,7 +391,9 @@ export function AiRunReview({ initialRun, initialDraft }: AiRunReviewProps) {

분석 근거

-

현재 분석 API에서 제공하지 않음

+

+ {run.evidence ?? '현재 분석 API에서 제공하지 않음'} +

diff --git a/src/pages/ReviewWorkPage/ReviewWorkPage.test.tsx b/src/pages/ReviewWorkPage/ReviewWorkPage.test.tsx index 260c7cc..64b5860 100644 --- a/src/pages/ReviewWorkPage/ReviewWorkPage.test.tsx +++ b/src/pages/ReviewWorkPage/ReviewWorkPage.test.tsx @@ -34,6 +34,7 @@ describe('ReviewWorkPage', () => { status: 'SUCCEEDED', analysis_outcome: 'NEEDS_INFO', detected_intent: 'EXPIRY_RENEWAL', + evidence: null, error_code: null, attempt_count: 1, version: 1,