|
4 | 4 | import csv |
5 | 5 | import gzip |
6 | 6 | import json |
| 7 | +from http.server import BaseHTTPRequestHandler, HTTPServer |
7 | 8 | from io import BytesIO, StringIO |
| 9 | +from threading import Thread |
8 | 10 | from unittest.mock import patch |
9 | 11 |
|
10 | 12 | import pytest |
@@ -202,6 +204,28 @@ def test_composite_raw_decoder_csv_parser_values(requests_mock, encoding: str, d |
202 | 204 | assert parsed_records == expected_data |
203 | 205 |
|
204 | 206 |
|
| 207 | +class TestServer(BaseHTTPRequestHandler): |
| 208 | + |
| 209 | + def do_GET(self) -> None: |
| 210 | + self.send_response(200) |
| 211 | + self.end_headers() |
| 212 | + self.wfile.write(bytes("col1,col2\nval1,val2", 'utf-8')) |
| 213 | + |
| 214 | + |
| 215 | +def test_composite_raw_decoder_csv_parser(): |
| 216 | + # start server |
| 217 | + httpd = HTTPServer(('localhost', 8080), TestServer) |
| 218 | + thread = Thread(target=httpd.serve_forever, args = ()) |
| 219 | + thread.start() |
| 220 | + |
| 221 | + response = requests.get("http://localhost:8080", stream=True) |
| 222 | + result = list(CompositeRawDecoder(parser=CsvParser()).decode(response)) |
| 223 | + |
| 224 | + assert len(result) == 1 |
| 225 | + httpd.shutdown() # release port |
| 226 | + thread.join() |
| 227 | + |
| 228 | + |
205 | 229 | def test_given_response_already_consumed_when_decode_then_no_data_is_returned(requests_mock): |
206 | 230 | requests_mock.register_uri( |
207 | 231 | "GET", "https://airbyte.io/", content=json.dumps({"test": "test"}).encode() |
|
0 commit comments