subagents

This commit is contained in:
2026-03-20 17:20:24 +03:00
parent b89b9a66f2
commit 1149e8df1d
36 changed files with 4313 additions and 327 deletions

View File

@@ -299,6 +299,16 @@ def _make_us3_session():
# [/DEF:_make_us3_session:Function]
# [DEF:_make_preview_ready_session:Function]
def _make_preview_ready_session():
session = _make_us3_session()
session.readiness_state = ReadinessState.COMPILED_PREVIEW_READY
session.recommended_action = RecommendedAction.GENERATE_SQL_PREVIEW
session.current_phase = SessionPhase.PREVIEW
return session
# [/DEF:_make_preview_ready_session:Function]
# [DEF:dataset_review_api_dependencies:Function]
@pytest.fixture(autouse=True)
def dataset_review_api_dependencies():
@@ -605,7 +615,11 @@ def test_orchestrator_start_session_bootstraps_recovery_state(dataset_review_api
"filter_name": "country",
"display_name": "Country",
"raw_value": ["DE"],
"normalized_value": ["DE"],
"normalized_value": {
"filter_clauses": [{"col": "country_code", "op": "IN", "val": ["DE"]}],
"extra_form_data": {"filters": [{"col": "country_code", "op": "IN", "val": ["DE"]}]},
"value_origin": "extra_form_data.filters",
},
"source": "superset_url",
"confidence_state": "imported",
"requires_confirmation": False,
@@ -650,6 +664,11 @@ def test_orchestrator_start_session_bootstraps_recovery_state(dataset_review_api
saved_mappings = repository.save_recovery_state.call_args.args[4]
assert len(saved_filters) == 1
assert saved_filters[0].filter_name == "country"
assert saved_filters[0].normalized_value == {
"filter_clauses": [{"col": "country_code", "op": "IN", "val": ["DE"]}],
"extra_form_data": {"filters": [{"col": "country_code", "op": "IN", "val": ["DE"]}]},
"value_origin": "extra_form_data.filters",
}
assert len(saved_variables) == 1
assert saved_variables[0].variable_name == "country"
assert len(saved_mappings) == 1
@@ -1095,6 +1114,137 @@ def test_us3_preview_endpoint_returns_failed_preview_without_false_dashboard_not
# [/DEF:test_us3_preview_endpoint_returns_failed_preview_without_false_dashboard_not_found_contract_drift:Function]
# [DEF:test_execution_snapshot_includes_recovered_imported_filters_without_template_mapping:Function]
# @PURPOSE: Recovered imported filters with values should flow into preview filter context even when no template variable mapping exists.
def test_execution_snapshot_includes_recovered_imported_filters_without_template_mapping(
dataset_review_api_dependencies,
):
repository = MagicMock()
repository.db = MagicMock()
repository.event_logger = MagicMock(spec=SessionEventLogger)
orchestrator = DatasetReviewOrchestrator(
repository=repository,
config_manager=dataset_review_api_dependencies["config_manager"],
task_manager=None,
)
session = _make_preview_ready_session()
recovered_filter = MagicMock()
recovered_filter.filter_id = "filter-country"
recovered_filter.filter_name = "country"
recovered_filter.display_name = "Country"
recovered_filter.raw_value = ["DE", "FR"]
recovered_filter.normalized_value = ["DE", "FR"]
recovered_filter.requires_confirmation = False
recovered_filter.recovery_status = "recovered"
session.imported_filters = [recovered_filter]
session.template_variables = []
session.execution_mappings = []
session.semantic_fields = []
snapshot = orchestrator._build_execution_snapshot(session)
assert snapshot["template_params"] == {}
assert snapshot["preview_blockers"] == []
recovered_filter.normalized_value = {
"filter_clauses": [{"col": "country_code", "op": "IN", "val": ["DE", "FR"]}],
"extra_form_data": {"filters": [{"col": "country_code", "op": "IN", "val": ["DE", "FR"]}]},
"value_origin": "extra_form_data.filters",
}
snapshot = orchestrator._build_execution_snapshot(session)
assert snapshot["template_params"] == {}
assert snapshot["preview_blockers"] == []
assert snapshot["effective_filters"] == [
{
"filter_id": "filter-country",
"filter_name": "country",
"display_name": "Country",
"effective_value": ["DE", "FR"],
"raw_input_value": ["DE", "FR"],
"normalized_filter_payload": {
"filter_clauses": [{"col": "country_code", "op": "IN", "val": ["DE", "FR"]}],
"extra_form_data": {"filters": [{"col": "country_code", "op": "IN", "val": ["DE", "FR"]}]},
"value_origin": "extra_form_data.filters",
},
}
]
# [/DEF:test_execution_snapshot_includes_recovered_imported_filters_without_template_mapping:Function]
# [DEF:test_execution_snapshot_preserves_mapped_template_variables_and_filter_context:Function]
# @PURPOSE: Mapped template variables should still populate template params while contributing their effective filter context.
def test_execution_snapshot_preserves_mapped_template_variables_and_filter_context(
dataset_review_api_dependencies,
):
repository = MagicMock()
repository.db = MagicMock()
repository.event_logger = MagicMock(spec=SessionEventLogger)
orchestrator = DatasetReviewOrchestrator(
repository=repository,
config_manager=dataset_review_api_dependencies["config_manager"],
task_manager=None,
)
session = _make_preview_ready_session()
snapshot = orchestrator._build_execution_snapshot(session)
assert snapshot["template_params"] == {"country": "DE"}
assert snapshot["preview_blockers"] == []
assert snapshot["effective_filters"] == [
{
"mapping_id": "map-1",
"filter_id": "filter-1",
"filter_name": "country",
"variable_id": "var-1",
"variable_name": "country",
"effective_value": "DE",
"raw_input_value": "DE",
}
]
assert snapshot["open_warning_refs"] == ["map-1"]
# [/DEF:test_execution_snapshot_preserves_mapped_template_variables_and_filter_context:Function]
# [DEF:test_execution_snapshot_skips_partial_imported_filters_without_values:Function]
# @PURPOSE: Partial imported filters without raw or normalized values must not emit bogus active preview filters.
def test_execution_snapshot_skips_partial_imported_filters_without_values(
dataset_review_api_dependencies,
):
repository = MagicMock()
repository.db = MagicMock()
repository.event_logger = MagicMock(spec=SessionEventLogger)
orchestrator = DatasetReviewOrchestrator(
repository=repository,
config_manager=dataset_review_api_dependencies["config_manager"],
task_manager=None,
)
session = _make_preview_ready_session()
unresolved_filter = MagicMock()
unresolved_filter.filter_id = "filter-region"
unresolved_filter.filter_name = "region"
unresolved_filter.display_name = "Region"
unresolved_filter.raw_value = None
unresolved_filter.normalized_value = None
unresolved_filter.requires_confirmation = True
unresolved_filter.recovery_status = "partial"
session.imported_filters = [unresolved_filter]
session.template_variables = []
session.execution_mappings = []
session.semantic_fields = []
snapshot = orchestrator._build_execution_snapshot(session)
assert snapshot["template_params"] == {}
assert snapshot["effective_filters"] == []
assert snapshot["preview_blockers"] == []
# [/DEF:test_execution_snapshot_skips_partial_imported_filters_without_values:Function]
# [DEF:test_us3_launch_endpoint_requires_launch_permission:Function]
# @PURPOSE: Launch endpoint should enforce the contract RBAC permission instead of the generic session-manage permission.
def test_us3_launch_endpoint_requires_launch_permission(dataset_review_api_dependencies):