@@ -24,9 +24,7 @@ def mock_docker_result(path: Path, mocker: MockerFixture):
24
24
return mock_plugin_test
25
25
26
26
27
- async def test_validate_plugin (
28
- tmp_path : Path , mocked_api : MockRouter , mocker : MockerFixture
29
- ) -> None :
27
+ async def test_validate_plugin (mocked_api : MockRouter , mocker : MockerFixture ) -> None :
30
28
"""验证插件信息"""
31
29
from src .providers .models import (
32
30
Metadata ,
@@ -98,8 +96,101 @@ async def test_validate_plugin(
98
96
assert mocked_api ["homepage" ].called
99
97
100
98
99
+ async def test_validate_plugin_with_previous (
100
+ mocked_api : MockRouter , mocker : MockerFixture
101
+ ) -> None :
102
+ """插件验证通过,但提供了之前插件信息的情况
103
+
104
+ 需要能够正常更新 author_id, tags 和 is_official 等信息
105
+ """
106
+ from src .providers .docker_test import Metadata
107
+ from src .providers .models import RegistryPlugin , StoreTestResult
108
+ from src .providers .store_test .validation import StorePlugin , validate_plugin
109
+
110
+ mock_datetime = mocker .patch ("src.providers.models.datetime" )
111
+ mock_datetime .now .return_value = datetime (
112
+ 2023 , 8 , 23 , 9 , 22 , 14 , 836035 , tzinfo = ZoneInfo ("Asia/Shanghai" )
113
+ )
114
+
115
+ output_path = Path (__file__ ).parent / "output.json"
116
+ mock_docker_result (output_path , mocker )
117
+
118
+ plugin = StorePlugin (
119
+ module_name = "module_name" ,
120
+ project_link = "project_link" ,
121
+ author_id = 1 ,
122
+ tags = [],
123
+ is_official = True ,
124
+ )
125
+
126
+ result , new_plugin = await validate_plugin (
127
+ plugin ,
128
+ "" ,
129
+ RegistryPlugin (
130
+ module_name = "module_name" ,
131
+ project_link = "project_link" ,
132
+ name = "name" ,
133
+ author = "author" ,
134
+ desc = "desc" ,
135
+ homepage = "https://nonebot.dev/" ,
136
+ tags = [],
137
+ is_official = False ,
138
+ type = "application" ,
139
+ supported_adapters = None ,
140
+ valid = True ,
141
+ time = "2023-06-22 12:10:18" ,
142
+ version = "0.2.0" ,
143
+ skip_test = False ,
144
+ ),
145
+ )
146
+
147
+ assert result == snapshot (
148
+ StoreTestResult (
149
+ config = "" ,
150
+ outputs = {
151
+ "validation" : None ,
152
+ "load" : """\
153
+ 创建测试目录 plugin_test
154
+ require("nonebot_plugin_alconna")\
155
+ """ ,
156
+ "metadata" : Metadata (
157
+ desc = "订阅牛客/CF/AT平台的比赛信息" ,
158
+ homepage = "https://nonebot.dev/" ,
159
+ name = "TREEHELP" ,
160
+ supported_adapters = None ,
161
+ type = "application" ,
162
+ ),
163
+ },
164
+ results = {"validation" : True , "load" : True , "metadata" : True },
165
+ test_env = {"unknown" : True },
166
+ version = "0.2.0" ,
167
+ )
168
+ )
169
+
170
+ assert new_plugin == snapshot (
171
+ RegistryPlugin (
172
+ author = "he0119" ,
173
+ desc = "订阅牛客/CF/AT平台的比赛信息" ,
174
+ homepage = "https://nonebot.dev/" ,
175
+ is_official = True ,
176
+ module_name = "module_name" ,
177
+ name = "TREEHELP" ,
178
+ project_link = "project_link" ,
179
+ skip_test = False ,
180
+ supported_adapters = None ,
181
+ tags = [],
182
+ time = "2023-09-01T00:00:00+00:00Z" ,
183
+ type = "application" ,
184
+ valid = True ,
185
+ version = "0.2.0" ,
186
+ )
187
+ )
188
+
189
+ assert mocked_api ["homepage" ].called
190
+
191
+
101
192
async def test_validate_plugin_skip_test (
102
- tmp_path : Path , mocked_api : MockRouter , mocker : MockerFixture
193
+ mocked_api : MockRouter , mocker : MockerFixture
103
194
) -> None :
104
195
"""跳过插件测试的情况
105
196
@@ -171,7 +262,7 @@ async def test_validate_plugin_skip_test(
171
262
172
263
173
264
async def test_validate_plugin_skip_test_plugin_test_failed (
174
- tmp_path : Path , mocked_api : MockRouter , mocker : MockerFixture
265
+ mocked_api : MockRouter , mocker : MockerFixture
175
266
) -> None :
176
267
"""跳过插件测试的情况
177
268
@@ -221,65 +312,14 @@ async def test_validate_plugin_skip_test_plugin_test_failed(
221
312
StoreTestResult (
222
313
config = "" ,
223
314
outputs = {
224
- "validation" : {
225
- "data" : {
226
- "module_name" : "nonebot_plugin_treehelp" ,
227
- "project_link" : "nonebot-plugin-treehelp" ,
228
- "time" : "2021-08-01T00:00:00+00:00" ,
229
- "name" : "帮助" ,
230
- "desc" : "获取插件帮助信息" ,
231
- "author" : "he0119" ,
232
- "homepage" : "https://nonebot.dev/" ,
233
- "tags" : [],
234
- "is_official" : False ,
235
- "type" : "application" ,
236
- "supported_adapters" : None ,
237
- "load" : True ,
238
- "metadata" : False ,
239
- "skip_test" : True ,
240
- "version" : "0.3.9" ,
241
- "test_output" : """\
242
- 创建测试目录 plugin_test
243
- For further information visit https://errors.pydantic.dev/2.9/v/model_type\x1b [0m\
244
- """ ,
245
- },
246
- "errors" : [
247
- {
248
- "type" : "missing" ,
249
- "loc" : ("author_id" ,),
250
- "msg" : "字段不存在" ,
251
- "input" : {
252
- "module_name" : "nonebot_plugin_treehelp" ,
253
- "project_link" : "nonebot-plugin-treehelp" ,
254
- "name" : "帮助" ,
255
- "desc" : "获取插件帮助信息" ,
256
- "author" : "he0119" ,
257
- "homepage" : "https://nonebot.dev/" ,
258
- "tags" : [],
259
- "is_official" : False ,
260
- "type" : "application" ,
261
- "supported_adapters" : None ,
262
- "valid" : True ,
263
- "time" : "2021-08-01T00:00:00+00:00" ,
264
- "version" : "0.3.9" ,
265
- "skip_test" : True ,
266
- "load" : False ,
267
- "test_output" : """\
268
- 创建测试目录 plugin_test
269
- For further information visit https://errors.pydantic.dev/2.9/v/model_type\x1b [0m\
270
- """ ,
271
- "metadata" : False ,
272
- },
273
- }
274
- ],
275
- },
315
+ "validation" : None ,
276
316
"load" : """\
277
317
创建测试目录 plugin_test
278
318
For further information visit https://errors.pydantic.dev/2.9/v/model_type\x1b [0m\
279
319
""" ,
280
320
"metadata" : None ,
281
321
},
282
- results = {"validation" : False , "load" : False , "metadata" : False },
322
+ results = {"validation" : True , "load" : False , "metadata" : False },
283
323
test_env = {"unknown" : True },
284
324
version = "0.3.9" ,
285
325
)
@@ -298,7 +338,7 @@ async def test_validate_plugin_skip_test_plugin_test_failed(
298
338
tags = [],
299
339
time = "2021-08-01T00:00:00+00:00" ,
300
340
type = "application" ,
301
- valid = False ,
341
+ valid = True ,
302
342
version = "0.3.9" ,
303
343
)
304
344
)
@@ -307,7 +347,7 @@ async def test_validate_plugin_skip_test_plugin_test_failed(
307
347
308
348
309
349
async def test_validate_plugin_failed_with_previous (
310
- tmp_path : Path , mocked_api : MockRouter , mocker : MockerFixture
350
+ mocked_api : MockRouter , mocker : MockerFixture
311
351
) -> None :
312
352
"""插件验证失败,但提供了之前插件信息的情况
313
353
@@ -365,9 +405,10 @@ async def test_validate_plugin_failed_with_previous(
365
405
"name" : "name" ,
366
406
"desc" : "desc" ,
367
407
"author" : "he0119" ,
408
+ "author_id" : 1 ,
368
409
"homepage" : "https://nonebot.dev/" ,
369
410
"tags" : [],
370
- "is_official" : False ,
411
+ "is_official" : True ,
371
412
"type" : "application" ,
372
413
"supported_adapters" : None ,
373
414
"metadata" : False ,
@@ -379,33 +420,6 @@ async def test_validate_plugin_failed_with_previous(
379
420
""" ,
380
421
},
381
422
"errors" : [
382
- {
383
- "type" : "missing" ,
384
- "loc" : ("author_id" ,),
385
- "msg" : "字段不存在" ,
386
- "input" : {
387
- "module_name" : "module_name" ,
388
- "project_link" : "project_link" ,
389
- "name" : "name" ,
390
- "desc" : "desc" ,
391
- "author" : "he0119" ,
392
- "homepage" : "https://nonebot.dev/" ,
393
- "tags" : [],
394
- "is_official" : False ,
395
- "type" : "application" ,
396
- "supported_adapters" : None ,
397
- "valid" : True ,
398
- "time" : "2023-09-01T00:00:00+00:00Z" ,
399
- "version" : "0.3.9" ,
400
- "skip_test" : False ,
401
- "load" : False ,
402
- "test_output" : """\
403
- 创建测试目录 plugin_test
404
- For further information visit https://errors.pydantic.dev/2.9/v/model_type\x1b [0m\
405
- """ ,
406
- "metadata" : False ,
407
- },
408
- },
409
423
{
410
424
"type" : "plugin.test" ,
411
425
"loc" : ("load" ,),
@@ -417,7 +431,7 @@ async def test_validate_plugin_failed_with_previous(
417
431
For further information visit https://errors.pydantic.dev/2.9/v/model_type\x1b [0m\
418
432
"""
419
433
},
420
- },
434
+ }
421
435
],
422
436
},
423
437
"load" : """\
0 commit comments