37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from shanghai_housing.db import connect, load_sample_data
|
|
from shanghai_housing.indicators import compute_area_scores, previous_month
|
|
|
|
|
|
class IndicatorTests(unittest.TestCase):
|
|
def test_previous_month_handles_year_boundary(self) -> None:
|
|
self.assertEqual(previous_month("2026-01"), "2025-12")
|
|
self.assertEqual(previous_month("2026-05"), "2026-04")
|
|
|
|
def test_area_scores_are_bounded_and_sorted(self) -> None:
|
|
with tempfile.TemporaryDirectory() as tmpdir:
|
|
db_path = Path(tmpdir) / "test.sqlite"
|
|
load_sample_data(db_path)
|
|
with connect(db_path) as conn:
|
|
scores = compute_area_scores(conn, "2026-05")
|
|
|
|
self.assertEqual(len(scores), 5)
|
|
self.assertEqual(
|
|
[score.investment_score for score in scores],
|
|
sorted([score.investment_score for score in scores], reverse=True),
|
|
)
|
|
for score in scores:
|
|
self.assertGreaterEqual(score.investment_score, 0)
|
|
self.assertLessEqual(score.investment_score, 100)
|
|
self.assertGreaterEqual(score.supply_risk_score, 0)
|
|
self.assertLessEqual(score.supply_risk_score, 100)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|