hackathon-ENGIN/tests/test_app_smoke.py
Jakub Famulski 2 dab5264ed7
All checks were successful
ENGIN CI / Build, test and smoke (push) Successful in 36s
ui: focus mechanic workflow and clarify health map
2026-08-25 15:22:35 +02:00

90 lines
3.7 KiB
Python

from __future__ import annotations
import unittest
from pathlib import Path
from streamlit.testing.v1 import AppTest
ROOT = Path(__file__).resolve().parents[1]
class StreamlitSmokeTests(unittest.TestCase):
def test_default_demo_renders_without_exception(self) -> None:
app = AppTest.from_file(str(ROOT / "app.py"), default_timeout=30).run()
self.assertEqual(len(app.exception), 0)
self.assertGreaterEqual(len(app.selectbox), 1)
self.assertEqual(app.radio[0].value, "Dane demonstracyjne")
self.assertEqual(app.segmented_control[0].value, "Przegląd")
self.assertEqual(
app.segmented_control[0].options,
["Przegląd", "Szczegóły cylindra"],
)
self.assertFalse(any("C01" in button.label for button in app.button))
self.assertFalse(
any(selector.label == "Cylinder główny" for selector in app.selectbox)
)
rendered = "\n".join(markdown.value for markdown in app.markdown)
self.assertIn("Konsola diagnostyczna ENGIN", rendered)
self.assertIn("ARTEFAKT ZWERYFIKOWANY", rendered)
self.assertIn("runtime-verified", rendered)
self.assertNotIn("CPU · DANE LOKALNE", rendered)
for english_fragment in (
"Diagnostic Console",
"LIVE INFERENCE",
"DEMO FALLBACK",
"LEAKAGE-SAFE",
"Grouped Macro F1",
"Severity accuracy",
):
self.assertNotIn(english_fragment, rendered)
self.assertEqual(
[metric.label for metric in app.metric],
[
"Makro F1 (grupowe)",
"Trafność nasilenia",
"Punkty walidacyjne",
"Testy",
],
)
technical_expander = next(
expander for expander in app.expander if expander.label == "Informacje techniczne"
)
self.assertFalse(technical_expander.proto.expanded)
diagnostic_table = next(
table
for table in app.dataframe
if "Źródło decyzji" in table.value.columns
)
diagnostic_columns = set(diagnostic_table.value.columns)
self.assertIn("Źródło decyzji", diagnostic_columns)
self.assertNotIn("decision_source", diagnostic_columns)
def test_upload_mode_has_safe_empty_state(self) -> None:
app = AppTest.from_file(str(ROOT / "app.py"), default_timeout=30).run()
app.radio[0].set_value("Wgraj plik CSV").run()
self.assertEqual(len(app.exception), 0)
self.assertGreaterEqual(len(app.info), 1)
def test_cylinder_selector_exists_only_in_detail_view(self) -> None:
app = AppTest.from_file(str(ROOT / "app.py"), default_timeout=30).run()
self.assertFalse(
any(selector.label == "Cylinder główny" for selector in app.selectbox)
)
app.segmented_control[0].set_value("Szczegóły cylindra").run()
self.assertEqual(app.segmented_control[0].value, "Szczegóły cylindra")
detail_selector = next(
selector for selector in app.selectbox if selector.label == "Cylinder główny"
)
detail_selector.set_value(3).run()
detail_selector = next(
selector for selector in app.selectbox if selector.label == "Cylinder główny"
)
self.assertEqual(detail_selector.value, 3)
comparison = app.multiselect[0]
self.assertEqual(comparison.label, "Porównaj z cylindrami")
comparison.set_value([1, 2, 4]).run()
self.assertEqual(len(app.exception), 0)
rendered = "\n".join(markdown.value for markdown in app.markdown)
self.assertIn("CYLINDER 03", rendered)