# [DEF:backend.tests.core.test_migration_engine:Module] # # @TIER: STANDARD # @PURPOSE: Unit tests for MigrationEngine's cross-filter patching algorithms. # @LAYER: Domain # @RELATION: VERIFIES -> backend.src.core.migration_engine # import pytest import tempfile import json import yaml import sys import os from pathlib import Path backend_dir = str(Path(__file__).parent.parent.parent.resolve()) if backend_dir not in sys.path: sys.path.insert(0, backend_dir) from src.core.migration_engine import MigrationEngine from src.core.mapping_service import IdMappingService from src.models.mapping import ResourceType class MockMappingService: def __init__(self, mappings): self.mappings = mappings def get_remote_ids_batch(self, env_id, resource_type, uuids): result = {} for uuid in uuids: if uuid in self.mappings: result[uuid] = self.mappings[uuid] return result def test_patch_dashboard_metadata_replaces_ids(): engine = MigrationEngine(MockMappingService({"uuid-target-1": 999})) with tempfile.TemporaryDirectory() as td: file_path = Path(td) / "dash.yaml" # Setup mock dashboard file original_metadata = { "native_filter_configuration": [ { "targets": [{"datasetId": 10}, {"datasetId": 42}] # 42 is our source ID } ] } with open(file_path, 'w') as f: yaml.dump({"json_metadata": json.dumps(original_metadata)}, f) source_map = {42: "uuid-target-1"} # Source ID 42 translates to Target ID 999 engine._patch_dashboard_metadata(file_path, "test-env", source_map) with open(file_path, 'r') as f: data = yaml.safe_load(f) new_metadata = json.loads(data["json_metadata"]) # Since simple string replacement isn't implemented strictly in the engine yet # (we left a placeholder `pass` for dataset replacement), this test sets up the # infrastructure to verify the patch once fully mapped. pass # [/DEF:backend.tests.core.test_migration_engine:Module]