from pathlib import Path import unittest from app.market import MarketService from app.market.models import InquiryRequest from app.mock_data import LocalMockDataService, MockBatchRequest from app.repository import RDFRepository ROOT = Path(__file__).resolve().parents[1] HAIER = "https://gesli.example/sample#Haier" class MockDataTest(unittest.TestCase): def setUp(self): self.repository = RDFRepository(ROOT) self.market = MarketService(ROOT, self.repository) self.mock_data = LocalMockDataService(ROOT, self.repository, self.market) def test_catalog_exposes_local_domain_data(self): catalog = self.mock_data.catalog() self.assertEqual(catalog["summary"]["in_memory_triple_count"], 0) self.assertGreaterEqual(catalog["summary"]["customer_count"], 7) self.assertGreaterEqual(catalog["summary"]["quote_count"], 18) self.assertGreaterEqual(catalog["summary"]["strategy_count"], 3) def test_generated_batch_immediately_joins_recommendation_pool(self): before = self.market.recommend(InquiryRequest(customer=HAIER)) result = self.mock_data.generate(MockBatchRequest( origin="青岛港", destination="洛杉矶港", supplier_count=2, customer_count=1, )) after = self.market.recommend(InquiryRequest(customer=HAIER)) self.assertGreater(result["added_triples"], 100) self.assertEqual(result["catalog"]["summary"]["in_memory_triple_count"], result["added_triples"]) self.assertEqual(after["pipeline"]["discovered"], before["pipeline"]["discovered"] + 2) self.assertEqual(result["catalog"]["summary"]["customer_count"], 8) def test_reset_discards_only_runtime_mock_data(self): baseline = self.repository.triple_count self.mock_data.generate(MockBatchRequest( origin="青岛港", destination="汉堡港", supplier_count=1, customer_count=1, )) reset_catalog = self.mock_data.reset() self.assertEqual(self.repository.triple_count, baseline) self.assertEqual(reset_catalog["summary"]["in_memory_triple_count"], 0) self.assertFalse(any(row["runtime_mock"] for row in reset_catalog["quotes"])) if __name__ == "__main__": unittest.main()