Ejemplo n.º 1
0
 def test_compare_crew_and_power(self):
     author = mocks.MockMember(display_name='Bob')
     target = mocks.MockMember(display_name='Joe')
     bot = mocks.MockSSB(cache=mocks.cache())
     with self.subTest('Different crews'):
         author.roles = [mocks.hk_role]
         target.roles = [mocks.fsg_role]
         with self.assertRaises(ValueError) as ve:
             compare_crew_and_power(author, target, bot)
         self.assertEqual(
             str(ve.exception),
             f'{author.display_name} on {mocks.hk_role.name} '
             f'cannot unflair {target.display_name} on {mocks.fsg_role.name}'
         )
     with self.subTest('Admin'):
         author.roles = [mocks.admin]
         target.roles = [mocks.fsg_role]
         self.assertIsNone(compare_crew_and_power(author, target, bot))
     with self.subTest('Leader:Leader'):
         author.roles = [mocks.hk_role, mocks.leader]
         target.roles = [mocks.hk_role, mocks.leader]
         with self.assertRaises(ValueError) as ve:
             compare_crew_and_power(author, target, bot)
         self.assertEqual(
             str(ve.exception),
             f'A majority of leaders must approve unflairing leader{target.mention}.'
             f' Tag the Doc Keeper role in {bot.cache.channels.flairing_questions} for assistance.'
         )
     with self.subTest('Advisor:Advisor'):
         author.roles = [mocks.hk_role, mocks.advisor]
         target.roles = [mocks.hk_role, mocks.advisor]
         with self.assertRaises(ValueError) as ve:
             compare_crew_and_power(author, target, bot)
         self.assertEqual(
             str(ve.exception),
             f' cannot unflair {target.mention} as you are not powerful enough.'
         )
     with self.subTest('No power.'):
         author.roles = [mocks.hk_role]
         target.roles = [mocks.hk_role]
         with self.assertRaises(ValueError) as ve:
             compare_crew_and_power(author, target, bot)
         self.assertEqual(
             str(ve.exception),
             'You must be an advisor, leader or staff to unflair others.')
     with self.subTest('Leader:Advisor'):
         author.roles = [mocks.hk_role, mocks.leader]
         target.roles = [mocks.hk_role, mocks.advisor]
         self.assertIsNone(compare_crew_and_power(author, target, bot))
     with self.subTest('Leader:Nothing'):
         author.roles = [mocks.hk_role, mocks.leader]
         target.roles = [mocks.hk_role]
         self.assertIsNone(compare_crew_and_power(author, target, bot))
     with self.subTest('Advisor:Nothing'):
         author.roles = [mocks.hk_role, mocks.advisor]
         target.roles = [mocks.hk_role]
         self.assertIsNone(compare_crew_and_power(author, target, bot))
Ejemplo n.º 2
0
    def test_mock_guild_alternative_arguments(self):
        """Test if MockGuild initializes with the arguments provided."""
        core_developer = mocks.MockRole(name="Core Developer", position=2)
        guild = mocks.MockGuild(
            roles=[core_developer],
            members=[mocks.MockMember(id=54321)],
        )

        self.assertListEqual(guild.roles, [
            mocks.MockRole(name="@everyone", position=1, id=0), core_developer
        ])
        self.assertListEqual(guild.members, [mocks.MockMember(id=54321)])
Ejemplo n.º 3
0
    async def test_track_cycle(self):
        member = mocks.MockMember()
        scs = mocks.MockGuild(roles=mocks.tracks)
        with self.subTest('No track'):
            res = await track_cycle(member, scs)
            self.assertEqual(0, res)
            self.assertIn(mocks.track1, member.roles)

        with self.subTest('Track 1->2'):
            member.roles = [mocks.track1]
            res = await track_cycle(member, scs)
            self.assertEqual(1, res)
            self.assertIn(mocks.track2, member.roles)
            self.assertNotIn(mocks.track1, member.roles)

        with self.subTest('Track 2->3'):
            member.roles = [mocks.track2]
            res = await track_cycle(member, scs)
            self.assertEqual(2, res)
            self.assertIn(mocks.track3, member.roles)
            self.assertNotIn(mocks.track2, member.roles)

        with self.subTest('Track 3'):
            member.roles = [mocks.track3]
            res = await track_cycle(member, scs)
            self.assertEqual(3, res)

        with self.subTest('full'):
            member.roles = [mocks.true_locked]
            res = await track_cycle(member, scs)
            self.assertEqual(3, res)
Ejemplo n.º 4
0
    async def test_flair(self):
        bot = mocks.MockSSB(cache=mocks.cache())
        bob = mocks.MockMember(name='bob', id=1)
        with self.subTest('True Locked'):
            bob.roles = [mocks.MockRole(name=TRUE_LOCKED)]
            with self.assertRaises(ValueError) as ve:
                await flair(bob, mocks.HK, bot)
            self.assertEqual(
                str(ve.exception),
                f'{bob.display_name} cannot be flaired because they are {TRUE_LOCKED}.'
            )
        with self.subTest('Join CD'):
            bob.roles = [mocks.MockRole(name=JOIN_CD)]
            with self.assertRaises(ValueError) as ve:
                await flair(bob, mocks.HK, bot)
            self.assertEqual(
                str(ve.exception),
                f'{bob.display_name} cannot be flaired because they have {JOIN_CD}.'
            )
        with self.subTest('Free Agent non overflow.'):
            bob.roles = [bot.cache.roles.free_agent]
            await flair(bob, mocks.HK, bot)
            after = set(bob.roles)
            expected = {mocks.hk_role, bot.cache.roles.join_cd}
            self.assertEqual(expected, after)
        with self.subTest('Track 2 non overflow.'):
            bob.roles = [bot.cache.roles.track3]
            await flair(bob, mocks.HK, bot)
            after = set(bob.roles)
            expected = {
                mocks.hk_role, bot.cache.roles.join_cd,
                bot.cache.roles.true_locked
            }
            self.assertEqual(expected, after)
        with self.subTest('Overflow.'):
            overflow_bob = mocks.MockMember(name='bob', id=1)
            bob.roles = [bot.cache.roles.overflow]
            bot.cache.overflow_server.members = [overflow_bob]
            await flair(bob, mocks.Ballers, bot)
            after_main = set(bob.roles)
            expected_main = {bot.cache.roles.join_cd, bot.cache.roles.overflow}
            self.assertEqual(expected_main, after_main)
            after_overflow = set(overflow_bob.roles)

            self.assertIn(mocks.ballers_role, after_overflow)
Ejemplo n.º 5
0
    def test_mock_member_accepts_dynamic_arguments(self):
        """Test if MockMember accepts and sets abitrary keyword arguments."""
        member = mocks.MockMember(
            nick="Dino Man",
            colour=discord.Colour.default(),
        )

        self.assertEqual(member.nick, "Dino Man")
        self.assertEqual(member.colour, discord.Colour.default())
Ejemplo n.º 6
0
 def test_crew(self):
     member = mocks.MockMember(name='Steve', id=int('4' * 17))
     hk = mocks.HK
     role = mocks.MockRole(name=hk.name)
     bot = mocks.MockSSB(cache=mocks.cache())
     with self.subTest('Not on a crew.'):
         member.roles = []
         with self.assertRaises(Exception):
             crew(member, bot)
     with self.subTest('On a crew.'):
         member.roles = [role]
         self.assertEqual(hk.name, crew(member, bot))
     with self.subTest('On overflow crew.'):
         member.roles = [bot.cache.roles.overflow]
         of_member = mocks.MockMember(name='Steve',
                                      id=int('4' * 17),
                                      roles=[mocks.ballers_role])
         bot.cache.overflow_server.members.append(of_member)
         self.assertEqual(mocks.Ballers.name, crew(member, bot))
Ejemplo n.º 7
0
    def test_mock_member_default_initialization(self):
        """Test if the default initialization of Mockmember results in the correct object."""
        member = mocks.MockMember()

        # The `spec` argument makes sure `isistance` checks with `discord.Member` pass
        self.assertIsInstance(member, discord.Member)

        self.assertEqual(member.name, "member")
        self.assertListEqual(
            member.roles, [mocks.MockRole(name="@everyone", position=1, id=0)])
        self.assertEqual(member.mention, f"<@!{member.id}>")
Ejemplo n.º 8
0
    def test_mock_member_alternative_arguments(self):
        """Test if MockMember initializes with the arguments provided."""
        core_developer = mocks.MockRole(name="Core Developer", position=2)
        member = mocks.MockMember(name="Mark",
                                  id=12345,
                                  roles=[core_developer])

        self.assertEqual(member.name, "Mark")
        self.assertEqual(member.id, 12345)
        self.assertListEqual(member.roles, [
            mocks.MockRole(name="@everyone", position=1, id=0), core_developer
        ])
        self.assertEqual(member.mention, "<@!12345>")
Ejemplo n.º 9
0
 def test_power_level(self):
     member = mocks.MockMember()
     with self.subTest('No power'):
         self.assertEqual(0, power_level(member))
     with self.subTest('Advisor'):
         member.roles = [mocks.advisor]
         self.assertEqual(1, power_level(member))
     with self.subTest('Leader'):
         member.roles = [mocks.advisor, mocks.leader]
         self.assertEqual(2, power_level(member))
     with self.subTest('Admin'):
         member.roles = [mocks.advisor, mocks.leader, mocks.admin]
         self.assertEqual(3, power_level(member))
Ejemplo n.º 10
0
    def test_mocks_rejects_access_to_attributes_not_part_of_spec(self):
        """Accessing attributes that are invalid for the objects they mock should fail."""
        mock_tuple = (
            mocks.MockGuild(),
            mocks.MockRole(),
            mocks.MockMember(),
            mocks.MockBot(),
            mocks.MockContext(),
            mocks.MockTextChannel(),
            mocks.MockMessage(),
        )

        for mock in mock_tuple:
            with self.subTest(mock=mock):
                with self.assertRaises(AttributeError):
                    mock.the_cake_is_a_lie
Ejemplo n.º 11
0
 def test_check_roles(self):
     member = mocks.MockMember()
     with self.subTest('None equal'):
         member.roles = [mocks.role_instance]
         self.assertFalse(check_roles(member, [mocks.leader_instance.name]))
     with self.subTest('One equal'):
         member.roles = [
             mocks.leader_instance, mocks.overflow_role_instance
         ]
         self.assertTrue(check_roles(member, [mocks.leader_instance.name]))
     with self.subTest('Both equal'):
         member.roles = [
             mocks.overflow_role_instance, mocks.leader_instance
         ]
         self.assertTrue(
             check_roles(
                 member,
                 [mocks.leader_instance.name, mocks.role_instance.name]))
Ejemplo n.º 12
0
    def test_mocks_allows_access_to_attributes_part_of_spec(self):
        """Accessing attributes that are valid for the objects they mock should succeed."""
        mock_tuple = (
            (mocks.MockGuild(), 'name'),
            (mocks.MockRole(), 'hoist'),
            (mocks.MockMember(), 'display_name'),
            (mocks.MockBot(), 'user'),
            (mocks.MockContext(), 'invoked_with'),
            (mocks.MockTextChannel(), 'last_message'),
            (mocks.MockMessage(), 'mention_everyone'),
        )

        for mock, valid_attribute in mock_tuple:
            with self.subTest(mock=mock):
                try:
                    getattr(mock, valid_attribute)
                except AttributeError:
                    msg = f"accessing valid attribute `{valid_attribute}` raised an AttributeError"
                    self.fail(msg)