51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
import json
|
|
from itertools import chain
|
|
from operator import methodcaller, itemgetter
|
|
from typing import Iterable
|
|
|
|
import pytest
|
|
import requests
|
|
from funcy import curry, rcompose, compose
|
|
|
|
from test.utils.server import bytes_to_string, string_to_bytes
|
|
|
|
|
|
def lift(fn):
|
|
return curry(map)(fn)
|
|
|
|
|
|
def send_partial_request(url, input_data: Iterable[bytes], metadata):
|
|
def pack(data: bytes):
|
|
package = {"data": bytes_to_string(data), "metadata": metadata}
|
|
package = json.dumps(package).encode()
|
|
return package
|
|
|
|
def post(data):
|
|
return requests.post(url, data=data)
|
|
|
|
pack_data_and_metadata_for_rest_transfer = lift(pack)
|
|
send_packages_to_analyzer_and_receive_responses = lift(post)
|
|
extract_data_from_responses = lift(compose(itemgetter("data"), methodcaller("json")))
|
|
flatten_buffered_payloads = chain.from_iterable
|
|
interpret_payloads = lift(string_to_bytes)
|
|
|
|
input_data_to_result_data = rcompose(
|
|
pack_data_and_metadata_for_rest_transfer,
|
|
send_packages_to_analyzer_and_receive_responses,
|
|
extract_data_from_responses,
|
|
flatten_buffered_payloads,
|
|
interpret_payloads,
|
|
)
|
|
|
|
return input_data_to_result_data((*input_data, b""))
|
|
|
|
|
|
@pytest.mark.parametrize("item_type", ["string"])
|
|
def test_sending_partial_request(url, data_items, metadata):
|
|
assert list(send_partial_request(f"{url}/process", data_items, metadata)) == [b"CONTENT"] * 7
|
|
|
|
|
|
@pytest.fixture
|
|
def metadata():
|
|
return {"idx": [1, 100, 101], "path": "asd/asd"}
|