|
4 | 4 |
|
5 | 5 | import json
|
6 | 6 | import logging
|
| 7 | +from copy import deepcopy |
7 | 8 |
|
8 | 9 | import pytest
|
9 | 10 |
|
|
104 | 105 |
|
105 | 106 |
|
106 | 107 | @pytest.mark.parametrize(
|
107 |
| - "response_code, available_expectation, expected_messages", |
| 108 | + "response_code, available_expectation, use_check_availability, expected_messages", |
108 | 109 | [
|
109 | 110 | pytest.param(
|
110 | 111 | 404,
|
111 | 112 | False,
|
| 113 | + True, |
112 | 114 | ["Not found. The requested resource was not found on the server."],
|
113 | 115 | id="test_stream_unavailable_unhandled_error",
|
114 | 116 | ),
|
115 | 117 | pytest.param(
|
116 | 118 | 403,
|
117 | 119 | False,
|
| 120 | + True, |
118 | 121 | ["Forbidden. You don't have permission to access this resource."],
|
119 | 122 | id="test_stream_unavailable_handled_error",
|
120 | 123 | ),
|
121 |
| - pytest.param(200, True, [], id="test_stream_available"), |
| 124 | + pytest.param(200, True, True, [], id="test_stream_available"), |
| 125 | + pytest.param(200, True, False, [], id="test_stream_available"), |
122 | 126 | pytest.param(
|
123 | 127 | 401,
|
124 | 128 | False,
|
| 129 | + True, |
125 | 130 | ["Unauthorized. Please ensure you are authenticated correctly."],
|
126 | 131 | id="test_stream_unauthorized_error",
|
127 | 132 | ),
|
128 | 133 | ],
|
129 | 134 | )
|
130 |
| -def test_check_dynamic_stream(response_code, available_expectation, expected_messages): |
| 135 | +def test_check_dynamic_stream( |
| 136 | + response_code, available_expectation, use_check_availability, expected_messages |
| 137 | +): |
| 138 | + manifest = deepcopy(_MANIFEST) |
| 139 | + |
131 | 140 | with HttpMocker() as http_mocker:
|
132 |
| - http_mocker.get( |
133 |
| - HttpRequest(url="https://api.test.com/items"), |
134 |
| - HttpResponse( |
135 |
| - body=json.dumps( |
136 |
| - [ |
137 |
| - {"id": 1, "name": "item_1"}, |
138 |
| - {"id": 2, "name": "item_2"}, |
139 |
| - ] |
140 |
| - ) |
141 |
| - ), |
142 |
| - ) |
143 |
| - http_mocker.get( |
144 |
| - HttpRequest(url="https://api.test.com/items/1"), |
145 |
| - HttpResponse(body=json.dumps(expected_messages), status_code=response_code), |
| 141 | + items_request = HttpRequest(url="https://api.test.com/items") |
| 142 | + items_response = HttpResponse( |
| 143 | + body=json.dumps([{"id": 1, "name": "item_1"}, {"id": 2, "name": "item_2"}]) |
146 | 144 | )
|
| 145 | + http_mocker.get(items_request, items_response) |
| 146 | + |
| 147 | + item_request = HttpRequest(url="https://api.test.com/items/1") |
| 148 | + item_response = HttpResponse(body=json.dumps(expected_messages), status_code=response_code) |
| 149 | + item_request_count = 1 |
| 150 | + http_mocker.get(item_request, item_response) |
| 151 | + |
| 152 | + if not use_check_availability: |
| 153 | + manifest["check"]["use_check_availability"] = False |
| 154 | + item_request_count = 0 # stream only created and data request not called |
147 | 155 |
|
148 | 156 | source = ConcurrentDeclarativeSource(
|
149 |
| - source_config=_MANIFEST, |
| 157 | + source_config=manifest, |
150 | 158 | config=_CONFIG,
|
151 | 159 | catalog=None,
|
152 | 160 | state=None,
|
153 | 161 | )
|
154 | 162 |
|
155 | 163 | stream_is_available, reason = source.check_connection(logger, _CONFIG)
|
156 | 164 |
|
| 165 | + http_mocker.assert_number_of_calls(item_request, item_request_count) |
| 166 | + |
157 | 167 | assert stream_is_available == available_expectation
|
158 | 168 | for message in expected_messages:
|
159 | 169 | assert message in reason
|
0 commit comments