2727)
2828
2929
30+ def assert_wordcloud_called_with_unordered (
31+ mocked_get_wordcloud , expected_messages : set [str ], expected_mask_key : str
32+ ):
33+ """验证 get_wordcloud 被调用,使用集合比较忽略消息顺序"""
34+ assert mocked_get_wordcloud .call_count == 1
35+ call_args = mocked_get_wordcloud .call_args
36+ assert set (call_args [0 ][0 ]) == expected_messages
37+ assert call_args [0 ][1 ] == expected_mask_key
38+
39+
3040@pytest .fixture
3141async def _message_record (app : App ):
3242 from nonebot_plugin_chatrecorder import serialize_message
@@ -293,8 +303,10 @@ async def test_today_wordcloud(app: App, mocker: MockerFixture):
293303 ctx .should_finished ()
294304
295305 mocked_datetime_now .assert_called_once_with ()
296- mocked_get_wordcloud .assert_called_once_with (
297- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
306+ assert_wordcloud_called_with_unordered (
307+ mocked_get_wordcloud ,
308+ {"10:1-2" , "11:1-2" },
309+ "qq_group-group_id=10000" ,
298310 )
299311
300312
@@ -331,7 +343,11 @@ async def test_my_today_wordcloud(app: App, mocker: MockerFixture):
331343 ctx .should_finished ()
332344
333345 mocked_datetime_now .assert_called_once_with ()
334- mocked_get_wordcloud .assert_called_once_with (["10:1-2" ], "qq_group-group_id=10000" )
346+ assert_wordcloud_called_with_unordered (
347+ mocked_get_wordcloud ,
348+ {"10:1-2" },
349+ "qq_group-group_id=10000" ,
350+ )
335351
336352
337353@pytest .mark .usefixtures ("_message_record" )
@@ -366,8 +382,10 @@ async def test_yesterday_wordcloud(app: App, mocker: MockerFixture):
366382 ctx .should_finished ()
367383
368384 mocked_datetime_now .assert_called_once_with ()
369- mocked_get_wordcloud .assert_called_once_with (
370- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
385+ assert_wordcloud_called_with_unordered (
386+ mocked_get_wordcloud ,
387+ {"10:1-2" , "11:1-2" },
388+ "qq_group-group_id=10000" ,
371389 )
372390
373391
@@ -404,7 +422,11 @@ async def test_my_yesterday_wordcloud(app: App, mocker: MockerFixture):
404422 ctx .should_finished ()
405423
406424 mocked_datetime_now .assert_called_once_with ()
407- mocked_get_wordcloud .assert_called_once_with (["10:1-2" ], "qq_group-group_id=10000" )
425+ assert_wordcloud_called_with_unordered (
426+ mocked_get_wordcloud ,
427+ {"10:1-2" },
428+ "qq_group-group_id=10000" ,
429+ )
408430
409431
410432@pytest .mark .usefixtures ("_message_record" )
@@ -439,8 +461,10 @@ async def test_week_wordcloud(app: App, mocker: MockerFixture):
439461 ctx .should_finished ()
440462
441463 mocked_datetime_now .assert_called_once_with ()
442- mocked_get_wordcloud .assert_called_once_with (
443- ["10:1-3" , "11:1-3" ], "qq_group-group_id=10000"
464+ assert_wordcloud_called_with_unordered (
465+ mocked_get_wordcloud ,
466+ {"10:1-3" , "11:1-3" },
467+ "qq_group-group_id=10000" ,
444468 )
445469
446470
@@ -476,8 +500,10 @@ async def test_last_week_wordcloud(app: App, mocker: MockerFixture):
476500 ctx .should_finished ()
477501
478502 mocked_datetime_now .assert_called_once_with ()
479- mocked_get_wordcloud .assert_called_once_with (
480- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
503+ assert_wordcloud_called_with_unordered (
504+ mocked_get_wordcloud ,
505+ {"10:1-2" , "11:1-2" },
506+ "qq_group-group_id=10000" ,
481507 )
482508
483509
@@ -513,20 +539,16 @@ async def test_month_wordcloud(app: App, mocker: MockerFixture):
513539 ctx .should_finished ()
514540
515541 mocked_datetime_now .assert_called_once_with ()
516- mocked_get_wordcloud .assert_called_once_with (
517- ["10:2-1" , "11:2-1" ], "qq_group-group_id=10000"
542+ assert_wordcloud_called_with_unordered (
543+ mocked_get_wordcloud ,
544+ {"10:2-1" , "11:2-1" },
545+ "qq_group-group_id=10000" ,
518546 )
519547
520548
521549@pytest .mark .usefixtures ("_message_record" )
522550async def test_last_month_wordcloud (app : App , mocker : MockerFixture ):
523551 """测试上月词云"""
524- from nonebot_plugin_orm import get_session
525-
526- engine = get_session ().get_bind ()
527- if engine .dialect .name == "mysql" :
528- pytest .skip ("MySQL 上获取消息的顺序不同" )
529-
530552 from nonebot_plugin_saa import Image , MessageFactory
531553
532554 from nonebot_plugin_wordcloud import wordcloud_cmd
@@ -556,20 +578,17 @@ async def test_last_month_wordcloud(app: App, mocker: MockerFixture):
556578 ctx .should_finished ()
557579
558580 mocked_datetime_now .assert_called_once_with ()
559- mocked_get_wordcloud .assert_called_once_with (
560- ["10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" ], "qq_group-group_id=10000"
581+ # 验证调用参数,使用集合比较忽略顺序
582+ assert_wordcloud_called_with_unordered (
583+ mocked_get_wordcloud ,
584+ {"10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" },
585+ "qq_group-group_id=10000" ,
561586 )
562587
563588
564589@pytest .mark .usefixtures ("_message_record" )
565590async def test_year_wordcloud (app : App , mocker : MockerFixture ):
566591 """测试年度词云"""
567- from nonebot_plugin_orm import get_session
568-
569- engine = get_session ().get_bind ()
570- if engine .dialect .name == "mysql" :
571- pytest .skip ("MySQL 上获取消息的顺序不同" )
572-
573592 from nonebot_plugin_saa import Image , MessageFactory
574593
575594 from nonebot_plugin_wordcloud import wordcloud_cmd
@@ -599,8 +618,10 @@ async def test_year_wordcloud(app: App, mocker: MockerFixture):
599618 ctx .should_finished ()
600619
601620 mocked_datetime_now .assert_called_once_with ()
602- mocked_get_wordcloud .assert_called_once_with (
603- ["10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" ],
621+ # 验证调用参数,使用集合比较忽略顺序
622+ assert_wordcloud_called_with_unordered (
623+ mocked_get_wordcloud ,
624+ {"10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" },
604625 "qq_group-group_id=10000" ,
605626 )
606627
@@ -638,8 +659,10 @@ async def test_my_year_wordcloud(app: App, mocker: MockerFixture):
638659 ctx .should_finished ()
639660
640661 mocked_datetime_now .assert_called_once_with ()
641- mocked_get_wordcloud .assert_called_once_with (
642- ["10:1-2" , "10:1-3" , "10:2-1" ], "qq_group-group_id=10000"
662+ assert_wordcloud_called_with_unordered (
663+ mocked_get_wordcloud ,
664+ {"10:1-2" , "10:1-3" , "10:2-1" },
665+ "qq_group-group_id=10000" ,
643666 )
644667
645668
@@ -669,20 +692,16 @@ async def test_history_wordcloud(app: App, mocker: MockerFixture):
669692 )
670693 ctx .should_finished ()
671694
672- mocked_get_wordcloud .assert_called_once_with (
673- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
695+ assert_wordcloud_called_with_unordered (
696+ mocked_get_wordcloud ,
697+ {"10:1-2" , "11:1-2" },
698+ "qq_group-group_id=10000" ,
674699 )
675700
676701
677702@pytest .mark .usefixtures ("_message_record" )
678703async def test_history_wordcloud_start_stop (app : App , mocker : MockerFixture ):
679704 """测试历史词云,有起始时间的情况"""
680- from nonebot_plugin_orm import get_session
681-
682- engine = get_session ().get_bind ()
683- if engine .dialect .name == "mysql" :
684- pytest .skip ("MySQL 上获取消息的顺序不同" )
685-
686705 from nonebot_plugin_saa import Image , MessageFactory
687706
688707 from nonebot_plugin_wordcloud import wordcloud_cmd
@@ -708,20 +727,17 @@ async def test_history_wordcloud_start_stop(app: App, mocker: MockerFixture):
708727 )
709728 ctx .should_finished ()
710729
711- mocked_get_wordcloud .assert_called_once_with (
712- ["10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" ], "qq_group-group_id=10000"
730+ # 验证调用参数,使用集合比较忽略顺序
731+ assert_wordcloud_called_with_unordered (
732+ mocked_get_wordcloud ,
733+ {"10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" },
734+ "qq_group-group_id=10000" ,
713735 )
714736
715737
716738@pytest .mark .usefixtures ("_message_record" )
717739async def test_history_wordcloud_start_stop_get_args (app : App , mocker : MockerFixture ):
718740 """测试历史词云,获取起始时间参数的情况"""
719- from nonebot_plugin_orm import get_session
720-
721- engine = get_session ().get_bind ()
722- if engine .dialect .name == "mysql" :
723- pytest .skip ("MySQL 上获取消息的顺序不同" )
724-
725741 from nonebot_plugin_saa import Image , MessageFactory
726742
727743 from nonebot_plugin_wordcloud import wordcloud_cmd
@@ -764,8 +780,10 @@ async def test_history_wordcloud_start_stop_get_args(app: App, mocker: MockerFix
764780 )
765781 ctx .should_finished ()
766782
767- mocked_get_wordcloud .assert_called_once_with (
768- ["10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" ],
783+ # 验证调用参数,使用集合比较忽略顺序
784+ assert_wordcloud_called_with_unordered (
785+ mocked_get_wordcloud ,
786+ {"10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" },
769787 "qq_group-group_id=10000" ,
770788 )
771789
@@ -842,8 +860,9 @@ async def test_today_wordcloud_v12(app: App, mocker: MockerFixture):
842860 ctx .should_finished ()
843861
844862 mocked_datetime_now .assert_called_once_with ()
845- mocked_get_wordcloud .assert_called_once_with (
846- ["v12-10:1-2" , "v12-11:1-2" ],
863+ assert_wordcloud_called_with_unordered (
864+ mocked_get_wordcloud ,
865+ {"v12-10:1-2" , "v12-11:1-2" },
847866 "unknown_ob12-platform=qq-detail_type=channel-guild_id=10000-channel_id=100000" ,
848867 )
849868
@@ -886,8 +905,9 @@ async def test_my_today_wordcloud_v12(app: App, mocker: MockerFixture):
886905 ctx .should_finished ()
887906
888907 mocked_datetime_now .assert_called_once_with ()
889- mocked_get_wordcloud .assert_called_once_with (
890- ["v12-10:1-2" ],
908+ assert_wordcloud_called_with_unordered (
909+ mocked_get_wordcloud ,
910+ {"v12-10:1-2" },
891911 "unknown_ob12-platform=qq-detail_type=channel-guild_id=10000-channel_id=100000" ,
892912 )
893913
@@ -929,8 +949,10 @@ async def test_today_wordcloud_qq_group_v12(app: App, mocker: MockerFixture):
929949 ctx .should_finished ()
930950
931951 mocked_datetime_now .assert_called_once_with ()
932- mocked_get_wordcloud .assert_called_once_with (
933- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
952+ assert_wordcloud_called_with_unordered (
953+ mocked_get_wordcloud ,
954+ {"10:1-2" , "11:1-2" },
955+ "qq_group-group_id=10000" ,
934956 )
935957
936958
@@ -968,7 +990,11 @@ async def test_today_wordcloud_exclude_user_ids(app: App, mocker: MockerFixture)
968990 ctx .should_finished ()
969991
970992 mocked_datetime_now .assert_called_once_with ()
971- mocked_get_wordcloud .assert_called_once_with (["11:1-2" ], "qq_group-group_id=10000" )
993+ assert_wordcloud_called_with_unordered (
994+ mocked_get_wordcloud ,
995+ {"11:1-2" },
996+ "qq_group-group_id=10000" ,
997+ )
972998
973999
9741000@pytest .mark .usefixtures ("_message_record" )
@@ -1011,8 +1037,10 @@ async def test_today_wordcloud_reply_message(app: App, mocker: MockerFixture):
10111037 ctx .should_finished ()
10121038
10131039 mocked_datetime_now .assert_called_once_with ()
1014- mocked_get_wordcloud .assert_called_once_with (
1015- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
1040+ assert_wordcloud_called_with_unordered (
1041+ mocked_get_wordcloud ,
1042+ {"10:1-2" , "11:1-2" },
1043+ "qq_group-group_id=10000" ,
10161044 )
10171045
10181046
@@ -1045,20 +1073,16 @@ async def test_group_today_wordcloud(app: App, mocker: MockerFixture):
10451073 ctx .should_finished ()
10461074
10471075 mocked_datetime_now .assert_called_once_with ()
1048- mocked_get_wordcloud .assert_called_once_with (
1049- ["10:1-2" , "11:1-2" ], "qq_group-group_id=10000"
1076+ assert_wordcloud_called_with_unordered (
1077+ mocked_get_wordcloud ,
1078+ {"10:1-2" , "11:1-2" },
1079+ "qq_group-group_id=10000" ,
10501080 )
10511081
10521082
10531083@pytest .mark .usefixtures ("_message_record" )
10541084async def test_group_year_wordcloud (app : App , mocker : MockerFixture ):
10551085 """测试本群年度词云"""
1056- from nonebot_plugin_orm import get_session
1057-
1058- engine = get_session ().get_bind ()
1059- if engine .dialect .name == "mysql" :
1060- pytest .skip ("MySQL 上获取消息的顺序不同" )
1061-
10621086 from nonebot_plugin_saa import Image , MessageFactory
10631087
10641088 from nonebot_plugin_wordcloud import wordcloud_cmd
@@ -1088,8 +1112,10 @@ async def test_group_year_wordcloud(app: App, mocker: MockerFixture):
10881112 ctx .should_finished ()
10891113
10901114 mocked_datetime_now .assert_called_once_with ()
1091- mocked_get_wordcloud .assert_called_once_with (
1092- ["10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" ],
1115+ # 验证调用参数,使用集合比较忽略顺序
1116+ assert_wordcloud_called_with_unordered (
1117+ mocked_get_wordcloud ,
1118+ {"10:1-2" , "11:1-2" , "10:1-3" , "11:1-3" , "10:2-1" , "11:2-1" },
10931119 "qq_group-group_id=10000" ,
10941120 )
10951121
@@ -1130,4 +1156,8 @@ async def test_config_default_personal_behavior(app: App, mocker: MockerFixture)
11301156 ctx .should_finished ()
11311157
11321158 mocked_datetime_now .assert_called_once_with ()
1133- mocked_get_wordcloud .assert_called_once_with (["10:1-2" ], "qq_group-group_id=10000" )
1159+ assert_wordcloud_called_with_unordered (
1160+ mocked_get_wordcloud ,
1161+ {"10:1-2" },
1162+ "qq_group-group_id=10000" ,
1163+ )
0 commit comments