# #region Test.CleanRelease.ManifestBuilder [C:3] [TYPE Module] [SEMANTICS test,clean-release,manifest,builder]
# @BRIEF Tests for manifest_builder.py — build_distribution_manifest and build_manifest legacy wrapper.
# @RELATION BINDS_TO -> [ManifestBuilder]

from pathlib import Path
import sys

sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src"))

import pytest


# #region TestBuildDistributionManifest [C:2] [TYPE Module]
class TestBuildDistributionManifest:
    def test_builds_manifest(self):
        from src.services.clean_release.manifest_builder import build_distribution_manifest
        artifacts = [
            {"path": "bin/app", "category": "app", "classification": "allowed", "reason": "test", "checksum": "abc"},
            {"path": "lib/vuln.dll", "category": "malware", "classification": "excluded-prohibited", "reason": "blocked", "checksum": "def"},
        ]
        manifest = build_distribution_manifest(
            manifest_id="man-1",
            candidate_id="cand-1",
            policy_id="policy-1",
            generated_by="tester",
            artifacts=artifacts,
        )
        assert manifest.manifest_id == "man-1"
        assert manifest.candidate_id == "cand-1"
        assert len(manifest.content_json.get("items", [])) == 2
        assert manifest.summary.included_count == 1
        assert manifest.summary.excluded_count == 1
        assert manifest.summary.prohibited_detected_count == 1
        assert manifest.deterministic_hash is not None

    def test_builds_manifest_without_checksum(self):
        from src.services.clean_release.manifest_builder import build_distribution_manifest
        artifacts = [
            {"path": "bin/app", "category": "app", "classification": "required-system", "reason": "system"},
        ]
        manifest = build_distribution_manifest(
            manifest_id="man-2",
            candidate_id="cand-2",
            policy_id="policy-2",
            generated_by="tester",
            artifacts=artifacts,
        )
        items = manifest.content_json.get("items", [])
        assert len(items) == 1
        assert items[0].get("checksum") is None
        assert manifest.summary.included_count == 1
        assert manifest.summary.excluded_count == 0


# #endregion TestBuildDistributionManifest


# #region TestBuildManifestLegacy [C:2] [TYPE Module]
class TestBuildManifestLegacy:
    def test_build_manifest_legacy_delegates(self):
        """build_manifest legacy wrapper (line 129) delegates to build_distribution_manifest."""
        from src.services.clean_release.manifest_builder import build_distribution_manifest, build_manifest
        artifacts = [
            {"path": "bin/app", "category": "app", "classification": "allowed", "reason": "test", "checksum": "abc"},
        ]
        m1 = build_distribution_manifest(
            manifest_id="man-3", candidate_id="cand-3",
            policy_id="policy-3", generated_by="tester",
            artifacts=artifacts,
        )
        m2 = build_manifest(
            manifest_id="man-3", candidate_id="cand-3",
            policy_id="policy-3", generated_by="tester",
            artifacts=artifacts,
        )
        assert m1.manifest_id == m2.manifest_id
        assert m1.deterministic_hash == m2.deterministic_hash


# #endregion TestBuildManifestLegacy

# #endregion Test.CleanRelease.ManifestBuilder
