@@ -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