Add artifact.logging_module/tests/test_core.py
This commit is contained in:
parent
3f4ebb66d5
commit
4ff22c100f
1 changed files with 113 additions and 0 deletions
113
artifact.logging_module/tests/test_core.py
Normal file
113
artifact.logging_module/tests/test_core.py
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
import json
|
||||
import os
|
||||
import tempfile
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
|
||||
# Da das getestete Modul nicht spezifiziert wurde, greifen wir auf den Paketnamen zurck
|
||||
import src.artifact_logging_module.core as core
|
||||
|
||||
|
||||
def make_temp_log_file(entries=None):
|
||||
data = entries or []
|
||||
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".json")
|
||||
tmp.write(json.dumps(data).encode("utf-8"))
|
||||
tmp.flush()
|
||||
tmp.close()
|
||||
return tmp.name
|
||||
|
||||
|
||||
def teardown_temp_file(path):
|
||||
try:
|
||||
os.remove(path)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def test_logentry_initialization():
|
||||
entry = core.LogEntry(
|
||||
timestamp="2024-06-01T12:00:00Z",
|
||||
decision_type="PASS",
|
||||
reason_code="CODE_OK",
|
||||
additional_info="All checks passed"
|
||||
)
|
||||
assert entry.timestamp == "2024-06-01T12:00:00Z"
|
||||
assert entry.decision_type == "PASS"
|
||||
assert entry.reason_code == "CODE_OK"
|
||||
assert entry.additional_info == "All checks passed"
|
||||
|
||||
|
||||
def test_log_decision_creates_valid_json_file(monkeypatch):
|
||||
tmp_dir = tempfile.TemporaryDirectory()
|
||||
log_path = Path(tmp_dir.name) / "ci_decisions.json"
|
||||
|
||||
# ensure the function writes to expected location relative or default file
|
||||
monkeypatch.setattr(core, "LOG_FILE_PATH", log_path)
|
||||
|
||||
core.log_decision("PASS", "INIT_OK")
|
||||
assert log_path.exists()
|
||||
|
||||
with open(log_path, "r", encoding="utf-8") as f:
|
||||
data = json.load(f)
|
||||
assert isinstance(data, list)
|
||||
assert len(data) == 1
|
||||
entry = data[0]
|
||||
assert entry["decision_type"] == "PASS"
|
||||
assert entry["reason_code"] == "INIT_OK"
|
||||
|
||||
tmp_dir.cleanup()
|
||||
|
||||
|
||||
def test_log_decision_invalid_inputs(monkeypatch):
|
||||
tmp_dir = tempfile.TemporaryDirectory()
|
||||
log_path = Path(tmp_dir.name) / "ci_decisions.json"
|
||||
monkeypatch.setattr(core, "LOG_FILE_PATH", log_path)
|
||||
|
||||
with pytest.raises(AssertionError):
|
||||
core.log_decision(123, "CODE")
|
||||
with pytest.raises(AssertionError):
|
||||
core.log_decision("PASS", 789)
|
||||
|
||||
tmp_dir.cleanup()
|
||||
|
||||
|
||||
def test_generate_report_summarizes_entries(monkeypatch):
|
||||
entries = [
|
||||
{"timestamp": "t1", "decision_type": "PASS", "reason_code": "OK", "additional_info": "good"},
|
||||
{"timestamp": "t2", "decision_type": "WARN", "reason_code": "WARN_CODE", "additional_info": "minor"},
|
||||
{"timestamp": "t3", "decision_type": "UNKNOWN", "reason_code": "UNK", "additional_info": "unknown"}
|
||||
]
|
||||
|
||||
tmp_file = make_temp_log_file(entries)
|
||||
monkeypatch.setattr(core, "LOG_FILE_PATH", Path(tmp_file))
|
||||
|
||||
report = core.generate_report()
|
||||
assert isinstance(report, str)
|
||||
assert "PASS" in report
|
||||
assert "WARN" in report
|
||||
assert "UNKNOWN" in report
|
||||
|
||||
teardown_temp_file(tmp_file)
|
||||
|
||||
|
||||
def test_generate_report_empty(monkeypatch):
|
||||
tmp_file = make_temp_log_file([])
|
||||
monkeypatch.setattr(core, "LOG_FILE_PATH", Path(tmp_file))
|
||||
|
||||
report = core.generate_report()
|
||||
assert "No entries" in report or isinstance(report, str)
|
||||
teardown_temp_file(tmp_file)
|
||||
|
||||
|
||||
def test_generate_report_invalid_json(monkeypatch):
|
||||
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=".json")
|
||||
tmp.write(b"not a json")
|
||||
tmp.flush()
|
||||
tmp.close()
|
||||
|
||||
monkeypatch.setattr(core, "LOG_FILE_PATH", Path(tmp.name))
|
||||
|
||||
with pytest.raises(Exception):
|
||||
_ = core.generate_report()
|
||||
|
||||
teardown_temp_file(tmp.name)
|
||||
Loading…
Reference in a new issue