Skip to content

Commit 67495d2

Browse files
Copilotjb3
andcommitted
Update pytest to 9.0.0 and fix DumpError issues in tests
Co-authored-by: jb3 <[email protected]>
1 parent 0f17ae9 commit 67495d2

File tree

4 files changed

+38
-21
lines changed

4 files changed

+38
-21
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ dev = [
3838
"coverage==7.11.0",
3939
"httpx==0.28.1",
4040
"pre-commit==4.3.0",
41-
"pytest==8.4.2",
41+
"pytest==9.0.0",
4242
"pytest-cov==7.0.0",
4343
"pytest-subtests==0.14.1",
4444
"pytest-xdist==3.8.0",

tests/bot/exts/backend/test_error_handler.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,9 @@ async def test_error_handler_command_invoke_error(self):
135135
}
136136
)
137137

138-
for case in test_cases:
139-
with self.subTest(args=case["args"], expect_mock_call=case["expect_mock_call"]):
138+
for i, case in enumerate(test_cases):
139+
mock_type = "send" if case["expect_mock_call"] == "send" else "mock_function"
140+
with self.subTest(test_case=i, expect_mock_call=mock_type):
140141
self.ctx.send.reset_mock()
141142
self.assertIsNone(await self.cog.on_command_error(*case["args"]))
142143
if case["expect_mock_call"] == "send":
@@ -161,8 +162,8 @@ async def test_error_handler_conversion_error(self):
161162
}
162163
)
163164

164-
for case in cases:
165-
with self.subTest(**case):
165+
for i, case in enumerate(cases):
166+
with self.subTest(test_case=i):
166167
self.assertIsNone(await self.cog.on_command_error(self.ctx, case["error"]))
167168
case["mock_function_to_call"].assert_awaited_once_with(self.ctx, case["error"].original)
168169

@@ -173,8 +174,8 @@ async def test_error_handler_unexpected_errors(self):
173174
errors.ExtensionError(name="foo"),
174175
)
175176

176-
for err in errs:
177-
with self.subTest(error=err):
177+
for i, err in enumerate(errs):
178+
with self.subTest(test_case=i):
178179
self.cog.handle_unexpected_error.reset_mock()
179180
self.assertIsNone(await self.cog.on_command_error(self.ctx, err))
180181
self.cog.handle_unexpected_error.assert_awaited_once_with(self.ctx, err)
@@ -251,8 +252,8 @@ async def test_try_silence_silence_arguments(self):
251252
(MockTextChannel(), True)
252253
)
253254

254-
for channel, kick in test_cases:
255-
with self.subTest(kick=kick, channel=channel):
255+
for i, (channel, kick) in enumerate(test_cases):
256+
with self.subTest(test_case=i, kick=kick):
256257
self.ctx.reset_mock()
257258
self.ctx.invoked_with = "shh"
258259

@@ -291,8 +292,8 @@ async def test_try_silence_unsilence(self):
291292
("unshh", MockTextChannel())
292293
)
293294

294-
for invoke, channel in test_cases:
295-
with self.subTest(message=invoke, channel=channel):
295+
for i, (invoke, channel) in enumerate(test_cases):
296+
with self.subTest(test_case=i, message=invoke, has_channel=channel is not None):
296297
self.bot.get_command.side_effect = (self.silence.silence, self.silence.unsilence)
297298
self.ctx.reset_mock()
298299

@@ -386,33 +387,39 @@ async def test_handle_input_error_handler_errors(self):
386387
"""Should handle each error probably."""
387388
test_cases = (
388389
{
390+
"error_type": "MissingRequiredArgument",
389391
"error": errors.MissingRequiredArgument(MagicMock()),
390392
"call_prepared": True
391393
},
392394
{
395+
"error_type": "TooManyArguments",
393396
"error": errors.TooManyArguments(),
394397
"call_prepared": True
395398
},
396399
{
400+
"error_type": "BadArgument",
397401
"error": errors.BadArgument(),
398402
"call_prepared": True
399403
},
400404
{
405+
"error_type": "BadUnionArgument",
401406
"error": errors.BadUnionArgument(MagicMock(), MagicMock(), MagicMock()),
402407
"call_prepared": True
403408
},
404409
{
410+
"error_type": "ArgumentParsingError",
405411
"error": errors.ArgumentParsingError(),
406412
"call_prepared": False
407413
},
408414
{
415+
"error_type": "UserInputError",
409416
"error": errors.UserInputError(),
410417
"call_prepared": True
411418
}
412419
)
413420

414421
for case in test_cases:
415-
with self.subTest(error=case["error"], call_prepared=case["call_prepared"]):
422+
with self.subTest(error_type=case["error_type"], call_prepared=case["call_prepared"]):
416423
self.ctx.reset_mock()
417424
self.cog.send_error_with_help = AsyncMock()
418425
self.assertIsNone(await self.cog.handle_user_input_error(self.ctx, case["error"]))
@@ -426,33 +433,39 @@ async def test_handle_check_failure_errors(self):
426433
"""Should await `ctx.send` when error is check failure."""
427434
test_cases = (
428435
{
436+
"error_type": "BotMissingPermissions",
429437
"error": errors.BotMissingPermissions(MagicMock()),
430438
"call_ctx_send": True
431439
},
432440
{
441+
"error_type": "BotMissingRole",
433442
"error": errors.BotMissingRole(MagicMock()),
434443
"call_ctx_send": True
435444
},
436445
{
446+
"error_type": "BotMissingAnyRole",
437447
"error": errors.BotMissingAnyRole(MagicMock()),
438448
"call_ctx_send": True
439449
},
440450
{
451+
"error_type": "NoPrivateMessage",
441452
"error": errors.NoPrivateMessage(),
442453
"call_ctx_send": True
443454
},
444455
{
456+
"error_type": "InWhitelistCheckFailure",
445457
"error": InWhitelistCheckFailure(1234),
446458
"call_ctx_send": True
447459
},
448460
{
461+
"error_type": "ResponseCodeError",
449462
"error": ResponseCodeError(MagicMock()),
450463
"call_ctx_send": False
451464
}
452465
)
453466

454467
for case in test_cases:
455-
with self.subTest(error=case["error"], call_ctx_send=case["call_ctx_send"]):
468+
with self.subTest(error_type=case["error_type"], call_ctx_send=case["call_ctx_send"]):
456469
self.ctx.reset_mock()
457470
await self.cog.handle_check_failure(self.ctx, case["error"])
458471
if case["call_ctx_send"]:
@@ -465,25 +478,29 @@ async def test_handle_api_error(self, log_mock):
465478
"""Should `ctx.send` on HTTP error codes, and log at correct level."""
466479
test_cases = (
467480
{
481+
"status": 400,
468482
"error": ResponseCodeError(AsyncMock(status=400)),
469483
"log_level": "error"
470484
},
471485
{
486+
"status": 404,
472487
"error": ResponseCodeError(AsyncMock(status=404)),
473488
"log_level": "debug"
474489
},
475490
{
491+
"status": 550,
476492
"error": ResponseCodeError(AsyncMock(status=550)),
477493
"log_level": "warning"
478494
},
479495
{
496+
"status": 1000,
480497
"error": ResponseCodeError(AsyncMock(status=1000)),
481498
"log_level": "warning"
482499
}
483500
)
484501

485502
for case in test_cases:
486-
with self.subTest(error=case["error"], log_level=case["log_level"]):
503+
with self.subTest(status=case["status"], log_level=case["log_level"]):
487504
self.ctx.reset_mock()
488505
log_mock.reset_mock()
489506
await self.cog.handle_api_error(self.ctx, case["error"])
@@ -500,7 +517,7 @@ async def test_handle_api_error(self, log_mock):
500517
async def test_handle_unexpected_error(self, log_mock, new_scope_mock):
501518
"""Should `ctx.send` this error, error log this and sent to Sentry."""
502519
for case in (None, MockGuild()):
503-
with self.subTest(guild=case):
520+
with self.subTest(has_guild=case is not None):
504521
self.ctx.reset_mock()
505522
log_mock.reset_mock()
506523
new_scope_mock.reset_mock()

tests/bot/exts/moderation/infraction/test_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@ async def test_post_user(self):
6666
}
6767
]
6868

69-
for case in test_cases:
69+
for i, case in enumerate(test_cases):
7070
user = case["user"]
7171
post_result = case["post_result"]
7272
raise_error = case["raise_error"]
7373
payload = case["payload"]
7474

75-
with self.subTest(user=user, post_result=post_result, raise_error=raise_error, payload=payload):
75+
with self.subTest(test_case=i, has_error=raise_error is not None):
7676
self.bot.api_client.post.reset_mock(side_effect=True)
7777
self.ctx.bot.api_client.post.return_value = post_result
7878

uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)