Bootstrap material state across production runs

This commit is contained in:
2026-09-05 15:50:45 +02:00
parent ae13c3c35a
commit b89d57d1c1
4 changed files with 235 additions and 46 deletions
+61
View File
@@ -290,3 +290,64 @@ def test_malformed_later_page(timeseries, data, error) -> None:
with pytest.raises(ValueError, match=f"Invalid timeseries response on page 2:.*{error}"):
gateway.get_material_samples(**args)
assert client.post_json.call_count == 2
def test_production_runs_follow_pages_and_find_open_run() -> None:
client = Mock()
closed = dict(uuid="closed", machine="m", production_order="opaque-order",
start="2026-09-01T00:00:00Z", end="2026-09-01T01:00:00Z")
opened = {**closed, "uuid": "open", "end": None}
pages = [
Mock(body={"data": [closed], "metadata": {"next_cursor": "a"}}),
Mock(body={"data": [opened], "metadata": {"next_cursor": None}}),
]
client.get.side_effect = pages
gateway = EnlyzeApiGateway(client)
runs = gateway.get_production_runs("m")
assert [run.uuid for run in runs] == ["closed", "open"]
assert runs[0].end == datetime(2026, 9, 1, 1, tzinfo=UTC)
assert [call.args for call in client.get.call_args_list] == [
("/v2/production-runs", {"machine": "m"}),
("/v2/production-runs", {"machine": "m", "cursor": "a"}),
]
client.get.side_effect = pages
assert gateway.get_open_production_run("m") == runs[1]
@pytest.mark.parametrize("metadata", [
None, [], "bad", {}, {"next_cursor": ""}, {"next_cursor": 1},
{"next_cursor": False}, {"next_cursor": []}, {"next_cursor": {}},
])
def test_production_run_invalid_pagination(metadata) -> None:
client = Mock()
client.get.return_value.body = {"data": [], "metadata": metadata}
with pytest.raises(ValueError, match="Invalid production-run response.*next_cursor"):
EnlyzeApiGateway(client).get_production_runs("m")
@pytest.mark.parametrize("cursors", [["a", "a"], ["a", "b", "a"]])
def test_production_run_cyclic_pagination(cursors) -> None:
client = Mock()
client.get.side_effect = [
Mock(body={"data": [], "metadata": {"next_cursor": cursor}})
for cursor in cursors
]
with pytest.raises(ValueError, match="next_cursor has already been followed"):
EnlyzeApiGateway(client).get_production_runs("m")
assert client.get.call_count == len(cursors)
@pytest.mark.parametrize("body", [
None, [], {}, {"data": {}}, {"data": [None]},
{"data": [dict(uuid="r", machine="wrong", production_order="o",
start="2026-09-03T00:00:00Z", end=None)]},
{"data": [dict(uuid="r", machine="m", production_order="o",
start="2026-09-03T00:00:00Z", end="2026-09-02T00:00:00Z")]},
])
def test_production_run_malformed_later_page(body) -> None:
client = Mock()
client.get.side_effect = [
Mock(body={"data": [], "metadata": {"next_cursor": "a"}}), Mock(body=body),
]
with pytest.raises(ValueError, match="Invalid production-run response on page 2"):
EnlyzeApiGateway(client).get_production_runs("m")