Merge lavoro/daitarn-trafilo-duplica
This commit is contained in:
@@ -71,6 +71,61 @@ class TestRecipeNew:
|
||||
assert resp.status_code == 200
|
||||
|
||||
|
||||
def test_recipe_new_default_interval_present(self, logged_in_client, mock_api_client):
|
||||
"""#49: default_measurement_interval_minutes pre-fills the loop duration."""
|
||||
mock_api_client.get.return_value = {"default_measurement_interval_minutes": "45"}
|
||||
html = logged_in_client.get("/maker/recipes/new").get_data(as_text=True)
|
||||
assert "measurementIntervalMinutes: 45," in html
|
||||
|
||||
def test_recipe_new_default_interval_absent(self, logged_in_client, mock_api_client):
|
||||
"""#49: key missing, empty or invalid -> unchanged behaviour (null)."""
|
||||
for payload in ({}, {"default_measurement_interval_minutes": ""},
|
||||
{"default_measurement_interval_minutes": "abc"},
|
||||
{"default_measurement_interval_minutes": "5000"}):
|
||||
mock_api_client.get.return_value = payload
|
||||
html = logged_in_client.get("/maker/recipes/new").get_data(as_text=True)
|
||||
assert 'measurementIntervalMinutes: "null",' in html
|
||||
|
||||
def test_recipe_edit_ignores_default_interval(self, logged_in_client, mock_api_client):
|
||||
"""#49: an existing recipe never receives the default."""
|
||||
def fake_get(path, *a, **k):
|
||||
if path == "/api/recipes/7":
|
||||
return {"id": 7, "code": "R", "name": "R"}
|
||||
if path.endswith("/versions"):
|
||||
return []
|
||||
return {"default_measurement_interval_minutes": "45"}
|
||||
mock_api_client.get.side_effect = fake_get
|
||||
html = logged_in_client.get("/maker/recipes/7/edit").get_data(as_text=True)
|
||||
assert 'measurementIntervalMinutes: "null",' in html
|
||||
|
||||
|
||||
class TestRecipeDuplicateProxy:
|
||||
"""POST /maker/api/recipes/<id>/duplicate (#52)."""
|
||||
|
||||
def test_duplicate_proxy_ok(self, logged_in_client, mock_api_client):
|
||||
mock_api_client.post.return_value = {"id": 9, "code": "A-COPIA"}
|
||||
resp = logged_in_client.post(
|
||||
"/maker/api/recipes/3/duplicate", json={"code": "A-COPIA", "name": "A (copia)"}
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
assert resp.get_json()["id"] == 9
|
||||
mock_api_client.post.assert_called_with(
|
||||
"/api/recipes/3/duplicate", data={"code": "A-COPIA", "name": "A (copia)"}
|
||||
)
|
||||
|
||||
def test_duplicate_proxy_conflict(self, logged_in_client, mock_api_client):
|
||||
mock_api_client.post.return_value = {"error": True, "status_code": 409, "detail": "exists"}
|
||||
resp = logged_in_client.post(
|
||||
"/maker/api/recipes/3/duplicate", json={"code": "A", "name": "A"}
|
||||
)
|
||||
assert resp.status_code == 409
|
||||
|
||||
def test_recipe_list_has_duplicate_button(self, logged_in_client, mock_api_client):
|
||||
mock_api_client.get.return_value = {"items": [], "total": 0, "pages": 1}
|
||||
html = logged_in_client.get("/maker/recipes").get_data(as_text=True)
|
||||
assert "openDupModal" in html
|
||||
|
||||
|
||||
class TestRoleRequired:
|
||||
"""Maker role enforcement tests."""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user