Skip to content

Commit 06f2c9a

Browse files
committed
test: 补充 moe_mail 多封验证码的跨请求回归用例
1 parent c210d2c commit 06f2c9a

1 file changed

Lines changed: 111 additions & 0 deletions

File tree

tests/test_mail_code_reuse_guard.py

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,3 +410,114 @@ def fake_make_request(method, endpoint, **kwargs):
410410
)
411411

412412
assert code == "654321"
413+
414+
415+
def test_moe_mail_service_cross_request_state_prefers_latest_of_three_messages():
416+
first_service = MeoMailEmailService({
417+
"base_url": "https://mail.example.com",
418+
"api_key": "api-key",
419+
})
420+
421+
first_responses = [
422+
{
423+
"messages": [
424+
{
425+
"id": "msg-1",
426+
"from_address": "noreply@openai.com",
427+
"subject": "Your verification code",
428+
"received_at": 1742378400000,
429+
},
430+
]
431+
},
432+
{
433+
"message": {
434+
"content": "Your OpenAI verification code is 111111",
435+
}
436+
},
437+
]
438+
439+
def fake_make_request_first(method, endpoint, **kwargs):
440+
if not first_responses:
441+
raise AssertionError(f"未准备响应: {method} {endpoint}")
442+
return first_responses.pop(0)
443+
444+
first_service._make_request = fake_make_request_first
445+
446+
first_code = first_service.get_verification_code(
447+
email="tester@example.com",
448+
email_id="email-1",
449+
timeout=1,
450+
)
451+
state = first_service.export_verification_state("tester@example.com")
452+
453+
second_service = MeoMailEmailService({
454+
"base_url": "https://mail.example.com",
455+
"api_key": "api-key",
456+
})
457+
second_service.load_verification_state("tester@example.com", **state)
458+
459+
second_calls = []
460+
second_responses = {
461+
"/api/emails/email-1": {
462+
"messages": [
463+
{
464+
"id": "msg-1",
465+
"from_address": "noreply@openai.com",
466+
"subject": "Your verification code",
467+
"received_at": 1742378400000,
468+
},
469+
{
470+
"id": "msg-2",
471+
"from_address": "noreply@openai.com",
472+
"subject": "Your verification code",
473+
"received_at": 1742378403000,
474+
},
475+
{
476+
"id": "msg-3",
477+
"from_address": "noreply@openai.com",
478+
"subject": "Your verification code",
479+
"received_at": 1742378406000,
480+
},
481+
]
482+
},
483+
"/api/emails/email-1/msg-3": {
484+
"message": {
485+
"content": "Your OpenAI verification code is 333333",
486+
}
487+
},
488+
"/api/emails/email-1/msg-2": {
489+
"message": {
490+
"content": "Your OpenAI verification code is 222222",
491+
}
492+
},
493+
"/api/emails/email-1/msg-1": {
494+
"message": {
495+
"content": "Your OpenAI verification code is 111111",
496+
}
497+
},
498+
}
499+
500+
def fake_make_request_second(method, endpoint, **kwargs):
501+
second_calls.append(endpoint)
502+
if endpoint not in second_responses:
503+
raise AssertionError(f"未准备响应: {method} {endpoint}")
504+
return second_responses[endpoint]
505+
506+
second_service._make_request = fake_make_request_second
507+
508+
second_code = second_service.get_verification_code(
509+
email="tester@example.com",
510+
email_id="email-1",
511+
timeout=1,
512+
)
513+
514+
assert first_code == "111111"
515+
assert state == {
516+
"used_codes": ["111111"],
517+
"seen_messages": ["id:msg-1"],
518+
}
519+
assert second_code == "333333"
520+
assert second_calls == [
521+
"/api/emails/email-1",
522+
"/api/emails/email-1/msg-3",
523+
]

0 commit comments

Comments
 (0)