test_sql_store.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from datetime import date
  2. from app.sql_store import OrderRepository, initialize_database, load_orders
  3. def test_parameterized_order_summary(tmp_path) -> None:
  4. path = tmp_path / "shop.db"
  5. total = initialize_database(path, reset=True)
  6. assert total == 11
  7. data, evidence = OrderRepository(path).summarize_recent("U1001", days=30)
  8. assert data["order_count"] == 4
  9. assert data["total_paid"] == 10396.0
  10. assert data["below_99_count"] == 0
  11. assert evidence.source_type == "sql"
  12. assert evidence.metadata["days"] == 30
  13. assert date.today().isoformat() not in evidence.content
  14. def test_invalid_days_are_rejected(tmp_path) -> None:
  15. path = tmp_path / "shop.db"
  16. initialize_database(path, reset=True)
  17. repository = OrderRepository(path)
  18. try:
  19. repository.summarize_recent("U1001", days=1000)
  20. except ValueError as exc:
  21. assert "1 到 365" in str(exc)
  22. else:
  23. raise AssertionError("非法 days 未被拒绝")
  24. def test_sqlite_rows_are_loaded_from_csv(tmp_path) -> None:
  25. source = tmp_path / "orders.csv"
  26. source.write_text(
  27. "days_ago,order_id,user_id,product_name,category,amount,status\n"
  28. "1,O9000001,U9999,Demo Phone,phone,999.00,paid\n"
  29. "2,O9000002,U9999,Demo Case,accessory,49.00,completed\n",
  30. encoding="utf-8",
  31. )
  32. rows = load_orders(source)
  33. assert len(rows) == 2
  34. database = tmp_path / "shop.db"
  35. total = initialize_database(database, source_path=source, reset=True)
  36. data, _ = OrderRepository(database).summarize_recent("U9999", days=30)
  37. assert total == 2
  38. assert data["order_count"] == 2
  39. assert data["total_paid"] == 1048.0
  40. assert data["below_99_count"] == 1