1010 merge_rerank ,
1111)
1212
13- # ============================================================
14- # 0) analysis_service + OpenAI 전체 mock (라우트 400 방지)
15- # ============================================================
1613@pytest .fixture (autouse = True )
1714def mock_all (monkeypatch ):
18- """
19- merge 라우트에 사용되는 모든 외부 요소를 mock:
20- - analysis_service.analyze
21- - OpenAI completions.create
22- """
23-
24- # ---------------------------
25- # 1) diary 분석 mock
26- # ---------------------------
2715 class FakeAnalysis :
2816 def analyze (self , diary ):
2917 return {
@@ -38,9 +26,6 @@ def analyze(self, diary):
3826 merge_routes .analysis_service , "analyze" , FakeAnalysis ().analyze
3927 )
4028
41- # ---------------------------
42- # 2) OpenAI completions mock
43- # ---------------------------
4429 import ai .services .merge .merge_service as ms
4530
4631 class FakeMessage :
@@ -55,7 +40,6 @@ class FakeResponse:
5540 def __init__ (self , content ):
5641 self .choices = [FakeChoice (content )]
5742
58- # merge_rerank가 반드시 텍스트를 생성할 수 있도록 한다
5943 def fake_create (* args , ** kwargs ):
6044 return FakeResponse ("첫번째 단락입니다.\n ###\n 두번째 단락입니다." )
6145
@@ -64,9 +48,6 @@ def fake_create(*args, **kwargs):
6448 )
6549
6650
67- # ============================================================
68- # 공용 payload
69- # ============================================================
7051def _build_base_payload (end_flag : bool , advanced_flag : bool = False ) -> dict :
7152 return {
7253 "memos" : [
@@ -89,16 +70,8 @@ def _build_base_payload(end_flag: bool, advanced_flag: bool = False) -> dict:
8970 }
9071
9172
92- # ============================================================
93- # 1) /merge/ 라우트 테스트
94- # ============================================================
9573
9674def test_merge_only_streaming_route (client ):
97- """
98- Case A:
99- end_flag=False AND advanced_flag=False
100- → merge_stream → text/plain
101- """
10275 payload = _build_base_payload (end_flag = False , advanced_flag = False )
10376
10477 res = client .post ("/merge/" , data = json .dumps (payload ), content_type = "application/json" )
@@ -109,52 +82,7 @@ def test_merge_only_streaming_route(client):
10982 body = res .get_data (as_text = True ).strip ()
11083 assert body != ""
11184
112-
113- # def test_merge_rerank_route(client):
114- # """
115- # Case B:
116- # end_flag=False AND advanced_flag=True
117- # → merge_rerank → string
118- # """
119- # payload = _build_base_payload(end_flag=False, advanced_flag=True)
120-
121- # res = client.post("/merge/", data=json.dumps(payload), content_type="application/json")
122-
123- # assert res.status_code == 200
124-
125- # body = res.get_data(as_text=True)
126- # assert isinstance(body, str)
127- # assert body.strip() != ""
128-
129-
130- # def test_merge_and_analyze_route(client):
131- # """
132- # Case C:
133- # end_flag=True → merge 후 analysis → JSON
134- # """
135- # payload = _build_base_payload(end_flag=True, advanced_flag=True)
136- # payload["entry_date"] = "2025-10-29"
137- # payload["user_id"] = 123
138-
139- # res = client.post("/merge/", data=json.dumps(payload), content_type="application/json")
140-
141- # assert res.status_code == 200
142-
143- # data = res.get_json()
144- # assert "entry_date" in data
145- # assert "user_id" in data
146- # assert "diary" in data
147- # assert "icon" in data
148- # assert "ai_comment" in data
149- # assert "analysis" in data
150-
151- # assert data["diary"].strip() != ""
152-
153-
15485def test_merge_bad_request_route (client ):
155- """
156- 잘못된 요청 → KeyError → except → 400
157- """
15886 bad_payload = {
15987 # memos 누락
16088 "end_flag" : False ,
@@ -171,10 +99,6 @@ def test_merge_bad_request_route(client):
17199 assert "error" in res .get_json ()
172100
173101
174- # ============================================================
175- # 2) helper 함수 테스트
176- # ============================================================
177-
178102def test_l2norm_basic_and_zero ():
179103 vec = np .array ([[3.0 , 4.0 ]], dtype = np .float32 )
180104 out = l2norm (vec )
@@ -219,17 +143,8 @@ def test_embed_sentences_shape_and_norm():
219143 assert np .allclose (np .linalg .norm (E , axis = - 1 ), 1.0 , atol = 1e-3 )
220144
221145
222- # ============================================================
223- # 3) merge_rerank 전체 로직 커버
224- # ============================================================
225146
226147def test_merge_rerank_full_flow (monkeypatch ):
227- """
228- merge_rerank 내부 전체 흐름 커버 테스트
229- - 첫번째 메모 → 단락 선택됨
230- - 두번째 메모 → blocks 없음 → skip
231- - 세번째 메모 → 중복 단락 skip
232- """
233148 from ai .services .merge import merge_service as ms
234149
235150 def fake_embed (sentences ):
0 commit comments