예제 #1
0
    def test_resolve_top_level_list_attribute(self):
        ws_message = WSMessage().with_attribute('colour', '${/0/colour}')

        response = [
            {'colour': 'red'},
            {'colour': 'green'},
            {'colour': 'blue'}
        ]

        expected_value = '{"colour": "red"}'

        ws_message = ws_message.resolve(response)

        self.assertEqual(expected_value, str(ws_message))
예제 #2
0
    def test_add_key_value_message(self):
        message = WSMessage().with_attribute('test', 123)

        ws_tester = (WSTest('wss://example.com').with_message(message))

        self.assertEqual(1, len(ws_tester.messages))
        self.assertEqual(message, ws_tester.messages[0])
예제 #3
0
    async def test_websocket_senfing_message_with_no_delay(
            self, mock_websockets, mock_sleep):
        ws_tester = (WSTest('ws://example.com').with_message(
            WSMessage().with_attribute('test', 123)))

        mock_socket = MagicMock()
        mock_socket.close = MagicMock(return_value=asyncio.Future())
        mock_socket.close.return_value.set_result(MagicMock())

        send_future = asyncio.Future()
        send_future.set_result({})
        mock_socket.send = MagicMock(return_value=send_future)

        mock_socket.recv = MagicMock(return_value=asyncio.Future())
        mock_socket.recv.return_value.set_result(MagicMock())

        mock_websockets.return_value = asyncio.Future()
        mock_websockets.return_value.set_result(mock_socket)

        await ws_tester.run()

        self.assertTrue(ws_tester.is_complete())
        mock_socket.send.assert_called_once_with('{"test": 123}')
        mock_sleep.assert_not_called()
        mock_socket.close.assert_called_once()
예제 #4
0
    async def test_websocket_test_receive_response_with_unresolved_trigger(
            self, mock_ssl, mock_websockets):
        ws_tester = (WSTest('wss://example.com').with_response(
            WSResponse().with_attribute('type').with_trigger(
                WSMessage().with_attribute('test', '${body}'))))

        mock_socket = MagicMock()
        mock_socket.close = MagicMock(return_value=asyncio.Future())
        mock_socket.close.return_value.set_result(MagicMock())

        send_future = asyncio.Future()
        send_future.set_result({})
        mock_socket.send = MagicMock(return_value=send_future)

        receive_future = asyncio.Future()
        receive_future.set_result(json.dumps({'type': 'Hello, world!'}))
        mock_socket.recv = MagicMock(
            side_effect=[receive_future, asyncio.Future()])

        mock_websockets.return_value = asyncio.Future()
        mock_websockets.return_value.set_result(mock_socket)

        ssl_context = MagicMock()
        mock_ssl.return_value = ssl_context

        await ws_tester.run()

        self.assertTrue(ws_tester.is_complete())
        mock_socket.send.assert_called_once_with('{"test": "${body}"}')
        mock_socket.close.assert_called_once()
예제 #5
0
    async def test_websocket_test_send_single_message(self, mock_ssl,
                                                      mock_websockets):
        message = WSMessage().with_attribute('test', 123)
        ws_tester = WSTest('wss://example.com').with_message(message)

        mock_socket = MagicMock()
        mock_socket.close = MagicMock(return_value=asyncio.Future())
        mock_socket.close.return_value.set_result(MagicMock())

        future = asyncio.Future()
        mock_socket.send = MagicMock(return_value=future)
        future.set_result({})

        mock_websockets.return_value = asyncio.Future()
        mock_websockets.return_value.set_result(mock_socket)

        ssl_context = MagicMock()
        mock_ssl.return_value = ssl_context

        await ws_tester.run()

        self.assertFalse(ws_tester.messages)
        self.assertEqual(1, len(ws_tester.sent_messages))
        mock_socket.send.assert_called_once_with('{"test": 123}')
        mock_socket.close.assert_called_once()
예제 #6
0
    def test_with_delay(self):
        ws_message = (
            WSMessage()
            .with_attribute('test', 123)
            .with_delay(0.1)
        )

        self.assertEqual(0.1, ws_message.delay)
예제 #7
0
    def test_resolve_attribute(self):
        ws_message = (
            WSMessage()
            .with_attribute('test', 123)
            .with_attribute('example', '${body/example}')
        )

        response = {
            'type': 'message',
            'body': {
                'example': 456
            }
        }

        expected_value = '{"test": 123, "example": 456}'

        ws_message = ws_message.resolve(response)

        self.assertEqual(expected_value, str(ws_message))
예제 #8
0
    async def test_websocket_message_timeout(self, mock_ssl, mock_websockets):
        ws_tester = (
            WSTest('wss://example.com').with_message_timeout(0.1).with_message(
                WSMessage().with_attribute('test', 123)))

        mock_socket = MagicMock()
        mock_socket.close = MagicMock(return_value=asyncio.Future())
        mock_socket.close.return_value.set_result(MagicMock())

        mock_socket.send = MagicMock(return_value=asyncio.Future())

        mock_websockets.return_value = asyncio.Future()
        mock_websockets.return_value.set_result(mock_socket)

        ssl_context = MagicMock()
        mock_ssl.return_value = ssl_context

        self.assertEqual(ws_tester.message_timeout, 0.1)
        with self.assertRaises(WSTimeoutError):
            await ws_tester.run()
        mock_socket.close.assert_called_once()
예제 #9
0
    def test_with_trigger(self):
        message = WSMessage().with_attribute('test', 123)
        ws_response = WSResponse().with_trigger(message)

        self.assertEqual(1, len(ws_response.triggers))
        self.assertEqual(message, ws_response.triggers[0])
예제 #10
0
    def test_create_ws_message(self):
        ws_message = WSMessage()

        self.assertDictEqual({}, ws_message.attributes)
예제 #11
0
    def test_stringify_with_attribute(self):
        ws_message = WSMessage().with_attribute('test', 123)

        expected_value = '{"test": 123}'
        self.assertEqual(expected_value, str(ws_message))
예제 #12
0
    def test_with_attribute(self):
        ws_message = WSMessage().with_attribute('test', 123)

        self.assertIn('test', ws_message.attributes)
        self.assertEqual(1, len(ws_message.attributes))