Skip to content

Commit a5a4a7d

Browse files
committed
test: 添加验证 get_wordcloud 调用参数的辅助函数,使用集合比较忽略顺序
1 parent 0ffa8d9 commit a5a4a7d

File tree

1 file changed

+98
-68
lines changed

1 file changed

+98
-68
lines changed

tests/test_wordcloud.py

Lines changed: 98 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,16 @@
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
3141
async 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")
522550
async 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")
565590
async 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")
678703
async 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")
717739
async 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")
10541084
async 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

Comments
 (0)