From f33415df6a8582e835e5b1d0f5f25c6631b56edc Mon Sep 17 00:00:00 2001 From: "Adriano (daitarn)" Date: Sat, 17 Oct 2026 14:13:15 +0200 Subject: [PATCH] Test frontend: niente piu' dipendenza dall'ordine sulla stazione (TieMeasureFlow#79) test_measure.py non ricarica piu' config/blueprints.measure (monkeypatch.setattr, annullato al teardown); TestTaskComplete e test_recipe_rules_ui.py fissano la stazione esplicitamente con una fixture autouse. Co-Authored-By: Claude Sonnet 5.5 --- src/frontend/flask_app/tests/test_measure.py | 34 +++++++++---------- .../flask_app/tests/test_recipe_rules_ui.py | 21 ++++++++---- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/frontend/flask_app/tests/test_measure.py b/src/frontend/flask_app/tests/test_measure.py index 69379a1..bb3a7e8 100644 --- a/src/frontend/flask_app/tests/test_measure.py +++ b/src/frontend/flask_app/tests/test_measure.py @@ -12,12 +12,9 @@ class TestSelectRecipe: def test_select_recipe_renders(self, logged_in_client, mock_api_client, monkeypatch): """Recipe selection page renders for MeasurementTec role.""" - monkeypatch.setenv("STATION_CODE", "ST-TEST") - import config - import importlib - importlib.reload(config) - import blueprints.measure - importlib.reload(blueprints.measure) + # Patch the class attribute instead of reload()ing config/blueprints.measure: + # monkeypatch undoes it at teardown, so no ST-TEST leaks into later tests (#79). + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", "ST-TEST") mock_api_client.get_station_recipes.return_value = [ {"id": 1, "code": "REC-001", "name": "Test Recipe"}, @@ -47,12 +44,9 @@ class TestSelectRecipe: import re from html.parser import HTMLParser - monkeypatch.setenv("STATION_CODE", "ST-TEST") - import config - import importlib - importlib.reload(config) - import blueprints.measure - importlib.reload(blueprints.measure) + # Patch the class attribute instead of reload()ing config/blueprints.measure: + # monkeypatch undoes it at teardown, so no ST-TEST leaks into later tests (#79). + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", "ST-TEST") mock_api_client.get_station_recipes.return_value = [] @@ -79,12 +73,9 @@ class TestSelectRecipe: self, logged_in_client, mock_api_client, monkeypatch ): """#10: a lot number like ``L'23`` must not break the page.""" - monkeypatch.setenv("STATION_CODE", "ST-TEST") - import config - import importlib - importlib.reload(config) - import blueprints.measure - importlib.reload(blueprints.measure) + # Patch the class attribute instead of reload()ing config/blueprints.measure: + # monkeypatch undoes it at teardown, so no ST-TEST leaks into later tests (#79). + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", "ST-TEST") mock_api_client.get_station_recipes.return_value = [] @@ -393,6 +384,13 @@ class TestStartSequence: class TestTaskComplete: """GET /measure/complete/ tests.""" + @pytest.fixture(autouse=True) + def _station(self, monkeypatch): + # The side_effect lists below include the /production-runs/current reply, + # which is only requested when a station is configured: pin it explicitly + # instead of relying on whatever an earlier test left behind (#79). + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", "ST-TEST") + def test_task_complete_renders(self, logged_in_client, mock_api_client): """The summary carries the measurement clock, so it has to render with it.""" mock_api_client.get.side_effect = [ diff --git a/src/frontend/flask_app/tests/test_recipe_rules_ui.py b/src/frontend/flask_app/tests/test_recipe_rules_ui.py index fad16af..eccdc05 100644 --- a/src/frontend/flask_app/tests/test_recipe_rules_ui.py +++ b/src/frontend/flask_app/tests/test_recipe_rules_ui.py @@ -6,6 +6,17 @@ a start button that will not start, a description that reads the way it was written. """ +import pytest + + +@pytest.fixture(autouse=True) +def _no_station(monkeypatch): + # These tests assume no station is configured (e.g. _task_list feeds the mock a + # fixed number of replies, with no /production-runs/current among them); pin it + # so a STATION_CODE left behind by an earlier test cannot change the call count (#79). + # Tests that need a station set it themselves, after this fixture has run. + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", None) + # --------------------------------------------------------------------------- # Point 11 - line breaks and bold, and nothing else @@ -197,13 +208,9 @@ def test_avvia_is_untouched_when_nothing_is_required( def test_selection_screen_carries_the_traceability_rules( logged_in_client, mock_api_client, monkeypatch, ): - monkeypatch.setenv("STATION_CODE", "ST-TEST") - import importlib - - import config - importlib.reload(config) - import blueprints.measure - importlib.reload(blueprints.measure) + # Patch instead of reload()ing config/blueprints.measure: the patch is undone at + # teardown, a reload would leave ST-TEST behind for later tests (#79). + monkeypatch.setattr("blueprints.measure.Config.STATION_CODE", "ST-TEST") mock_api_client.get_station_recipes.return_value = [ {