"""WordPress Bridge Core release catalog safety checks."""

from __future__ import annotations

import sys
import unittest
from pathlib import Path
from types import SimpleNamespace

PROJECT_ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(PROJECT_ROOT))
loaded_platform = sys.modules.get("platform")
if loaded_platform is not None and not hasattr(loaded_platform, "__path__"):
    del sys.modules["platform"]

from platform.gateway.platform_api import _bridge_release_payload


def release(**overrides):
    values = {
        "version": "0.3.1-dev",
        "channel": "development",
        "status": "test",
        "artifact_name": "wp-flask-bridge-0.3.1-dev.zip",
        "artifact_size": 100,
        "sha256": "a" * 64,
        "signature": "signature",
        "signature_algorithm": "Ed25519",
        "metadata_json": {
            "minimum_wordpress_version": "6.0",
            "minimum_php_version": "8.0",
            "schema_version": 1,
            "security_update": False,
            "release_notes": ["Signed self-update"],
        },
        "revoked_at": None,
        "revoked_reason": None,
    }
    values.update(overrides)
    return SimpleNamespace(**values)


class BridgeReleaseCatalogChecks(unittest.TestCase):
    def test_active_release_has_download_and_compatibility(self):
        payload = _bridge_release_payload(release())
        self.assertEqual("development", payload["channel"])
        self.assertEqual(1, payload["schema_version"])
        self.assertFalse(payload["revoked"])
        self.assertIn("/download", payload["download_path"])

    def test_revoked_release_cannot_be_downloaded(self):
        payload = _bridge_release_payload(release(
            status="revoked", revoked_reason="Security issue",
        ))
        self.assertTrue(payload["revoked"])
        self.assertEqual("Security issue", payload["revoked_reason"])
        self.assertIsNone(payload["download_path"])


if __name__ == "__main__":
    unittest.main(verbosity=2)
