From 06f2c9a7db0a8de82ddf1113f93791c56057ed6b Mon Sep 17 00:00:00 2001 From: zhoukailian Date: Fri, 27 Mar 2026 09:20:36 +0800 Subject: [PATCH] =?UTF-8?q?test:=20=E8=A1=A5=E5=85=85=20moe=5Fmail=20?= =?UTF-8?q?=E5=A4=9A=E5=B0=81=E9=AA=8C=E8=AF=81=E7=A0=81=E7=9A=84=E8=B7=A8?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=9B=9E=E5=BD=92=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_mail_code_reuse_guard.py | 111 ++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/tests/test_mail_code_reuse_guard.py b/tests/test_mail_code_reuse_guard.py index 9f30698..fe300af 100644 --- a/tests/test_mail_code_reuse_guard.py +++ b/tests/test_mail_code_reuse_guard.py @@ -410,3 +410,114 @@ def test_moe_mail_service_filters_old_messages_with_millisecond_timestamps(): ) assert code == "654321" + + +def test_moe_mail_service_cross_request_state_prefers_latest_of_three_messages(): + first_service = MeoMailEmailService({ + "base_url": "https://mail.example.com", + "api_key": "api-key", + }) + + first_responses = [ + { + "messages": [ + { + "id": "msg-1", + "from_address": "noreply@openai.com", + "subject": "Your verification code", + "received_at": 1742378400000, + }, + ] + }, + { + "message": { + "content": "Your OpenAI verification code is 111111", + } + }, + ] + + def fake_make_request_first(method, endpoint, **kwargs): + if not first_responses: + raise AssertionError(f"未准备响应: {method} {endpoint}") + return first_responses.pop(0) + + first_service._make_request = fake_make_request_first + + first_code = first_service.get_verification_code( + email="tester@example.com", + email_id="email-1", + timeout=1, + ) + state = first_service.export_verification_state("tester@example.com") + + second_service = MeoMailEmailService({ + "base_url": "https://mail.example.com", + "api_key": "api-key", + }) + second_service.load_verification_state("tester@example.com", **state) + + second_calls = [] + second_responses = { + "/api/emails/email-1": { + "messages": [ + { + "id": "msg-1", + "from_address": "noreply@openai.com", + "subject": "Your verification code", + "received_at": 1742378400000, + }, + { + "id": "msg-2", + "from_address": "noreply@openai.com", + "subject": "Your verification code", + "received_at": 1742378403000, + }, + { + "id": "msg-3", + "from_address": "noreply@openai.com", + "subject": "Your verification code", + "received_at": 1742378406000, + }, + ] + }, + "/api/emails/email-1/msg-3": { + "message": { + "content": "Your OpenAI verification code is 333333", + } + }, + "/api/emails/email-1/msg-2": { + "message": { + "content": "Your OpenAI verification code is 222222", + } + }, + "/api/emails/email-1/msg-1": { + "message": { + "content": "Your OpenAI verification code is 111111", + } + }, + } + + def fake_make_request_second(method, endpoint, **kwargs): + second_calls.append(endpoint) + if endpoint not in second_responses: + raise AssertionError(f"未准备响应: {method} {endpoint}") + return second_responses[endpoint] + + second_service._make_request = fake_make_request_second + + second_code = second_service.get_verification_code( + email="tester@example.com", + email_id="email-1", + timeout=1, + ) + + assert first_code == "111111" + assert state == { + "used_codes": ["111111"], + "seen_messages": ["id:msg-1"], + } + assert second_code == "333333" + assert second_calls == [ + "/api/emails/email-1", + "/api/emails/email-1/msg-3", + ]