1111from shop .test .helpers import ScanCodeApi
1212
1313
14+ def _tamper (token : str ) -> str :
15+ # 마지막 글자를 그대로 되돌려 쓰면 원본과 같아져 테스트가 간헐적으로 통과한다.
16+ return token [:- 1 ] + ("A" if token [- 1 ] != "A" else "B" )
17+
18+
1419@pytest .mark .django_db
1520def test_scancode_rejects_missing_token (anon_client ):
1621 response = ScanCodeApi (http_client = anon_client ).list ()
@@ -72,7 +77,7 @@ def test_scancode_opr_token_with_invalid_salt_rejects(anon_client, order_factory
7277 completed_order = order_factory (status = "completed" )
7378 opr = completed_order .products .first ()
7479 # token 의 salt 부분 변조 — from_scancode_token 이 None 반환 → 403.
75- tampered = opr . scancode_token [: - 1 ] + ( "A" if opr .scancode_token [ - 1 ] != "A" else "B" )
80+ tampered = _tamper ( opr .scancode_token )
7681 response = ScanCodeApi (http_client = anon_client ).list ({"token" : tampered })
7782 assert response .status_code == HTTP_403_FORBIDDEN
7883
@@ -149,7 +154,7 @@ def test_scancode_token_rejected_after_old_salt_removed(anon_client, order_facto
149154@pytest .mark .django_db
150155def test_scancode_error_page_shows_both_languages_and_guide (anon_client , order_factory ):
151156 order = order_factory (status = "completed" )
152- tampered = order .scancode_token [: - 1 ] + "A"
157+ tampered = _tamper ( order .scancode_token )
153158
154159 response = anon_client .get (reverse ("v1:scancode-list" ), {"token" : tampered }, HTTP_ACCEPT_LANGUAGE = "ko-KR,ko;q=0.9" )
155160 body = response .content .decode ()
@@ -162,7 +167,7 @@ def test_scancode_error_page_shows_both_languages_and_guide(anon_client, order_f
162167@pytest .mark .django_db
163168def test_scancode_error_page_is_english_for_english_client (anon_client , order_factory ):
164169 order = order_factory (status = "completed" )
165- tampered = order .scancode_token [: - 1 ] + "A"
170+ tampered = _tamper ( order .scancode_token )
166171
167172 response = anon_client .get (reverse ("v1:scancode-list" ), {"token" : tampered }, HTTP_ACCEPT_LANGUAGE = "en-US,en;q=0.9" )
168173 body = response .content .decode ()
@@ -180,7 +185,7 @@ def test_scancode_renders_html_even_when_client_asks_for_json(anon_client, order
180185 assert ok .status_code == HTTP_200_OK
181186 assert ok ["Content-Type" ].startswith ("text/html" )
182187
183- tampered = order .scancode_token [: - 1 ] + "A"
188+ tampered = _tamper ( order .scancode_token )
184189 error = anon_client .get (reverse ("v1:scancode-list" ), {"token" : tampered }, HTTP_ACCEPT = "application/json" )
185190 assert error .status_code == HTTP_404_NOT_FOUND
186191 assert SCANCODE_MESSAGES ["order_not_found" ]["ko" ] in error .content .decode ()
0 commit comments