This repository has been archived on 2026-11-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
platform-ci/tests/test_reporting.py
forge-recoveryandClaude Sonnet 5.5 fd4689fd19
KofTwentyTwo/ci-policy: ci / fork-guard (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-nix-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / standards-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-matrix-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / verify (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / secrets (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / gate (pull_request) Waiting for needed jobs
KofTwentyTwo/ci-policy: ci / ci-result (pull_request) Waiting for needed jobs
KofTwentyTwo/ci-policy: native / fork-deny (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / native-result (pull_request) Canceled after 3s
feat(ci): reuse verified builds before merge verification
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 03:54:30 +00:00

62 lines
3.3 KiB
Python

"""Final report: missing required work fails, and delivery is never presented as done."""
import unittest
from platform_ci.reporting import render_report
from tests.support import event, example_configuration, plan_for
RESULTS = ("success", "failure", "skipped", "cancelled")
class ReportTest(unittest.TestCase):
"""The report compares expected work with actual results."""
def test_unrequested_verification_is_reported_honestly(self) -> None:
"""An unselected feature push expects both jobs to skip, says nothing passed, and fails if either ran anyway."""
plan = plan_for(example_configuration("maven.ci.yaml"), event("push", "refs/heads/feature-x"))
text, passed = render_report(plan, "skipped", "skipped")
self.assertTrue(passed)
self.assertIn("NOT REQUESTED by configuration", text)
self.assertIn("NOT VERIFIED", text)
self.assertNotIn("Result: passed", text)
for verify in RESULTS:
for secrets in RESULTS:
if (verify, secrets) != ("skipped", "skipped"):
with self.subTest(verify=verify, secrets=secrets):
self.assertFalse(render_report(plan, verify, secrets)[1])
def test_required_verification_and_secret_scan_must_both_succeed(self) -> None:
"""Only two successes pass; any other combination fails for every requested event."""
for context in (event(), event("push", "refs/heads/staging"), event("push", "refs/tags/v1.0.0")):
plan = plan_for(example_configuration("maven.ci.yaml"), context)
for verify in RESULTS:
for secrets in RESULTS:
with self.subTest(ref=context.ref, verify=verify, secrets=secrets):
self.assertEqual(render_report(plan, verify, secrets)[1], (verify, secrets) == ("success", "success"))
def test_missing_security_success_names_the_secret_scan(self) -> None:
"""A skipped or failed scan next to a passing build fails and says which result was missing."""
plan = plan_for(example_configuration("maven.ci.yaml"), event())
for secrets in ("skipped", "failure", "cancelled", ""):
text, passed = render_report(plan, "success", secrets)
self.assertFalse(passed)
self.assertIn("FAILED (secret scan did not succeed)", text)
self.assertIn(f"Secret scan result: {secrets}", text)
self.assertIn("FAILED (verification did not succeed)", render_report(plan, "failure", "success")[0])
def test_passing_report_states_both_results(self) -> None:
"""A requested, fully successful run says so and still claims no delivery."""
text, passed = render_report(plan_for(example_configuration("maven.ci.yaml"), event()), "success", "success")
self.assertTrue(passed)
self.assertIn("Secret scan result: success", text)
self.assertIn("Result: passed", text)
def test_delivery_is_reported_as_not_performed_by_the_workflow(self) -> None:
"""An eligible release push names its channel but claims no signing, publication or deployment."""
plan = plan_for(example_configuration("maven.ci.yaml"), event("push", "refs/heads/develop"))
text, passed = render_report(plan, "success", "success")
self.assertTrue(passed)
self.assertIn("Delivery: NOT PERFORMED BY THIS WORKFLOW. Channels eligible by configuration: snapshot.", text)
self.assertNotIn("Published", text)
self.assertNotIn("Deployed", text)