import pathlib
import json
import subprocess
import unittest


ROOT = pathlib.Path(__file__).parents[1]


class BeeTimeRangeContractTests(unittest.TestCase):
    def test_engine_validator_enforces_the_full_persisted_range_contract(self):
        validator = ROOT / "classes" / "BeeTimeRange.php"
        source = (
            f"require {json.dumps(str(validator))}; "
            "function check_range($start, $end) { try { BeeTimeRange::validateTimestamps($start, $end); return 'ok'; } catch (InvalidArgumentException $error) { return $error->getMessage(); } } "
            "echo json_encode([check_range(120, 60), check_range(61, 120), check_range(1672531200, 1767225600), check_range(1672531200, 1767225660)]);"
        )
        result = subprocess.run(["php", "-r", source], capture_output=True, text=True)
        self.assertEqual(0, result.returncode)
        self.assertEqual(
            [
                "The Start Time must be earlier than the End Time",
                "BEE timestamps must be aligned to whole UTC minutes",
                "ok",
                "BEE date range cannot exceed 3 years",
            ],
            json.loads(result.stdout),
        )


if __name__ == "__main__":
    unittest.main()
