1
1
import asyncio
2
2
import unittest
3
3
from base64 import b64encode
4
+ from typing import get_args
4
5
from unittest .mock import AsyncMock , MagicMock , Mock , call , create_autospec , patch
5
6
6
7
from discord import AllowedMentions
10
11
from bot import constants
11
12
from bot .errors import LockedResourceError
12
13
from bot .exts .utils import snekbox
13
- from bot .exts .utils .snekbox import EvalJob , EvalResult , Snekbox
14
+ from bot .exts .utils .snekbox import EvalJob , EvalResult , Snekbox , SupportedPythonVersions
14
15
from bot .exts .utils .snekbox ._io import FileAttachment
15
16
from tests .helpers import MockBot , MockContext , MockMember , MockMessage , MockReaction , MockUser
16
17
@@ -21,6 +22,7 @@ def setUp(self):
21
22
self .bot = MockBot ()
22
23
self .cog = Snekbox (bot = self .bot )
23
24
self .job = EvalJob .from_code ("import random" )
25
+ self .default_version = get_args (SupportedPythonVersions )[0 ]
24
26
25
27
@staticmethod
26
28
def code_args (code : str ) -> tuple [EvalJob ]:
@@ -35,7 +37,7 @@ async def test_post_job(self):
35
37
context_manager = MagicMock ()
36
38
context_manager .__aenter__ .return_value = resp
37
39
self .bot .http_session .post .return_value = context_manager
38
- py_version = "3.12"
40
+ py_version = self . default_version
39
41
job = EvalJob .from_code ("import random" ).as_version (py_version )
40
42
self .assertEqual (await self .cog .post_job (job ), EvalResult ("Hi" , 137 ))
41
43
@@ -104,9 +106,13 @@ def test_prepare_timeit_input(self):
104
106
def test_eval_result_message (self ):
105
107
"""EvalResult.get_message(), should return message."""
106
108
cases = (
107
- ("ERROR" , None , ("Your 3.12 eval job has failed" , "ERROR" , "" )),
108
- ("" , 128 + snekbox ._eval .SIGKILL , ("Your 3.12 eval job timed out or ran out of memory" , "" , "" )),
109
- ("" , 255 , ("Your 3.12 eval job has failed" , "A fatal NsJail error occurred" , "" ))
109
+ ("ERROR" , None , (f"Your { self .default_version } eval job has failed" , "ERROR" , "" )),
110
+ (
111
+ "" ,
112
+ 128 + snekbox ._eval .SIGKILL ,
113
+ (f"Your { self .default_version } eval job timed out or ran out of memory" , "" , "" )
114
+ ),
115
+ ("" , 255 , (f"Your { self .default_version } eval job has failed" , "A fatal NsJail error occurred" , "" ))
110
116
)
111
117
for stdout , returncode , expected in cases :
112
118
exp_msg , exp_err , exp_files_err = expected
@@ -178,8 +184,8 @@ def test_eval_result_message_valid_signal(self, mock_signals: Mock):
178
184
mock_signals .return_value .name = "SIGTEST"
179
185
result = EvalResult (stdout = "" , returncode = 127 )
180
186
self .assertEqual (
181
- result .get_status_message (EvalJob ([], version = "3.12" )),
182
- "Your 3.12 eval job has completed with return code 127 (SIGTEST)"
187
+ result .get_status_message (EvalJob ([])),
188
+ f "Your { self . default_version } eval job has completed with return code 127 (SIGTEST)"
183
189
)
184
190
185
191
def test_eval_result_status_emoji (self ):
@@ -253,7 +259,7 @@ async def test_eval_command_evaluate_once(self):
253
259
self .cog .send_job = AsyncMock (return_value = response )
254
260
self .cog .continue_job = AsyncMock (return_value = None )
255
261
256
- await self .cog .eval_command (self .cog , ctx = ctx , python_version = "3.12" , code = ["MyAwesomeCode" ])
262
+ await self .cog .eval_command (self .cog , ctx = ctx , python_version = self . default_version , code = ["MyAwesomeCode" ])
257
263
job = EvalJob .from_code ("MyAwesomeCode" )
258
264
self .cog .send_job .assert_called_once_with (ctx , job )
259
265
self .cog .continue_job .assert_called_once_with (ctx , response , "eval" )
@@ -267,7 +273,7 @@ async def test_eval_command_evaluate_twice(self):
267
273
self .cog .continue_job = AsyncMock ()
268
274
self .cog .continue_job .side_effect = (EvalJob .from_code ("MyAwesomeFormattedCode" ), None )
269
275
270
- await self .cog .eval_command (self .cog , ctx = ctx , python_version = "3.12" , code = ["MyAwesomeCode" ])
276
+ await self .cog .eval_command (self .cog , ctx = ctx , python_version = self . default_version , code = ["MyAwesomeCode" ])
271
277
272
278
expected_job = EvalJob .from_code ("MyAwesomeFormattedCode" )
273
279
self .cog .send_job .assert_called_with (ctx , expected_job )
@@ -311,7 +317,7 @@ async def test_send_job(self):
311
317
ctx .send .assert_called_once ()
312
318
self .assertEqual (
313
319
ctx .send .call_args .args [0 ],
314
- ":warning: Your 3.12 eval job has completed "
320
+ f ":warning: Your { self . default_version } eval job has completed "
315
321
"with return code 0.\n \n ```ansi\n [No output]\n ```"
316
322
)
317
323
allowed_mentions = ctx .send .call_args .kwargs ["allowed_mentions" ]
@@ -335,13 +341,13 @@ async def test_send_job_with_paste_link(self):
335
341
mocked_filter_cog .filter_snekbox_output = AsyncMock (return_value = (False , []))
336
342
self .bot .get_cog .return_value = mocked_filter_cog
337
343
338
- job = EvalJob .from_code ("MyAwesomeCode" ).as_version ("3.12" )
344
+ job = EvalJob .from_code ("MyAwesomeCode" ).as_version (self . default_version )
339
345
await self .cog .send_job (ctx , job ),
340
346
341
347
ctx .send .assert_called_once ()
342
348
self .assertEqual (
343
349
ctx .send .call_args .args [0 ],
344
- ":white_check_mark: Your 3.12 eval job "
350
+ f ":white_check_mark: Your { self . default_version } eval job "
345
351
"has completed with return code 0."
346
352
"\n \n ```ansi\n Way too long beard\n ```\n Full output: lookatmybeard.com"
347
353
)
@@ -362,13 +368,13 @@ async def test_send_job_with_non_zero_eval(self):
362
368
mocked_filter_cog .filter_snekbox_output = AsyncMock (return_value = (False , []))
363
369
self .bot .get_cog .return_value = mocked_filter_cog
364
370
365
- job = EvalJob .from_code ("MyAwesomeCode" ).as_version ("3.12" )
371
+ job = EvalJob .from_code ("MyAwesomeCode" ).as_version (self . default_version )
366
372
await self .cog .send_job (ctx , job ),
367
373
368
374
ctx .send .assert_called_once ()
369
375
self .assertEqual (
370
376
ctx .send .call_args .args [0 ],
371
- ":x: Your 3.12 eval job has completed with return code 127."
377
+ f ":x: Your { self . default_version } eval job has completed with return code 127."
372
378
"\n \n ```ansi\n ERROR\n ```"
373
379
)
374
380
@@ -395,13 +401,13 @@ async def test_send_job_with_disallowed_file_ext(self):
395
401
mocked_filter_cog .filter_snekbox_output = AsyncMock (return_value = (False , disallowed_exts ))
396
402
self .bot .get_cog .return_value = mocked_filter_cog
397
403
398
- job = EvalJob .from_code ("MyAwesomeCode" ).as_version ("3.12" )
404
+ job = EvalJob .from_code ("MyAwesomeCode" ).as_version (self . default_version )
399
405
await self .cog .send_job (ctx , job ),
400
406
401
407
ctx .send .assert_called_once ()
402
408
res = ctx .send .call_args .args [0 ]
403
409
self .assertTrue (
404
- res .startswith (":white_check_mark: Your 3.12 eval job has completed with return code 0." )
410
+ res .startswith (f ":white_check_mark: Your { self . default_version } eval job has completed with return code 0." )
405
411
)
406
412
self .assertIn ("Files with disallowed extensions can't be uploaded: **.disallowed, .disallowed2, ...**" , res )
407
413
0 commit comments