async def test_reconnect_on_error(self):
        import aiohttp
        connector = ConnectorSlack({"api-token": "abc123"})
        connector.slacker.rtm.start = amock.CoroutineMock()
        connector.slacker.rtm.start.side_effect = aiohttp.ClientOSError()
        connector.reconnect = amock.CoroutineMock()

        await connector.connect()
        self.assertTrue(connector.reconnect.called)
    async def test_reconnect_on_error(self):
        import aiohttp
        connector = ConnectorSlack({"api-token": "abc123"}, opsdroid=OpsDroid())
        connector.slacker.rtm.start = amock.CoroutineMock()
        connector.slacker.rtm.start.side_effect = aiohttp.ClientOSError()
        connector.reconnect = amock.CoroutineMock()

        await connector.connect()
        self.assertTrue(connector.reconnect.called)
    async def test_ping_websocket(self):
        """Test pinging the websocket."""
        import websockets
        connector = ConnectorSlack({"api-token": "abc123"})
        with amock.patch('asyncio.sleep', new=amock.CoroutineMock()) \
                as mocked_sleep:
            connector.websocket = amock.CoroutineMock()
            connector.websocket.send = amock.CoroutineMock()
            await connector.ping_websocket()
            self.assertTrue(mocked_sleep.called)
            self.assertTrue(connector.websocket.send.called)

            connector.reconnect = amock.CoroutineMock()
            connector.websocket.send.side_effect = \
                websockets.exceptions.ConnectionClosed(500, "Mock Error")
            await connector.ping_websocket()
            self.assertTrue(connector.reconnect.called)
    async def test_ping_websocket(self):
        """Test pinging the websocket."""
        import websockets
        connector = ConnectorSlack({"api-token": "abc123"}, opsdroid=OpsDroid())
        with amock.patch('asyncio.sleep', new=amock.CoroutineMock()) \
                as mocked_sleep:
            connector.websocket = amock.CoroutineMock()
            connector.websocket.send = amock.CoroutineMock()
            await connector.ping_websocket()
            self.assertTrue(mocked_sleep.called)
            self.assertTrue(connector.websocket.send.called)

            connector.reconnect = amock.CoroutineMock()
            connector.websocket.send.side_effect = \
                websockets.exceptions.ConnectionClosed(500, "Mock Error")
            await connector.ping_websocket()
            self.assertTrue(connector.reconnect.called)
    async def test_receive_from_websocket(self):
        """Test receive_from_websocket receives and reconnects."""
        import websockets
        connector = ConnectorSlack({"api-token": "abc123"})

        connector.websocket = amock.CoroutineMock()
        connector.websocket.recv = amock.CoroutineMock()
        connector.websocket.recv.return_value = '[]'
        connector.process_message = amock.CoroutineMock()
        await connector.receive_from_websocket()
        self.assertTrue(connector.websocket.recv.called)
        self.assertTrue(connector.process_message.called)

        connector.websocket.recv.side_effect = \
            websockets.exceptions.ConnectionClosed(500, "Mock Error")
        connector.reconnect = amock.CoroutineMock()
        await connector.receive_from_websocket()
        self.assertTrue(connector.reconnect.called)
    async def test_receive_from_websocket(self):
        """Test receive_from_websocket receives and reconnects."""
        import websockets
        connector = ConnectorSlack({"api-token": "abc123"}, opsdroid=OpsDroid())

        connector.websocket = amock.CoroutineMock()
        connector.websocket.recv = amock.CoroutineMock()
        connector.websocket.recv.return_value = '[]'
        connector.process_message = amock.CoroutineMock()
        await connector.receive_from_websocket()
        self.assertTrue(connector.websocket.recv.called)
        self.assertTrue(connector.process_message.called)

        connector.websocket.recv.side_effect = \
            websockets.exceptions.ConnectionClosed(500, "Mock Error")
        connector.reconnect = amock.CoroutineMock()
        await connector.receive_from_websocket()
        self.assertTrue(connector.reconnect.called)