test_mock_data.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from pathlib import Path
  2. import unittest
  3. from app.market import MarketService
  4. from app.market.models import InquiryRequest
  5. from app.mock_data import LocalMockDataService, MockBatchRequest
  6. from app.repository import RDFRepository
  7. ROOT = Path(__file__).resolve().parents[1]
  8. HAIER = "https://gesli.example/sample#Haier"
  9. class MockDataTest(unittest.TestCase):
  10. def setUp(self):
  11. self.repository = RDFRepository(ROOT)
  12. self.market = MarketService(ROOT, self.repository)
  13. self.mock_data = LocalMockDataService(ROOT, self.repository, self.market)
  14. def test_catalog_exposes_local_domain_data(self):
  15. catalog = self.mock_data.catalog()
  16. self.assertEqual(catalog["summary"]["in_memory_triple_count"], 0)
  17. self.assertGreaterEqual(catalog["summary"]["customer_count"], 9)
  18. self.assertGreaterEqual(catalog["summary"]["quote_count"], 24)
  19. self.assertGreaterEqual(catalog["summary"]["strategy_count"], 5)
  20. self.assertTrue(any(row["destination"] == "印度那瓦舍瓦港" for row in catalog["routes"]))
  21. india_direct = next(row for row in catalog["quotes"] if row["quote_no"] == "SQ-MOCK-IN-NHAVA-DIRECT-001")
  22. self.assertEqual(india_direct["spot_space_status"], "可立即订舱")
  23. self.assertEqual(india_direct["spot_space_teu"], 18)
  24. def test_generated_batch_immediately_joins_recommendation_pool(self):
  25. before = self.market.recommend(InquiryRequest(customer=HAIER))
  26. result = self.mock_data.generate(MockBatchRequest(
  27. origin="青岛港",
  28. destination="印度那瓦舍瓦港",
  29. supplier_count=4,
  30. customer_count=2,
  31. ))
  32. after = self.market.recommend(InquiryRequest(
  33. customer=HAIER,
  34. destination="印度那瓦舍瓦港",
  35. requested_departure_date="2026-07-28",
  36. max_transit_days=30,
  37. target_amount=46000,
  38. ))
  39. self.assertGreater(result["added_triples"], 100)
  40. self.assertEqual(result["catalog"]["summary"]["in_memory_triple_count"], result["added_triples"])
  41. self.assertEqual(after["pipeline"]["discovered"], 7)
  42. self.assertEqual(result["catalog"]["summary"]["customer_count"], 11)
  43. self.assertTrue(any("印度航线Mock" in name for name in result["suppliers"]))
  44. def test_reset_discards_only_runtime_mock_data(self):
  45. baseline = self.repository.triple_count
  46. self.mock_data.generate(MockBatchRequest(
  47. origin="青岛港",
  48. destination="印度金奈港",
  49. supplier_count=1,
  50. customer_count=1,
  51. ))
  52. reset_catalog = self.mock_data.reset()
  53. self.assertEqual(self.repository.triple_count, baseline)
  54. self.assertEqual(reset_catalog["summary"]["in_memory_triple_count"], 0)
  55. self.assertFalse(any(row["runtime_mock"] for row in reset_catalog["quotes"]))
  56. if __name__ == "__main__":
  57. unittest.main()