All checks were successful
ENGIN CI / Build, test and smoke (push) Successful in 43s
116 lines
4.7 KiB
Python
116 lines
4.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"],
|
|
)
|
|
stylesheet = (ROOT / "assets" / "app.css").read_text(encoding="utf-8")
|
|
self.assertIn(
|
|
"grid-template-columns: repeat(2, minmax(0, 1fr))",
|
|
stylesheet,
|
|
)
|
|
self.assertFalse(any("C01" in button.label for button in app.button))
|
|
self.assertFalse(
|
|
any(selector.label == "Cylinder do analizy" for selector in app.selectbox)
|
|
)
|
|
rendered = "\n".join(markdown.value for markdown in app.markdown)
|
|
self.assertIn("Konsola diagnostyczna ENGIN", rendered)
|
|
self.assertNotIn("MODEL GOTOWY", rendered)
|
|
self.assertNotIn("ARTEFAKT ZWERYFIKOWANY", 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)
|
|
overview_table = next(
|
|
table for table in app.dataframe if "Priorytet" in table.value.columns
|
|
)
|
|
self.assertEqual(
|
|
list(overview_table.value.columns),
|
|
["Cylinder", "Diagnoza", "Nasilenie", "Priorytet"],
|
|
)
|
|
|
|
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 do analizy" 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 do analizy"
|
|
)
|
|
rendered = "\n".join(markdown.value for markdown in app.markdown)
|
|
self.assertIn(f"CYLINDER {int(detail_selector.value):02d}", rendered)
|
|
detail_selector.set_value(3).run()
|
|
detail_selector = next(
|
|
selector
|
|
for selector in app.selectbox
|
|
if selector.label == "Cylinder do analizy"
|
|
)
|
|
self.assertEqual(detail_selector.value, 3)
|
|
for slot, cylinder in enumerate((1, 2, 4), start=1):
|
|
comparison = next(
|
|
selector
|
|
for selector in app.selectbox
|
|
if selector.label == f"Porównanie {slot}"
|
|
)
|
|
comparison.set_value(cylinder).run()
|
|
self.assertEqual(len(app.exception), 0)
|
|
self.assertEqual(len(app.multiselect), 0)
|
|
rendered = "\n".join(markdown.value for markdown in app.markdown)
|
|
self.assertIn("CYLINDER 03", rendered)
|
|
self.assertIn("### Wybór cylindra", rendered)
|
|
self.assertNotIn("Select all", rendered)
|
|
self.assertNotIn("You can select up to", rendered)
|