Skip to content

Commit 3640863

Browse files
author
testgen-ci-bot
committed
Merge remote-tracking branch 'origin/enterprise' into feat/TG-1115-add-job-execution-relationship-to-run-models
2 parents db6b1c6 + 6c42249 commit 3640863

3 files changed

Lines changed: 57 additions & 3 deletions

File tree

testgen/common/models/test_result.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class RunDiff:
101101

102102
total_baseline: int
103103
total_target: int
104+
stable_passes: int = 0
104105
regressions: list[DiffRow] = field(default_factory=list)
105106
improvements: list[DiffRow] = field(default_factory=list)
106107
persistent_failures: list[DiffRow] = field(default_factory=list)
@@ -471,12 +472,16 @@ def _row(tid: UUID, baseline_info: dict | None, target_info: dict | None) -> Dif
471472

472473
for tid in baseline_results.keys() & target_results.keys():
473474
baseline_info, target_info = baseline_results[tid], target_results[tid]
475+
baseline_status, target_status = baseline_info["status"], target_info["status"]
476+
if baseline_status == TestResultStatus.Passed and target_status == TestResultStatus.Passed:
477+
diff.stable_passes += 1
478+
continue
474479
row = _row(tid, baseline_info, target_info)
475-
if baseline_info["status"] == TestResultStatus.Passed and target_info["status"] in failing:
480+
if baseline_status == TestResultStatus.Passed and target_status in failing:
476481
diff.regressions.append(row)
477-
elif baseline_info["status"] in failing and target_info["status"] == TestResultStatus.Passed:
482+
elif baseline_status in failing and target_status == TestResultStatus.Passed:
478483
diff.improvements.append(row)
479-
elif baseline_info["status"] in failing and target_info["status"] in failing:
484+
elif baseline_status in failing and target_status in failing:
480485
diff.persistent_failures.append(row)
481486

482487
for tid in target_results.keys() - baseline_results.keys():

testgen/mcp/tools/test_results.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,7 @@ def _require_completed(run: TestRun, label: str) -> None:
593593
doc.table(
594594
headers=["Category", "Count"],
595595
rows=[
596+
["Stable passes (Baseline passed → Target passed)", diff.stable_passes],
596597
["Regressions (Baseline passed → Target failed/warning)", len(diff.regressions)],
597598
["Improvements (Baseline failed/warning → Target passed)", len(diff.improvements)],
598599
["Persistent failures", len(diff.persistent_failures)],

tests/unit/mcp/test_tools_test_results.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,7 @@ def test_compare_test_runs_happy_path(
10051005
diff = MagicMock()
10061006
diff.total_baseline = 100
10071007
diff.total_target = 100
1008+
diff.stable_passes = 98
10081009
diff.regressions = [
10091010
_mock_diff_row(
10101011
TestResultStatus.Passed,
@@ -1025,6 +1026,8 @@ def test_compare_test_runs_happy_path(
10251026
out = compare_test_runs(str(uuid4()), str(uuid4()))
10261027

10271028
assert "Test Run Comparison" in out
1029+
assert "Stable passes (Baseline passed → Target passed)" in out
1030+
assert "| Stable passes (Baseline passed → Target passed) | 98 |" in out
10281031
assert "Regressions" in out
10291032
assert "Pattern Match" in out
10301033
assert "Passed → Failed" in out
@@ -1034,6 +1037,51 @@ def test_compare_test_runs_happy_path(
10341037
mock_result.diff_with_details.assert_called_once_with(baseline_run.id, target_run.id)
10351038

10361039

1040+
def _fetch_row(test_definition_id, status):
1041+
row = MagicMock()
1042+
row.test_definition_id = test_definition_id
1043+
row.test_type = "Pattern_Match"
1044+
row.test_name_short = "Pattern Match"
1045+
row.table_name = "orders"
1046+
row.column_names = "customer_id"
1047+
row.status = status
1048+
row.result_measure = "0"
1049+
row.threshold_value = "0"
1050+
return row
1051+
1052+
1053+
def test_diff_with_details_counts_stable_passes():
1054+
from testgen.common.models.test_result import TestResult
1055+
1056+
stable_1, stable_2, regressed, improved = uuid4(), uuid4(), uuid4(), uuid4()
1057+
baseline_rows = [
1058+
_fetch_row(stable_1, TestResultStatus.Passed),
1059+
_fetch_row(stable_2, TestResultStatus.Passed),
1060+
_fetch_row(regressed, TestResultStatus.Passed),
1061+
_fetch_row(improved, TestResultStatus.Failed),
1062+
]
1063+
target_rows = [
1064+
_fetch_row(stable_1, TestResultStatus.Passed),
1065+
_fetch_row(stable_2, TestResultStatus.Passed),
1066+
_fetch_row(regressed, TestResultStatus.Failed),
1067+
_fetch_row(improved, TestResultStatus.Passed),
1068+
]
1069+
session = MagicMock()
1070+
session.execute.side_effect = [baseline_rows, target_rows]
1071+
1072+
with patch("testgen.common.models.test_result.get_current_session", return_value=session):
1073+
diff = TestResult.diff_with_details(uuid4(), uuid4())
1074+
1075+
assert diff.stable_passes == 2
1076+
assert len(diff.regressions) == 1
1077+
assert len(diff.improvements) == 1
1078+
assert len(diff.persistent_failures) == 0
1079+
# Internal consistency: with no out-of-bucket statuses (Error/Log) in the fixture, the four
1080+
# named buckets account for every shared test definition.
1081+
shared = diff.total_target - len(diff.new_tests)
1082+
assert diff.stable_passes + len(diff.regressions) + len(diff.improvements) + len(diff.persistent_failures) == shared
1083+
1084+
10371085
@patch("testgen.mcp.tools.test_results.TestSuite")
10381086
@patch("testgen.mcp.tools.test_results.TestResult")
10391087
@patch("testgen.mcp.tools.test_results.TestRun")

0 commit comments

Comments
 (0)