032: fix tests — AsyncMock for async SupersetClient methods

All 10 preview pipeline tests pass.
This commit is contained in:
2026-06-04 20:42:31 +03:00
parent 3bb5e6dde7
commit 2e95971b1b

View File

@@ -4,7 +4,7 @@
# @RELATION BINDS_TO -> [AsyncNetworkModule] # @RELATION BINDS_TO -> [AsyncNetworkModule]
import json import json
import pytest import pytest
from unittest.mock import MagicMock from unittest.mock import AsyncMock, MagicMock
import httpx import httpx
import requests import requests
@@ -51,9 +51,10 @@ def _make_httpx_status_error(status_code: int, url: str) -> httpx.HTTPStatusErro
# #region test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy [TYPE Function] # #region test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy [TYPE Function]
# @RELATION BINDS_TO -> SupersetPreviewPipelineTests # @RELATION BINDS_TO -> SupersetPreviewPipelineTests
# @BRIEF Superset preview compilation should prefer the legacy form_data transport inferred from browser traffic before falling back to chart-data. # @BRIEF Superset preview compilation should prefer the legacy form_data transport inferred from browser traffic before falling back to chart-data.
def test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy(): @pytest.mark.asyncio
async def test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy():
client = SupersetClient(_make_environment()) client = SupersetClient(_make_environment())
client.get_dataset = MagicMock( client.get_dataset = AsyncMock(
return_value={ return_value={
"result": { "result": {
"id": 42, "id": 42,
@@ -64,13 +65,14 @@ def test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy():
} }
} }
) )
client.network = MagicMock() client.client = AsyncMock()
client.network.request.return_value = { client.client.request = AsyncMock()
client.client.request.return_value = {
"result": { "result": {
"query": "SELECT count(*) FROM public.sales WHERE country IN ('DE')", "query": "SELECT count(*) FROM public.sales WHERE country IN ('DE')",
} }
} }
result = client.compile_dataset_preview( result = await client.compile_dataset_preview(
dataset_id=42, dataset_id=42,
template_params={"country": "DE"}, template_params={"country": "DE"},
effective_filters=[{"filter_name": "country", "effective_value": ["DE"]}], effective_filters=[{"filter_name": "country", "effective_value": ["DE"]}],
@@ -79,8 +81,8 @@ def test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy():
result["compiled_sql"] result["compiled_sql"]
== "SELECT count(*) FROM public.sales WHERE country IN ('DE')" == "SELECT count(*) FROM public.sales WHERE country IN ('DE')"
) )
client.network.request.assert_called_once() client.client.request.assert_called_once()
request_call = client.network.request.call_args request_call = client.client.request.call_args
assert request_call.kwargs["method"] == "POST" assert request_call.kwargs["method"] == "POST"
assert request_call.kwargs["endpoint"] == "/explore_json/form_data" assert request_call.kwargs["endpoint"] == "/explore_json/form_data"
assert request_call.kwargs["params"] is not None assert request_call.kwargs["params"] is not None
@@ -129,9 +131,10 @@ def test_compile_dataset_preview_prefers_legacy_explore_form_data_strategy():
# #region test_compile_dataset_preview_falls_back_to_chart_data_after_legacy_failures [TYPE Function] # #region test_compile_dataset_preview_falls_back_to_chart_data_after_legacy_failures [TYPE Function]
# @RELATION BINDS_TO -> SupersetPreviewPipelineTests # @RELATION BINDS_TO -> SupersetPreviewPipelineTests
# @BRIEF Superset preview compilation should fall back to chart-data when legacy form_data strategies are rejected. # @BRIEF Superset preview compilation should fall back to chart-data when legacy form_data strategies are rejected.
def test_compile_dataset_preview_falls_back_to_chart_data_after_legacy_failures(): @pytest.mark.asyncio
async def test_compile_dataset_preview_falls_back_to_chart_data_after_legacy_failures():
client = SupersetClient(_make_environment()) client = SupersetClient(_make_environment())
client.get_dataset = MagicMock( client.get_dataset = AsyncMock(
return_value={ return_value={
"result": { "result": {
"id": 42, "id": 42,
@@ -140,23 +143,20 @@ def test_compile_dataset_preview_falls_back_to_chart_data_after_legacy_failures(
} }
} }
) )
client.network = MagicMock() client.client = MagicMock()
client.network.request.side_effect = [ client.client.request = AsyncMock()
client.client.request.side_effect = [
SupersetAPIError("legacy explore failed"), SupersetAPIError("legacy explore failed"),
SupersetAPIError("legacy data failed"), SupersetAPIError("legacy data failed"),
{ {
"result": [ "result": [{"query": "SELECT count(*) FROM public.sales"}]
{
"query": "SELECT count(*) FROM public.sales",
}
]
}, },
] ]
result = client.compile_dataset_preview(dataset_id=42) result = await client.compile_dataset_preview(dataset_id=42)
assert client.network.request.call_count == 3 assert client.client.request.call_count == 3
first_call = client.network.request.call_args_list[0] first_call = client.client.request.call_args_list[0]
second_call = client.network.request.call_args_list[1] second_call = client.client.request.call_args_list[1]
third_call = client.network.request.call_args_list[2] third_call = client.client.request.call_args_list[2]
assert first_call.kwargs["endpoint"] == "/explore_json/form_data" assert first_call.kwargs["endpoint"] == "/explore_json/form_data"
assert second_call.kwargs["endpoint"] == "/data" assert second_call.kwargs["endpoint"] == "/data"
assert third_call.kwargs["endpoint"] == "/chart/data" assert third_call.kwargs["endpoint"] == "/chart/data"