diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/bot/exts/events/__init__.py | 0 | ||||
| -rw-r--r-- | tests/bot/exts/events/test_code_jams.py (renamed from tests/bot/exts/utils/test_jams.py) | 66 | ||||
| -rw-r--r-- | tests/bot/exts/info/test_information.py | 9 | ||||
| -rw-r--r-- | tests/bot/exts/moderation/infraction/test_utils.py | 6 | ||||
| -rw-r--r-- | tests/bot/exts/moderation/test_modlog.py | 2 | ||||
| -rw-r--r-- | tests/bot/utils/test_time.py | 73 | 
6 files changed, 68 insertions, 88 deletions
| diff --git a/tests/bot/exts/events/__init__.py b/tests/bot/exts/events/__init__.py new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/bot/exts/events/__init__.py diff --git a/tests/bot/exts/utils/test_jams.py b/tests/bot/exts/events/test_code_jams.py index 368a15476..b9ee1e363 100644 --- a/tests/bot/exts/utils/test_jams.py +++ b/tests/bot/exts/events/test_code_jams.py @@ -1,14 +1,15 @@  import unittest -from unittest.mock import AsyncMock, MagicMock, create_autospec +from unittest.mock import AsyncMock, MagicMock, create_autospec, patch  from discord import CategoryChannel  from discord.ext.commands import BadArgument  from bot.constants import Roles -from bot.exts.utils import jams +from bot.exts.events import code_jams +from bot.exts.events.code_jams import _channels, _cog  from tests.helpers import (      MockAttachment, MockBot, MockCategoryChannel, MockContext, -    MockGuild, MockMember, MockRole, MockTextChannel +    MockGuild, MockMember, MockRole, MockTextChannel, autospec  )  TEST_CSV = b"""\ @@ -40,7 +41,7 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):          self.command_user = MockMember([self.admin_role])          self.guild = MockGuild([self.admin_role])          self.ctx = MockContext(bot=self.bot, author=self.command_user, guild=self.guild) -        self.cog = jams.CodeJams(self.bot) +        self.cog = _cog.CodeJams(self.bot)      async def test_message_without_attachments(self):          """If no link or attachments are provided, commands.BadArgument should be raised.""" @@ -49,7 +50,9 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):          with self.assertRaises(BadArgument):              await self.cog.create(self.cog, self.ctx, None) -    async def test_result_sending(self): +    @patch.object(_channels, "create_team_channel") +    @patch.object(_channels, "create_team_leader_channel") +    async def test_result_sending(self, create_leader_channel, create_team_channel):          """Should call `ctx.send` when everything goes right."""          self.ctx.message.attachments = [MockAttachment()]          self.ctx.message.attachments[0].read = AsyncMock() @@ -61,14 +64,12 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):          self.ctx.guild.create_role = AsyncMock()          self.ctx.guild.create_role.return_value = team_leaders -        self.cog.create_team_channel = AsyncMock() -        self.cog.create_team_leader_channel = AsyncMock()          self.cog.add_roles = AsyncMock()          await self.cog.create(self.cog, self.ctx, None) -        self.cog.create_team_channel.assert_awaited() -        self.cog.create_team_leader_channel.assert_awaited_once_with( +        create_team_channel.assert_awaited() +        create_leader_channel.assert_awaited_once_with(              self.ctx.guild, team_leaders          )          self.ctx.send.assert_awaited_once() @@ -81,25 +82,24 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):          self.ctx.send.assert_awaited_once() -    async def test_category_doesnt_exist(self): +    @patch.object(_channels, "_send_status_update") +    async def test_category_doesnt_exist(self, update):          """Should create a new code jam category."""          subtests = (              [], -            [get_mock_category(jams.MAX_CHANNELS, jams.CATEGORY_NAME)], -            [get_mock_category(jams.MAX_CHANNELS - 2, "other")], +            [get_mock_category(_channels.MAX_CHANNELS, _channels.CATEGORY_NAME)], +            [get_mock_category(_channels.MAX_CHANNELS - 2, "other")],          ) -        self.cog.send_status_update = AsyncMock() -          for categories in subtests: -            self.cog.send_status_update.reset_mock() +            update.reset_mock()              self.guild.reset_mock()              self.guild.categories = categories              with self.subTest(categories=categories): -                actual_category = await self.cog.get_category(self.guild) +                actual_category = await _channels._get_category(self.guild) -                self.cog.send_status_update.assert_called_once() +                update.assert_called_once()                  self.guild.create_category_channel.assert_awaited_once()                  category_overwrites = self.guild.create_category_channel.call_args[1]["overwrites"] @@ -109,45 +109,41 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):      async def test_category_channel_exist(self):          """Should not try to create category channel.""" -        expected_category = get_mock_category(jams.MAX_CHANNELS - 2, jams.CATEGORY_NAME) +        expected_category = get_mock_category(_channels.MAX_CHANNELS - 2, _channels.CATEGORY_NAME)          self.guild.categories = [ -            get_mock_category(jams.MAX_CHANNELS - 2, "other"), +            get_mock_category(_channels.MAX_CHANNELS - 2, "other"),              expected_category, -            get_mock_category(0, jams.CATEGORY_NAME), +            get_mock_category(0, _channels.CATEGORY_NAME),          ] -        actual_category = await self.cog.get_category(self.guild) +        actual_category = await _channels._get_category(self.guild)          self.assertEqual(expected_category, actual_category)      async def test_channel_overwrites(self):          """Should have correct permission overwrites for users and roles."""          leader = (MockMember(), True)          members = [leader] + [(MockMember(), False) for _ in range(4)] -        overwrites = self.cog.get_overwrites(members, self.guild) +        overwrites = _channels._get_overwrites(members, self.guild)          for member, _ in members:              self.assertTrue(overwrites[member].read_messages) -    async def test_team_channels_creation(self): +    @patch.object(_channels, "_get_overwrites") +    @patch.object(_channels, "_get_category") +    @autospec(_channels, "_add_team_leader_roles", pass_mocks=False) +    async def test_team_channels_creation(self, get_category, get_overwrites):          """Should create a text channel for a team."""          team_leaders = MockRole()          members = [(MockMember(), True)] + [(MockMember(), False) for _ in range(5)]          category = MockCategoryChannel()          category.create_text_channel = AsyncMock() -        self.cog.get_overwrites = MagicMock() -        self.cog.get_category = AsyncMock() -        self.cog.get_category.return_value = category -        self.cog.add_team_leader_roles = AsyncMock() - -        await self.cog.create_team_channel(self.guild, "my-team", members, team_leaders) -        self.cog.add_team_leader_roles.assert_awaited_once_with(members, team_leaders) -        self.cog.get_overwrites.assert_called_once_with(members, self.guild) -        self.cog.get_category.assert_awaited_once_with(self.guild) +        get_category.return_value = category +        await _channels.create_team_channel(self.guild, "my-team", members, team_leaders)          category.create_text_channel.assert_awaited_once_with(              "my-team", -            overwrites=self.cog.get_overwrites.return_value +            overwrites=get_overwrites.return_value          )      async def test_jam_roles_adding(self): @@ -156,7 +152,7 @@ class JamCodejamCreateTests(unittest.IsolatedAsyncioTestCase):          leader = MockMember()          members = [(leader, True)] + [(MockMember(), False) for _ in range(4)] -        await self.cog.add_team_leader_roles(members, leader_role) +        await _channels._add_team_leader_roles(members, leader_role)          leader.add_roles.assert_awaited_once_with(leader_role)          for member, is_leader in members: @@ -170,5 +166,5 @@ class CodeJamSetup(unittest.TestCase):      def test_setup(self):          """Should call `bot.add_cog`."""          bot = MockBot() -        jams.setup(bot) +        code_jams.setup(bot)          bot.add_cog.assert_called_once() diff --git a/tests/bot/exts/info/test_information.py b/tests/bot/exts/info/test_information.py index 770660fe3..0aa41d889 100644 --- a/tests/bot/exts/info/test_information.py +++ b/tests/bot/exts/info/test_information.py @@ -262,7 +262,6 @@ class UserInfractionHelperMethodTests(unittest.IsolatedAsyncioTestCase):          await self._method_subtests(self.cog.user_nomination_counts, test_values, header) [email protected]("bot.exts.info.information.time_since", new=unittest.mock.MagicMock(return_value="1 year ago"))  @unittest.mock.patch("bot.exts.info.information.constants.MODERATION_CHANNELS", new=[50])  class UserEmbedTests(unittest.IsolatedAsyncioTestCase):      """Tests for the creation of the `!user` embed.""" @@ -347,7 +346,7 @@ class UserEmbedTests(unittest.IsolatedAsyncioTestCase):          self.assertEqual(              textwrap.dedent(f""" -                Created: {"1 year ago"} +                Created: {"<t:1:R>"}                  Profile: {user.mention}                  ID: {user.id}              """).strip(), @@ -356,7 +355,7 @@ class UserEmbedTests(unittest.IsolatedAsyncioTestCase):          self.assertEqual(              textwrap.dedent(f""" -                Joined: {"1 year ago"} +                Joined: {"<t:1:R>"}                  Verified: {"True"}                  Roles: &Moderators              """).strip(), @@ -379,7 +378,7 @@ class UserEmbedTests(unittest.IsolatedAsyncioTestCase):          self.assertEqual(              textwrap.dedent(f""" -                Created: {"1 year ago"} +                Created: {"<t:1:R>"}                  Profile: {user.mention}                  ID: {user.id}              """).strip(), @@ -388,7 +387,7 @@ class UserEmbedTests(unittest.IsolatedAsyncioTestCase):          self.assertEqual(              textwrap.dedent(f""" -                Joined: {"1 year ago"} +                Joined: {"<t:1:R>"}                  Roles: &Moderators              """).strip(),              embed.fields[1].value diff --git a/tests/bot/exts/moderation/infraction/test_utils.py b/tests/bot/exts/moderation/infraction/test_utils.py index f3af7bea9..eb256f1fd 100644 --- a/tests/bot/exts/moderation/infraction/test_utils.py +++ b/tests/bot/exts/moderation/infraction/test_utils.py @@ -137,7 +137,7 @@ class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):                      title=utils.INFRACTION_TITLE,                      description=utils.INFRACTION_DESCRIPTION_TEMPLATE.format(                          type="Ban", -                        expires="2020-02-26 09:20 (23 hours and 59 minutes) UTC", +                        expires="2020-02-26 09:20 (23 hours and 59 minutes)",                          reason="No reason provided."                      ),                      colour=Colours.soft_red, @@ -193,7 +193,7 @@ class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):                      title=utils.INFRACTION_TITLE,                      description=utils.INFRACTION_DESCRIPTION_TEMPLATE.format(                          type="Mute", -                        expires="2020-02-26 09:20 (23 hours and 59 minutes) UTC", +                        expires="2020-02-26 09:20 (23 hours and 59 minutes)",                          reason="Test"                      ),                      colour=Colours.soft_red, @@ -213,7 +213,7 @@ class ModerationUtilsTests(unittest.IsolatedAsyncioTestCase):                          type="Mute",                          expires="N/A",                          reason="foo bar" * 4000 -                    )[:2045] + "...", +                    )[:4093] + "...",                      colour=Colours.soft_red,                      url=utils.RULES_URL                  ).set_author( diff --git a/tests/bot/exts/moderation/test_modlog.py b/tests/bot/exts/moderation/test_modlog.py index f8f142484..79e04837d 100644 --- a/tests/bot/exts/moderation/test_modlog.py +++ b/tests/bot/exts/moderation/test_modlog.py @@ -25,5 +25,5 @@ class ModLogTests(unittest.IsolatedAsyncioTestCase):          )          embed = self.channel.send.call_args[1]["embed"]          self.assertEqual( -            embed.description, ("foo bar" * 3000)[:2045] + "..." +            embed.description, ("foo bar" * 3000)[:4093] + "..."          ) diff --git a/tests/bot/utils/test_time.py b/tests/bot/utils/test_time.py index 115ddfb0d..8edffd1c9 100644 --- a/tests/bot/utils/test_time.py +++ b/tests/bot/utils/test_time.py @@ -52,7 +52,7 @@ class TimeTests(unittest.TestCase):      def test_format_infraction(self):          """Testing format_infraction.""" -        self.assertEqual(time.format_infraction('2019-12-12T00:01:00Z'), '2019-12-12 00:01') +        self.assertEqual(time.format_infraction('2019-12-12T00:01:00Z'), '<t:1576108860:f>')      def test_format_infraction_with_duration_none_expiry(self):          """format_infraction_with_duration should work for None expiry.""" @@ -72,10 +72,10 @@ class TimeTests(unittest.TestCase):      def test_format_infraction_with_duration_custom_units(self):          """format_infraction_with_duration should work for custom max_units."""          test_cases = ( -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 5, 5), 6, -             '2019-12-12 00:01 (11 hours, 55 minutes and 55 seconds)'), -            ('2019-11-23T20:09:00Z', datetime(2019, 4, 25, 20, 15), 20, -             '2019-11-23 20:09 (6 months, 28 days, 23 hours and 54 minutes)') +            ('3000-12-12T00:01:00Z', datetime(3000, 12, 11, 12, 5, 5), 6, +             '<t:32533488060:f> (11 hours, 55 minutes and 55 seconds)'), +            ('3000-11-23T20:09:00Z', datetime(3000, 4, 25, 20, 15), 20, +             '<t:32531918940:f> (6 months, 28 days, 23 hours and 54 minutes)')          )          for expiry, date_from, max_units, expected in test_cases: @@ -85,16 +85,16 @@ class TimeTests(unittest.TestCase):      def test_format_infraction_with_duration_normal_usage(self):          """format_infraction_with_duration should work for normal usage, across various durations."""          test_cases = ( -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 2, '2019-12-12 00:01 (12 hours and 55 seconds)'), -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 1, '2019-12-12 00:01 (12 hours)'), -            ('2019-12-12T00:00:00Z', datetime(2019, 12, 11, 23, 59), 2, '2019-12-12 00:00 (1 minute)'), -            ('2019-11-23T20:09:00Z', datetime(2019, 11, 15, 20, 15), 2, '2019-11-23 20:09 (7 days and 23 hours)'), -            ('2019-11-23T20:09:00Z', datetime(2019, 4, 25, 20, 15), 2, '2019-11-23 20:09 (6 months and 28 days)'), -            ('2019-11-23T20:58:00Z', datetime(2019, 11, 23, 20, 53), 2, '2019-11-23 20:58 (5 minutes)'), -            ('2019-11-24T00:00:00Z', datetime(2019, 11, 23, 23, 59, 0), 2, '2019-11-24 00:00 (1 minute)'), -            ('2019-11-23T23:59:00Z', datetime(2017, 7, 21, 23, 0), 2, '2019-11-23 23:59 (2 years and 4 months)'), +            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 2, '<t:1576108860:f> (12 hours and 55 seconds)'), +            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 1, '<t:1576108860:f> (12 hours)'), +            ('2019-12-12T00:00:00Z', datetime(2019, 12, 11, 23, 59), 2, '<t:1576108800:f> (1 minute)'), +            ('2019-11-23T20:09:00Z', datetime(2019, 11, 15, 20, 15), 2, '<t:1574539740:f> (7 days and 23 hours)'), +            ('2019-11-23T20:09:00Z', datetime(2019, 4, 25, 20, 15), 2, '<t:1574539740:f> (6 months and 28 days)'), +            ('2019-11-23T20:58:00Z', datetime(2019, 11, 23, 20, 53), 2, '<t:1574542680:f> (5 minutes)'), +            ('2019-11-24T00:00:00Z', datetime(2019, 11, 23, 23, 59, 0), 2, '<t:1574553600:f> (1 minute)'), +            ('2019-11-23T23:59:00Z', datetime(2017, 7, 21, 23, 0), 2, '<t:1574553540:f> (2 years and 4 months)'),              ('2019-11-23T23:59:00Z', datetime(2019, 11, 23, 23, 49, 5), 2, -             '2019-11-23 23:59 (9 minutes and 55 seconds)'), +             '<t:1574553540:f> (9 minutes and 55 seconds)'),              (None, datetime(2019, 11, 23, 23, 49, 5), 2, None),          ) @@ -104,45 +104,30 @@ class TimeTests(unittest.TestCase):      def test_until_expiration_with_duration_none_expiry(self):          """until_expiration should work for None expiry.""" -        test_cases = ( -            (None, None, None, None), - -            # To make sure that now and max_units are not touched -            (None, 'Why hello there!', None, None), -            (None, None, float('inf'), None), -            (None, 'Why hello there!', float('inf'), None), -        ) - -        for expiry, now, max_units, expected in test_cases: -            with self.subTest(expiry=expiry, now=now, max_units=max_units, expected=expected): -                self.assertEqual(time.until_expiration(expiry, now, max_units), expected) +        self.assertEqual(time.until_expiration(None), None)      def test_until_expiration_with_duration_custom_units(self):          """until_expiration should work for custom max_units."""          test_cases = ( -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 5, 5), 6, '11 hours, 55 minutes and 55 seconds'), -            ('2019-11-23T20:09:00Z', datetime(2019, 4, 25, 20, 15), 20, '6 months, 28 days, 23 hours and 54 minutes') +            ('3000-12-12T00:01:00Z', '<t:32533488060:R>'), +            ('3000-11-23T20:09:00Z', '<t:32531918940:R>')          ) -        for expiry, now, max_units, expected in test_cases: -            with self.subTest(expiry=expiry, now=now, max_units=max_units, expected=expected): -                self.assertEqual(time.until_expiration(expiry, now, max_units), expected) +        for expiry, expected in test_cases: +            with self.subTest(expiry=expiry, expected=expected): +                self.assertEqual(time.until_expiration(expiry,), expected)      def test_until_expiration_normal_usage(self):          """until_expiration should work for normal usage, across various durations."""          test_cases = ( -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 2, '12 hours and 55 seconds'), -            ('2019-12-12T00:01:00Z', datetime(2019, 12, 11, 12, 0, 5), 1, '12 hours'), -            ('2019-12-12T00:00:00Z', datetime(2019, 12, 11, 23, 59), 2, '1 minute'), -            ('2019-11-23T20:09:00Z', datetime(2019, 11, 15, 20, 15), 2, '7 days and 23 hours'), -            ('2019-11-23T20:09:00Z', datetime(2019, 4, 25, 20, 15), 2, '6 months and 28 days'), -            ('2019-11-23T20:58:00Z', datetime(2019, 11, 23, 20, 53), 2, '5 minutes'), -            ('2019-11-24T00:00:00Z', datetime(2019, 11, 23, 23, 59, 0), 2, '1 minute'), -            ('2019-11-23T23:59:00Z', datetime(2017, 7, 21, 23, 0), 2, '2 years and 4 months'), -            ('2019-11-23T23:59:00Z', datetime(2019, 11, 23, 23, 49, 5), 2, '9 minutes and 55 seconds'), -            (None, datetime(2019, 11, 23, 23, 49, 5), 2, None), +            ('3000-12-12T00:01:00Z', '<t:32533488060:R>'), +            ('3000-12-12T00:01:00Z', '<t:32533488060:R>'), +            ('3000-12-12T00:00:00Z', '<t:32533488000:R>'), +            ('3000-11-23T20:09:00Z', '<t:32531918940:R>'), +            ('3000-11-23T20:09:00Z', '<t:32531918940:R>'), +            (None, None),          ) -        for expiry, now, max_units, expected in test_cases: -            with self.subTest(expiry=expiry, now=now, max_units=max_units, expected=expected): -                self.assertEqual(time.until_expiration(expiry, now, max_units), expected) +        for expiry, expected in test_cases: +            with self.subTest(expiry=expiry, expected=expected): +                self.assertEqual(time.until_expiration(expiry), expected) | 
