"""Local rule tests only; no database, Runtime, model or network access."""

import unittest

from revenue import ORDER_VALUE_CENTS, closed_month_net_revenue


class ClosedRevenueTests(unittest.TestCase):
    def test_returns_closed_net_revenue_not_order_value(self):
        result = closed_month_net_revenue("2026-02")
        self.assertEqual(result["amount_cents"], 9_200_000)
        self.assertNotEqual(result["amount_cents"], ORDER_VALUE_CENTS["2026-02"])
        self.assertEqual(result["source"], "synthetic-month-close/2026-02")
        self.assertEqual(result["status"], "closed")
        self.assertEqual(result["cutoff"], "2026-03-03T18:00:00Z")
        self.assertIn("refunds", result["definition"])

    def test_open_month_is_rejected(self):
        with self.assertRaisesRegex(ValueError, "month is not closed"):
            closed_month_net_revenue("2026-03")

    def test_missing_month_is_not_zero(self):
        with self.assertRaisesRegex(ValueError, "not available"):
            closed_month_net_revenue("2026-04")

    def test_malformed_month_is_rejected(self):
        for month in ("2026-2", "2026-13", "2026-00", " 2026-02", "2026-02\n", None, 202602):
            with self.subTest(month=month), self.assertRaisesRegex(ValueError, "YYYY-MM"):
                closed_month_net_revenue(month)

    def test_caller_cannot_mutate_the_source_record(self):
        first = closed_month_net_revenue("2026-02")
        first["amount_cents"] = 0
        self.assertEqual(closed_month_net_revenue("2026-02")["amount_cents"], 9_200_000)


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