from __future__ import annotations

import importlib.util
import unittest
from pathlib import Path


SCRIPT = Path(__file__).resolve().parents[1] / "scripts/validate_framework.py"
SPEC = importlib.util.spec_from_file_location("validate_framework", SCRIPT)
assert SPEC and SPEC.loader
validator = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(validator)


class ValidateFrameworkTest(unittest.TestCase):
    def test_repository_is_valid(self) -> None:
        self.assertEqual(0, validator.main())

    def test_schema_rejects_invalid_enum(self) -> None:
        result = validator.Validation()
        schema = {"type": "string", "enum": ["inspect", "apply"]}

        validator.validate_against_schema("delete", schema, schema, "mode", result)

        self.assertTrue(any("fora do enum" in error for error in result.errors))

    def test_schema_resolves_local_reference(self) -> None:
        result = validator.Validation()
        schema = {
            "$defs": {"names": {"type": "array", "items": {"type": "string"}}},
            "$ref": "#/$defs/names",
        }

        validator.validate_against_schema(["ok", 3], schema, schema, "names", result)

        self.assertTrue(any("tipo inválido" in error for error in result.errors))


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