"""CLI su un CSV sintetico: file prodotti, correzione dei domini a mano, formule del report, codici di uscita.""" import pytest from conftest import RADICE, scrivi_csv, segnale from fitseg import cli def csv_sintetico(tmp_path): t, serie = segnale() csv = tmp_path / "sint.csv" scrivi_csv(csv, t, serie) return csv def test_cli_domini_e_analizza(tmp_path, capsys): csv = csv_sintetico(tmp_path) base = ["--config", str(RADICE / "config.toml"), "--output", str(tmp_path / "out")] out = tmp_path / "out/sint" cli.main([*base, "domini", str(csv)]) assert (out / "01_domini/domini.toml").exists() and (out / "01_domini/domini.png").exists() assert not (out / "03_report").exists() or not any((out / "03_report").iterdir()) # `domini` non fa nessun fit cli.main([*base, "analizza", str(csv), "--domini", str(out / "01_domini/domini.toml")]) # domini corretti a mano for f in ("02_sovrapposizione/sovrapposizione_T_C.png", "02_sovrapposizione/dominio7_T_C.png", "03_report/report.md", "03_report/risultati.json"): assert (out / f).exists(), f report = (out / "03_report/report.md").read_text() assert "../01_domini/domini.png" in report and "../02_sovrapposizione/dominio7_T_C.png" in report assert "dominio 7 raffreddamento" in capsys.readouterr().out # grandezze matematiche in LaTeX, con i dollari bilanciati su ogni riga for riga in report.splitlines(): assert riga.count("$") % 2 == 0, riga for formula in (r"$y = c + A\,e^{-t'/\tau}$", r"$t' = t - t_0$", r"$\sigma_\text{rumore}", r"$R^2 = ", r"$\rho_1 = ", r"$\Delta = +", r"$\Delta\mathrm{AICc}", r"$$ y = "): assert formula in report, formula def test_cli_errori(tmp_path): base = ["--config", str(RADICE / "config.toml"), "--output", str(tmp_path)] with pytest.raises(SystemExit) as e: cli.main([*base, "domini", str(tmp_path / "non_esiste.csv")]) assert e.value.code == 4 with pytest.raises(SystemExit) as e: cli.main(["--config", "/non/esiste.toml", "domini", "x.csv"]) assert e.value.code == 3