| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- from __future__ import annotations
- from unittest.mock import MagicMock, patch
- import pytest
- from supply_infra.scheduler.jobs.demand_pool.belong_rel import (
- sync_demand_belong_pool_rel,
- )
- @patch(
- "supply_infra.scheduler.jobs.demand_pool.belong_rel.DemandBelongPoolRelRepository"
- )
- @patch(
- "supply_infra.scheduler.jobs.demand_pool.belong_rel.MultiDemandPoolDiRepository"
- )
- @patch(
- "supply_infra.scheduler.jobs.demand_pool.belong_rel.DemandBelongCategoryRepository"
- )
- @patch("supply_infra.scheduler.jobs.demand_pool.belong_rel.get_session")
- def test_relations_are_date_scoped_and_require_explicit_tokens(
- mock_get_session,
- mock_belong_repo_cls,
- mock_pool_repo_cls,
- mock_rel_repo_cls,
- ) -> None:
- mock_get_session.return_value.__enter__.return_value = MagicMock()
- mock_belong_repo_cls.return_value.list_active_id_name.return_value = [
- (1, "老年"),
- (2, "年"),
- ]
- mock_pool_repo_cls.return_value.list_id_name_video_lists.return_value = [
- (101, "老年 健身", '["v-1"]'),
- (102, "老年健身", '["v-2"]'),
- ]
- mock_rel_repo_cls.return_value.delete_by_pool_ids.return_value = 2
- mock_rel_repo_cls.return_value.bulk_insert_ignore.return_value = 1
- mock_belong_repo_cls.return_value.update_video_lists.return_value = 2
- result = sync_demand_belong_pool_rel("20260730")
- mock_pool_repo_cls.return_value.list_id_name_video_lists.assert_called_once_with(
- "20260730"
- )
- inserted_rows = mock_rel_repo_cls.return_value.bulk_insert_ignore.call_args.args[0]
- assert inserted_rows == [
- {
- "demand_belong_category_id": 1,
- "multi_demand_pool_di_id": 101,
- "biz_dt": "20260730",
- "relation_type": "explicit_token",
- "relation_source": "demand_pool_name_tokens",
- "reason": "需求归属词完整命中上游 demand_name 的显式空格分词",
- "confidence": 1.0,
- "is_inferred": True,
- "status": "active",
- "valid_from_biz_dt": "20260730",
- "valid_to_biz_dt": None,
- }
- ]
- assert result["biz_dt"] == "20260730"
- assert result["matched_edges"] == 1
- assert result["rejected_substring_candidates"] == 3
- assert result["replaced_edges"] == 2
- def test_relation_sync_rejects_invalid_business_date() -> None:
- with pytest.raises(ValueError, match="YYYYMMDD"):
- sync_demand_belong_pool_rel("2026-07-30")
|