class TestMagic(unittest.TestCase): def setUp(self): class MockClient: def __init__(self): self.members = set(('0', )) async def get_members(self, channels): return self.members async def get_user_by_name(self, username): return User(username, username, None) async def get_user(self, id_): return User('0', 'LtWorf', None) self.mock_client = MockClient() settings = ClientSettings( False, True, Provider.SLACK, set(), Path('/tmp'), ) self.client = Client(None, self.mock_client, settings) def test_no_replace(self): ''' Check that no substitutions are done on regular strings and nickname in url ''' cases = [ 'ciao', 'http://LtWorf/', 'ciao https://link.com/LtWorf', 'ciao https://link.com/LtWorf?param', ] dest = Channel('0', '0', None, None) for i in cases: assert asyncio.run(self.client._addmagic(i, dest)) == i def test_escapes(self): dest = User('0', 'LtWorf', None) assert asyncio.run(self.client._addmagic('<', dest)) == '<' assert asyncio.run(self.client._addmagic('>ciao', dest)) == '>ciao' def test_annoyiances(self): dest = User('0', 'LtWorf', None) asyncio.run(self.client._addmagic('ciao @here', dest)) == 'ciao <!here>' asyncio.run(self.client._addmagic('ciao @channel', dest)) == 'ciao <!channel>' asyncio.run(self.client._addmagic('ciao @everyone </', dest)) == 'ciao <!everyone> </' def test_mentions(self): dest = Channel('0', '0', None, None) assert asyncio.run(self.client._addmagic('ciao LtWorf', dest)) == 'ciao <@LtWorf>' assert asyncio.run(self.client._addmagic('LtWorf: ciao', dest)) == '<@LtWorf>: ciao' assert asyncio.run(self.client._addmagic( 'LtWorf: ciao LtWorf', dest)) == '<@LtWorf>: ciao <@LtWorf>' assert asyncio.run(self.client._addmagic('_LtWorf', dest)) == '_LtWorf' assert asyncio.run( self.client._addmagic( 'LtWorf: http://link/user=LtWorf', dest)) == '<@LtWorf>: http://link/user=LtWorf'