Add gate_v1_function/tests/test_core.py
This commit is contained in:
parent
469ef634ff
commit
f3709e6fcc
1 changed files with 77 additions and 0 deletions
77
gate_v1_function/tests/test_core.py
Normal file
77
gate_v1_function/tests/test_core.py
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
import json
|
||||
import pandas as pd
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from gate_v1_function import core
|
||||
|
||||
@pytest.fixture
|
||||
def tmp_json(tmp_path):
|
||||
def _create_json(data, filename):
|
||||
fpath = tmp_path / filename
|
||||
with open(fpath, 'w', encoding='utf-8') as f:
|
||||
json.dump(data, f)
|
||||
return fpath
|
||||
return _create_json
|
||||
|
||||
@pytest.fixture
|
||||
def tmp_csv(tmp_path):
|
||||
def _create_csv(rows, filename):
|
||||
df = pd.DataFrame(rows)
|
||||
fpath = tmp_path / filename
|
||||
df.to_csv(fpath, index=False)
|
||||
return fpath
|
||||
return _create_csv
|
||||
|
||||
def test_calculate_gate_decision_pass(tmp_json, tmp_csv):
|
||||
delta_summary = {"summary": {"PASS": 10, "FAIL": 0}}
|
||||
delta_cases = [
|
||||
{"stratum": "s1", "from_status": "PASS", "to_status": "PASS", "unknown_reason": ""}
|
||||
]
|
||||
summary_path = tmp_json(delta_summary, 'delta_summary.json')
|
||||
cases_path = tmp_csv(delta_cases, 'delta_cases.csv')
|
||||
|
||||
result = core.calculate_gate_decision(str(summary_path), str(cases_path), None)
|
||||
assert isinstance(result, dict)
|
||||
assert result['decision'] == 'PASS'
|
||||
assert isinstance(result['reasons'], list)
|
||||
|
||||
|
||||
def test_calculate_gate_decision_review_with_unknown(tmp_json, tmp_csv):
|
||||
delta_summary = {"summary": {"PASS": 8, "UNKNOWN": 2}}
|
||||
delta_cases = [
|
||||
{"stratum": "s1", "from_status": "PASS", "to_status": "UNKNOWN", "unknown_reason": "flaky network"},
|
||||
{"stratum": "s2", "from_status": "PASS", "to_status": "UNKNOWN", "unknown_reason": "timeout"}
|
||||
]
|
||||
whitelist = ["timeout"]
|
||||
summary_path = tmp_json(delta_summary, 'delta_summary.json')
|
||||
cases_path = tmp_csv(delta_cases, 'delta_cases.csv')
|
||||
whitelist_path = tmp_json(whitelist, 'unknown_whitelist.json')
|
||||
|
||||
result = core.calculate_gate_decision(str(summary_path), str(cases_path), str(whitelist_path))
|
||||
assert result['decision'] in ('REVIEW', 'PASS')
|
||||
assert isinstance(result['reasons'], list)
|
||||
if result['decision'] == 'REVIEW':
|
||||
assert any('flaky' in r or 'unknown' in r.lower() for r in result['reasons'])
|
||||
|
||||
|
||||
def test_calculate_gate_decision_block_on_fail(tmp_json, tmp_csv):
|
||||
delta_summary = {"summary": {"FAIL": 2}}
|
||||
delta_cases = [
|
||||
{"stratum": "s1", "from_status": "PASS", "to_status": "FAIL", "unknown_reason": "crash detected"},
|
||||
{"stratum": "s2", "from_status": "PASS", "to_status": "FAIL", "unknown_reason": "test regression"}
|
||||
]
|
||||
|
||||
summary_path = tmp_json(delta_summary, 'delta_summary.json')
|
||||
cases_path = tmp_csv(delta_cases, 'delta_cases.csv')
|
||||
|
||||
result = core.calculate_gate_decision(str(summary_path), str(cases_path), None)
|
||||
assert result['decision'] == 'BLOCK'
|
||||
assert any('FAIL' in r or 'block' in r.lower() for r in result['reasons'])
|
||||
|
||||
|
||||
def test_invalid_inputs(tmp_path):
|
||||
fake_path = tmp_path / 'nonexistent.json'
|
||||
csv_path = tmp_path / 'empty.csv'
|
||||
csv_path.write_text('stratum,from_status,to_status,unknown_reason\n')
|
||||
with pytest.raises((FileNotFoundError, ValueError, json.JSONDecodeError)):
|
||||
core.calculate_gate_decision(str(fake_path), str(csv_path), None)
|
||||
Loading…
Reference in a new issue