Пример #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))
Пример #2
0
    def test_ambiguous_lookup(self):

        bot = mocks.MockSSB(cache=mocks.cache())
        with self.subTest('Tag'):
            self.assertEqual(mocks.HK, ambiguous_lookup(mocks.HK.abbr, bot))
        with self.subTest('Mention'):
            self.assertEqual(mocks.bob,
                             ambiguous_lookup(mocks.bob.mention, bot))
        with self.subTest('Crew'):
            self.assertEqual(mocks.HK, ambiguous_lookup(mocks.HK.name, bot))
        with self.subTest('Member'):
            self.assertEqual(mocks.bob, ambiguous_lookup(mocks.bob.name, bot))
        with self.subTest('Member close'):
            self.assertEqual(mocks.bob,
                             ambiguous_lookup(f'{mocks.bob.name} suffix', bot))
Пример #3
0
 def test_member_lookup(self):
     bot = mocks.MockSSB(cache=mocks.cache())
     with self.subTest('Mention'):
         self.assertEqual(mocks.bob, member_lookup(mocks.bob.mention, bot))
     with self.subTest('Exact match'):
         self.assertEqual(mocks.bob, member_lookup(mocks.bob.name, bot))
     with self.subTest('Close'):
         self.assertEqual(mocks.bob, member_lookup('Bobbert', bot))
     with self.subTest('Not here'):
         name = 'Lalalalala'
         with self.assertRaises(ValueError) as ve:
             member_lookup(name, bot)
         self.assertEqual(
             str(ve.exception),
             f'{name} does not match any member in the server.')
Пример #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)
Пример #5
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))
Пример #6
0
    def test_crew_lookup(self):
        bot = mocks.MockSSB(cache=mocks.cache())
        with self.subTest('Tag'):
            self.assertEqual(mocks.HK, crew_lookup(mocks.HK.abbr, bot))

        with self.subTest('Actual name'):
            self.assertEqual(mocks.HK, crew_lookup(mocks.HK.name, bot))

        with self.subTest('Close name'):
            self.assertEqual(mocks.HK, crew_lookup(f'{mocks.HK.name} extr',
                                                   bot))

        with self.subTest('No similar'):
            not_close = 'Random name that isn\'nt close'
            with self.assertRaises(ValueError) as ve:
                crew_lookup(not_close, bot)
            self.assertEqual(
                str(ve.exception),
                f'{not_close} does not match any crew in the server.')
Пример #7
0
 def test_user_by_id(self):
     bot = mocks.MockSSB(cache=mocks.cache())
     with self.subTest('Too short'):
         with self.assertRaises(ValueError) as ve:
             name = 'too short'
             user_by_id(name, bot)
         self.assertEqual(str(ve.exception),
                          f'{name} is not a mention or an id. Try again.')
     with self.subTest('Non int'):
         with self.assertRaises(ValueError) as ve:
             name = 'Abcdefghijklmnopqrstuvwxyz'
             user_by_id(name, bot)
         self.assertEqual(str(ve.exception),
                          f'{name} is not a mention or an id. Try again.')
     with self.subTest('Not on server'):
         with self.assertRaises(ValueError) as ve:
             name = '1234567891011121314'
             user_by_id(name, bot)
         self.assertEqual(
             str(ve.exception), f'{name} doesn\'t seem to be on '
             f'this server or your input is malformed. Try @user.')