feat(tests): retarget submit-red/submit-blue through review gates, add review decisions

This commit is contained in:
kitos
2026-07-06 10:56:41 +02:00
parent 22be620665
commit e3cd75bb56
+14 -5
View File
@@ -13,6 +13,7 @@ from unittest.mock import MagicMock, patch
from app.domain.exceptions import InvalidTransitionError from app.domain.exceptions import InvalidTransitionError
from app.models.enums import TestState from app.models.enums import TestState
from app.services.test_workflow_service import ( from app.services.test_workflow_service import (
approve_red_review,
can_transition, can_transition,
reopen_test, reopen_test,
start_execution, start_execution,
@@ -108,18 +109,20 @@ def test_draft_to_validated_fails(mock_log):
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@patch("app.services.test_workflow_service.select_reviewer")
@patch("app.services.test_workflow_service.log_action") @patch("app.services.test_workflow_service.log_action")
def test_red_executing_to_blue_evaluating(mock_log): def test_red_executing_to_blue_evaluating(mock_log, mock_select_reviewer):
test = _make_test(TestState.red_executing) test = _make_test(TestState.red_executing)
user = _make_user("red_tech") user = _make_user("red_tech")
db = _make_db() db = _make_db()
mock_select_reviewer.return_value = _make_user("red_lead")
result = submit_red_evidence(db, test, user) result = submit_red_evidence(db, test, user)
assert result.state == TestState.blue_evaluating assert result.state == TestState.red_review
db.flush.assert_called() db.flush.assert_called()
mock_log.assert_called() mock_log.assert_called()
print(" [PASS] Transition red_executing -> blue_evaluating works") print(" [PASS] Transition red_executing -> red_review works")
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -193,11 +196,13 @@ def test_reopen_clears_validation(mock_log):
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@patch("app.services.test_workflow_service.select_reviewer")
@patch("app.services.test_workflow_service.log_action") @patch("app.services.test_workflow_service.log_action")
def test_transitions_generate_audit_logs(mock_log): def test_transitions_generate_audit_logs(mock_log, mock_select_reviewer):
test = _make_test(TestState.draft) test = _make_test(TestState.draft)
user = _make_user("red_tech") user = _make_user("red_tech")
db = _make_db() db = _make_db()
mock_select_reviewer.return_value = _make_user("red_lead")
start_execution(db, test, user) start_execution(db, test, user)
assert mock_log.call_count >= 1 assert mock_log.call_count >= 1
@@ -207,8 +212,12 @@ def test_transitions_generate_audit_logs(mock_log):
assert mock_log.call_count > c1 assert mock_log.call_count > c1
c2 = mock_log.call_count c2 = mock_log.call_count
submit_blue_evidence(db, test, user) approve_red_review(db, test, _make_user("red_lead"))
assert mock_log.call_count > c2 assert mock_log.call_count > c2
c3 = mock_log.call_count
submit_blue_evidence(db, test, user)
assert mock_log.call_count > c3
print(" [PASS] Each transition generates an audit log") print(" [PASS] Each transition generates an audit log")