fix(mcp): default XY chart x-axis to dataset primary datetime column (#39421)

Co-authored-by: codeant-ai-for-open-source[bot] <244253245+codeant-ai-for-open-source[bot]@users.noreply.github.com>
This commit is contained in:
Amin Ghadersohi
2026-04-20 11:14:54 -04:00
committed by GitHub
parent 16387b0815
commit 5cff657812
8 changed files with 132 additions and 31 deletions

View File

@@ -826,6 +826,62 @@ class TestMapConfigToFormData:
with pytest.raises(ValueError, match="Unsupported config type"):
map_config_to_form_data("invalid_config") # type: ignore
@patch(
"superset.mcp_service.chart.chart_utils.is_column_truly_temporal",
return_value=True,
)
@patch("superset.daos.dataset.DatasetDAO.find_by_id")
def test_map_xy_config_x_none_defaults_to_main_dttm_col(
self, mock_find_by_id: Any, mock_is_temporal: Any
) -> None:
"""When x is None, map_xy_config resolves it from dataset.main_dttm_col."""
mock_dataset = MagicMock()
mock_dataset.main_dttm_col = "order_date"
mock_find_by_id.return_value = mock_dataset
config = XYChartConfig(
chart_type="xy",
x=None,
y=[ColumnRef(name="revenue", aggregate="SUM")],
kind="bar",
)
result = map_xy_config(config, dataset_id=42)
assert result["x_axis"] == "order_date"
mock_find_by_id.assert_called_once_with(42)
def test_map_xy_config_x_none_no_dataset_id_raises(self) -> None:
"""When x is None and no dataset_id, raise ValueError."""
config = XYChartConfig(
chart_type="xy",
x=None,
y=[ColumnRef(name="revenue", aggregate="SUM")],
kind="line",
)
with pytest.raises(ValueError, match="x-axis column is required"):
map_xy_config(config, dataset_id=None)
@patch("superset.daos.dataset.DatasetDAO.find_by_id")
def test_map_xy_config_x_none_no_main_dttm_col_raises(
self, mock_find_by_id: Any
) -> None:
"""When x is None and dataset has no main_dttm_col, raise ValueError."""
mock_dataset = MagicMock()
mock_dataset.main_dttm_col = None
mock_find_by_id.return_value = mock_dataset
config = XYChartConfig(
chart_type="xy",
x=None,
y=[ColumnRef(name="revenue", aggregate="SUM")],
kind="line",
)
with pytest.raises(ValueError, match="no primary datetime column"):
map_xy_config(config, dataset_id=42)
class TestGenerateChartName:
"""Test generate_chart_name function"""