aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar wookie184 <[email protected]>2022-10-09 17:32:10 +0100
committerGravatar wookie184 <[email protected]>2022-10-09 17:32:10 +0100
commit8e15ff4727a352591b0441dab1092af00d5b94da (patch)
tree56e8fd91944100c7335d7f3f5b48126173617b6a /tests
parentMove tests out of moderation/ directory (diff)
Use scoring system that weights age and number of entries
Added new tests for this behaviour, and added pytest-subtests dev dependency
Diffstat (limited to 'tests')
-rw-r--r--tests/bot/exts/recruitment/talentpool/test_review.py58
1 files changed, 54 insertions, 4 deletions
diff --git a/tests/bot/exts/recruitment/talentpool/test_review.py b/tests/bot/exts/recruitment/talentpool/test_review.py
index 444724b9d..ed9b66e12 100644
--- a/tests/bot/exts/recruitment/talentpool/test_review.py
+++ b/tests/bot/exts/recruitment/talentpool/test_review.py
@@ -26,9 +26,14 @@ class AsyncIterator:
raise StopAsyncIteration
-def nomination(inserted_at, num_entries, reviewed=False):
+def nomination(
+ inserted_at: datetime,
+ num_entries: int,
+ reviewed: bool = False,
+ id: int | None = None
+) -> tuple[int, dict]:
return (
- MockMember().id,
+ id or MockMember().id,
{"inserted_at": inserted_at.isoformat(), "entries": [Mock() for _ in range(num_entries)], "reviewed": reviewed},
)
@@ -140,10 +145,10 @@ class ReviewerTests(unittest.IsolatedAsyncioTestCase):
),
]
- for nominations, expected in cases:
+ for (case_num, (nominations, expected)) in enumerate(cases, 1):
nomination_dict = dict(nominations)
- with self.subTest(nominations=nominations, expected=expected):
+ with self.subTest(case_num=case_num):
self.pool.cache = nomination_dict
res = await self.reviewer.get_user_for_review()
@@ -151,3 +156,48 @@ class ReviewerTests(unittest.IsolatedAsyncioTestCase):
self.assertIsNone(res)
else:
self.assertEqual(res, nominations[expected][0])
+
+ @patch("bot.exts.recruitment.talentpool._review.MIN_NOMINATION_TIME", timedelta(days=0))
+ async def test_get_user_for_review_order(self):
+ now = datetime.now(timezone.utc)
+
+ # Each case in cases is a list of nominations in the order they should be chosen from first to last
+ cases = [
+ [
+ nomination(now - timedelta(days=10), 3, id=1),
+ nomination(now - timedelta(days=50), 2, id=2),
+ nomination(now - timedelta(days=100), 1, id=3),
+ ],
+ [
+ nomination(now - timedelta(days=100), 2, id=1),
+ nomination(now - timedelta(days=10), 3, id=2),
+ nomination(now - timedelta(days=80), 1, id=3),
+ nomination(now - timedelta(days=79), 1, id=4),
+ nomination(now - timedelta(days=10), 2, id=5),
+ ],
+ [
+ nomination(now - timedelta(days=200), 8, id=1),
+ nomination(now - timedelta(days=359), 4, id=2),
+ nomination(now - timedelta(days=230), 5, id=3),
+ nomination(now - timedelta(days=331), 3, id=4),
+ nomination(now - timedelta(days=113), 5, id=5),
+ nomination(now - timedelta(days=186), 3, id=6),
+ nomination(now - timedelta(days=272), 2, id=7),
+ nomination(now - timedelta(days=30), 4, id=8),
+ nomination(now - timedelta(days=198), 2, id=9),
+ nomination(now - timedelta(days=270), 1, id=10),
+ nomination(now - timedelta(days=140), 1, id=11),
+ nomination(now - timedelta(days=19), 2, id=12),
+ nomination(now - timedelta(days=30), 1, id=13),
+ ]
+ ]
+
+ for case_num, case in enumerate(cases, 1):
+ with self.subTest(case_num=case_num):
+ for i in range(len(case)):
+ with self.subTest(nomination_num=i+1):
+ sub_case = dict(case[i:])
+ self.pool.cache = sub_case
+
+ res = await self.reviewer.get_user_for_review()
+ self.assertEqual(res, case[i][0])