diff options
author | 2022-10-09 17:32:10 +0100 | |
---|---|---|
committer | 2022-10-09 17:32:10 +0100 | |
commit | 8e15ff4727a352591b0441dab1092af00d5b94da (patch) | |
tree | 56e8fd91944100c7335d7f3f5b48126173617b6a /tests | |
parent | Move 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.py | 58 |
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]) |