Exemple #1
0
    def test_logout_error_handler(self):
        mock_response = create_mock_json('tests/resources/logout_success.json')
        assert self.logout._error_handler(mock_response.json()) is None

        mock_response = create_mock_json('tests/resources/logout_fail.json')
        with self.assertRaises(LogoutError):
            self.logout._error_handler(mock_response.json())
Exemple #2
0
    def test_on_data(self, mock_error_handler, mock_on_change_message,
                     mock_on_status, mock_on_connection):
        self.stream_listener.stream_unique_id = 2

        mock_response = create_mock_json(
            'tests/resources/streaming_connection.json')
        self.stream_listener.on_data(mock_response.content)
        mock_error_handler.assert_called_with(mock_response.json(),
                                              mock_response.json().get('id'))
        mock_on_connection.assert_called_with(mock_response.json(),
                                              mock_response.json().get('id'))

        mock_response = create_mock_json(
            'tests/resources/streaming_status.json')
        self.stream_listener.on_data(mock_response.content)
        mock_error_handler.assert_called_with(mock_response.json(),
                                              mock_response.json().get('id'))
        mock_on_status.assert_called_with(mock_response.json(),
                                          mock_response.json().get('id'))

        mock_response = create_mock_json(
            'tests/resources/streaming_mcm_update.json')
        self.stream_listener.on_data(mock_response.content)
        mock_error_handler.assert_called_with(mock_response.json(),
                                              mock_response.json().get('id'))
        mock_on_change_message.assert_called_with(
            mock_response.json(),
            mock_response.json().get('id'))

        on_data = self.stream_listener.on_data('some content')
        assert on_data is None

        mock_error_handler.return_value = True
        on_data = self.stream_listener.on_data(mock_response.content)
        assert on_data is False
Exemple #3
0
    def test_base_endpoint_error_handler(self):
        mock_response = create_mock_json('tests/resources/base_endpoint_success.json')
        assert self.base_endpoint._error_handler(mock_response.json()) is None

        mock_response = create_mock_json('tests/resources/base_endpoint_fail.json')
        with self.assertRaises(APIError):
            self.base_endpoint._error_handler(mock_response.json())
Exemple #4
0
    def test_login_error_handler(self):
        mock_response = create_mock_json("tests/resources/login_success.json")
        assert self.login._error_handler(mock_response.json()) is None

        mock_response = create_mock_json("tests/resources/login_fail.json")
        with self.assertRaises(LoginError):
            self.login._error_handler(mock_response.json())
Exemple #5
0
    def test_on_change_message(self):
        stream = mock.Mock()
        self.stream_listener.stream = stream

        mock_response = create_mock_json(
            "tests/resources/streaming_mcm_SUB_IMAGE.json")
        self.stream_listener._on_change_message(mock_response.json(), 1)
        stream.on_subscribe.assert_called_with(mock_response.json())

        mock_response = create_mock_json(
            "tests/resources/streaming_mcm_RESUB_DELTA.json")
        self.stream_listener._on_change_message(mock_response.json(), 1)
        stream.on_resubscribe.assert_called_with(mock_response.json())

        mock_response = create_mock_json(
            "tests/resources/streaming_mcm_HEARTBEAT.json")
        self.stream_listener._on_change_message(mock_response.json(), 1)
        stream.on_heartbeat.assert_called_with(mock_response.json())

        mock_response = create_mock_json(
            "tests/resources/streaming_mcm_update.json")
        self.stream_listener._on_change_message(mock_response.json(), 1)
        stream.on_update.assert_called_with(mock_response.json())

        mock_response = create_mock_json(
            "tests/resources/streaming_ocm_SUB_IMAGE.json")
        self.stream_listener._on_change_message(mock_response.json(), 1)
        stream.on_subscribe.assert_called_with(mock_response.json())
Exemple #6
0
    def test_keep_alive_error_handler(self):
        mock_response = create_mock_json(
            'tests/resources/keep_alive_success.json')
        assert self.keep_alive._error_handler(mock_response.json()) is None

        mock_response = create_mock_json(
            'tests/resources/keep_alive_fail.json')
        with self.assertRaises(KeepAliveError):
            self.keep_alive._error_handler(mock_response.json())
Exemple #7
0
    def test_call(self, mock_response):
        mock_json = create_mock_json('tests/resources/login_success.json')
        mock_response.return_value = (mock_json.json(), 1.3)
        response = self.login()

        assert isinstance(response, LoginResource)
        assert self.login.client.session_token == mock_json.json().get('sessionToken')
Exemple #8
0
    def test_error_handler(self):
        mock_response = create_mock_json(
            'tests/resources/streaming_connection.json')
        self.stream_listener._error_handler(mock_response.json(), 1)

        error_data = {
            'errorMessage': 'AppKey is not valid',
            'connectionClosed': True,
            'connectionId': '005-015616813698-533678',
            'op': 'status',
            'id': 2,
            'errorCode': 'INVALID_APP_KEY',
            'statusCode': 'FAILURE'
        }
        return_value = self.stream_listener._error_handler(error_data, 1)
        assert return_value is True

        error_data = {
            'errorMessage':
            'Customer tried to subscribe to more markets than allowed to',
            'connectionClosed': False,
            'connectionId': '005-015616813698-533678',
            'op': 'status',
            'id': 2,
            'errorCode': 'SUBSCRIPTION_LIMIT_EXCEEDED',
            'statusCode': 'FAILURE'
        }
        return_value = self.stream_listener._error_handler(error_data, 1)
        assert return_value is None
Exemple #9
0
 def test_process(self, mock_on_process, mock_cache):
     sub_image = create_mock_json(
         "tests/resources/streaming_mcm_SUB_IMAGE.json")
     data = sub_image.json()["mc"]
     self.assertTrue(self.stream._process(data, 123))
     self.assertEqual(len(self.stream), len(data))
     mock_on_process.assert_called_with([mock_cache()])
Exemple #10
0
 def setUp(self):
     self.mock_response = create_mock_json(
         "tests/resources/streaming_market_definition.json"
     )
     market_definition = self.mock_response.json()
     runner = market_definition["runners"][0]
     self.market_definition_runner = MarketDefinitionRunner(**runner)
Exemple #11
0
 def test_process_empty_image(self, mock_on_process, mock_cache):
     self.stream._caches = {"1.161613698": mock.Mock()}
     sub_image = create_mock_json("tests/resources/streaming_ocm_EMPTY_IMAGE.json")
     data = sub_image.json()["oc"]
     self.assertTrue(self.stream._process(data, 123))
     self.assertEqual(len(self.stream), len(data))
     self.assertTrue(self.stream._process(data, 123))
Exemple #12
0
    def test_call(self, mock_response):
        mock = create_mock_json('tests/resources/logout_success.json')
        mock_response.return_value = (mock.json(), 1.3)
        response = self.logout()

        assert isinstance(response, LogoutResource)
        assert self.logout.client.session_token is None
Exemple #13
0
    def test_call(self, mock_response):
        mock = create_mock_json('tests/resources/keep_alive_success.json')
        mock_response.return_value = (mock.json(), 1.3)
        response = self.keep_alive()

        assert isinstance(response, KeepAliveResource)
        assert self.keep_alive.client.session_token == mock.json().get('token')
Exemple #14
0
    def test_error_handler(self):
        mock_response = create_mock_json(
            "tests/resources/streaming_connection.json")
        self.stream_listener._error_handler(mock_response.json(), 1)

        error_data = {
            "errorMessage": "AppKey is not valid",
            "connectionClosed": True,
            "connectionId": "005-015616813698-533678",
            "op": "status",
            "id": 2,
            "errorCode": "INVALID_APP_KEY",
            "statusCode": "FAILURE",
        }
        return_value = self.stream_listener._error_handler(error_data, 1)
        assert return_value is True

        error_data = {
            "errorMessage":
            "Customer tried to subscribe to more markets than allowed to",
            "connectionClosed": False,
            "connectionId": "005-015616813698-533678",
            "op": "status",
            "id": 2,
            "errorCode": "SUBSCRIPTION_LIMIT_EXCEEDED",
            "statusCode": "FAILURE",
        }
        return_value = self.stream_listener._error_handler(error_data, 1)
        assert return_value is None
    def test_cancel_orders(self):
        mock_response = create_mock_json('tests/resources/cancel_orders.json')
        cancel_orders = mock_response.json().get('result')
        resource = resources.CancelOrders(elapsed_time=self.ELAPSED_TIME,
                                          **cancel_orders)
        assert resource.elapsed_time == self.ELAPSED_TIME
        assert resource.market_id == cancel_orders['marketId']
        assert resource.status == cancel_orders['status']
        assert resource.customer_ref == cancel_orders.get('customerRef')
        assert resource.error_code == cancel_orders.get('errorCode')
        assert len(resource.cancel_instruction_reports) == len(
            cancel_orders.get('instructionReports'))

        for order in cancel_orders.get('instructionReports'):
            assert resource.cancel_instruction_reports[
                0].size_cancelled == order['sizeCancelled']
            assert resource.cancel_instruction_reports[0].status == order[
                'status']
            assert resource.cancel_instruction_reports[
                0].cancelled_date == datetime.datetime.strptime(
                    order['cancelledDate'], "%Y-%m-%dT%H:%M:%S.%fZ")

            assert resource.cancel_instruction_reports[
                0].instruction.bet_id == order['instruction']['betId']
            assert resource.cancel_instruction_reports[
                0].instruction.size_reduction == order['instruction'].get(
                    'sizeReduction')
Exemple #16
0
    def test_cancel_orders(self):
        mock_response = create_mock_json("tests/resources/cancel_orders.json")
        cancel_orders = mock_response.json().get("result")
        resource = resources.CancelOrders(elapsed_time=self.ELAPSED_TIME,
                                          **cancel_orders)
        assert resource.elapsed_time == self.ELAPSED_TIME
        assert resource.market_id == cancel_orders["marketId"]
        assert resource.status == cancel_orders["status"]
        assert resource.customer_ref == cancel_orders.get("customerRef")
        assert resource.error_code == cancel_orders.get("errorCode")
        assert len(resource.cancel_instruction_reports) == len(
            cancel_orders.get("instructionReports"))

        for order in cancel_orders.get("instructionReports"):
            assert (resource.cancel_instruction_reports[0].size_cancelled ==
                    order["sizeCancelled"])
            assert resource.cancel_instruction_reports[0].status == order[
                "status"]
            assert resource.cancel_instruction_reports[
                0].cancelled_date == datetime.datetime.strptime(
                    order["cancelledDate"], BETFAIR_DATE_FORMAT)

            assert (resource.cancel_instruction_reports[0].instruction.bet_id
                    == order["instruction"]["betId"])
            assert resource.cancel_instruction_reports[
                0].instruction.size_reduction == order["instruction"].get(
                    "sizeReduction")
Exemple #17
0
    def test_process(self, mock_on_process, mock_cache):
        sub_image = create_mock_json(
            "tests/resources/streaming_ocm_FULL_IMAGE.json")
        data = sub_image.json()["oc"]
        self.stream._process(data, 123)

        self.assertEqual(len(self.stream), len(data))
    def test_market_catalogue_no_ero_data(self):
        mock_response = create_mock_json(
            'tests/resources/list_market_catalogue_no_ero.json')
        market_catalogues = mock_response.json().get('result')

        for market_catalogue in market_catalogues:
            resources.MarketCatalogue(elapsed_time=self.ELAPSED_TIME,
                                      **market_catalogue)
Exemple #19
0
    def test_request(self, mock_get, mock_request_headers, mock_cert):
        mock_response = create_mock_json('tests/resources/login_success.json')
        mock_get.return_value = mock_response

        url = 'https://api.betfair.com/exchange/betting/rest/v1/en/navigation/menu.json'
        self.navigation.request()

        mock_get.assert_called_once_with(url, headers=mock_request_headers, timeout=(3.05, 16))
Exemple #20
0
 def test_process_no_market_definition(self, mock_on_process, mock_cache):
     sub_image_error = create_mock_json(
         "tests/resources/streaming_mcm_SUB_IMAGE_no_market_def.json")
     data = sub_image_error.json()["mc"]
     self.assertTrue(self.stream._process(data, 123))
     self.assertEqual(len(data), 137)
     self.assertEqual(len(self.stream),
                      135)  # two markets missing marketDef
Exemple #21
0
 def test_update_cache_closed(self):
     mock_response = create_mock_json(
         "tests/resources/streaming_ocm_SUB_IMAGE.json")
     for order_book in mock_response.json().get("oc"):
         self.order_book_cache.update_cache(order_book, 1234)
         self.assertEqual(self.order_book_cache.streaming_update,
                          order_book)
     self.assertTrue(self.order_book_cache.closed)
Exemple #22
0
    def test_call(self, mock_response):
        mock_json = create_mock_json(
            "tests/resources/login_interactive_success.json")
        mock_response.return_value = (mock.Mock(), mock_json.json(), 1.3)
        response = self.login()

        assert isinstance(response, LoginResource)
        assert self.login.client.session_token == mock_json.json().get("token")
Exemple #23
0
    def test_update_cache_new(self, mock_order_book_runner):
        self.runner.selection_id = 108956
        mock_response = create_mock_json('tests/resources/streaming_ocm_UPDATE.json')
        for order_book in mock_response.json().get('oc'):
            self.order_book_cache.update_cache(order_book, 1234)

            for order_changes in order_book.get('orc'):
                mock_order_book_runner.assert_called_with(**order_changes)
Exemple #24
0
    def test_request(self, mock_post, mock_logout_headers):
        mock_response = create_mock_json('tests/resources/logout_success.json')
        mock_post.return_value = mock_response

        url = 'https://identitysso.betfair.com/api/logout'
        response = self.logout.request()

        mock_post.assert_called_once_with(url, headers=mock_logout_headers)
        assert response[0] == mock_response.json()
Exemple #25
0
 def test_process_no_img(self, mock_on_process, mock_cache):
     sub_image = create_mock_json("tests/resources/streaming_mcm_SUB_IMAGE.json")
     data = sub_image.json()["mc"]
     data[0]["img"] = False
     mock_market_cache = mock_cache()
     self.stream._caches = {data[0]["id"]: mock_market_cache}
     self.assertFalse(self.stream._process(data, 123))
     self.assertEqual(len(self.stream), len(data))
     mock_market_cache.update_cache.assert_called_with(data[0], 123)
Exemple #26
0
    def test_update_cache_new(self, mock_order_book_runner):
        self.order_book_cache.runners = {(108956, 0): self.runner}
        mock_response = create_mock_json("tests/resources/streaming_ocm_UPDATE.json")
        for order_book in mock_response.json().get("oc"):
            self.order_book_cache.update_cache(order_book, 1234)
            self.assertEqual(self.order_book_cache.streaming_update, order_book)

            for order_changes in order_book.get("orc"):
                mock_order_book_runner.assert_called_with(**order_changes)
Exemple #27
0
    def test_update_cache_tv(self, mock_strip_datetime):
        publish_time = mock.Mock()
        market_change = create_mock_json('tests/resources/streaming_mcm_UPDATE_tv.json')
        book_data = market_change.json().get('mc')

        for book in book_data:
            self.market_book_cache.update_cache(book, publish_time)
            mock_strip_datetime.assert_called_with(publish_time)
            assert self.market_book_cache.total_matched == book.get('tv')
Exemple #28
0
    def test_update_cache(self):
        mock_response = create_mock_json('tests/resources/streaming_ocm_UPDATE.json')
        for order_book in mock_response.json().get('oc'):
            self.order_book_cache.update_cache(order_book, 1234)

            for order_changes in order_book.get('orc'):
                # self.runner.matched_lays.update.assert_called_with(order_changes.get('ml', []))
                # self.runner.matched_backs.update.assert_called_with(order_book.get('mb', []))
                self.runner.update_unmatched.assert_called_with(order_changes.get('uo', []))
    def test_request(self, mock_post, mock_keep_alive_headers):
        mock_response = create_mock_json("tests/resources/logout_success.json")
        mock_post.return_value = mock_response

        url = "https://identitysso.betfair.com/api/keepAlive"
        response = self.keep_alive.request()

        mock_post.assert_called_once_with(url, headers=mock_keep_alive_headers)
        assert response[1] == mock_response.json()
Exemple #30
0
    def test_list_available_events(self, mock_response):
        mock = create_mock_json("tests/resources/availableevents.json")
        mock_response.return_value = (mock.Mock(), mock.json(), 1.3)

        response = self.scores.list_available_events()
        assert mock.json.call_count == 1
        mock_response.assert_called_with(
            "ScoresAPING/v1.0/listAvailableEvents", {}, None)
        assert all(
            isinstance(event, resources.AvailableEvent) for event in response)