fix: return 422 on invalid SQL (#34303)

This commit is contained in:
Beto Dealmeida
2025-07-24 16:40:56 -04:00
committed by GitHub
parent 3177131d52
commit b794b192d1
6 changed files with 340 additions and 4 deletions

View File

@@ -974,6 +974,36 @@ class TestDatasetApi(SupersetTestCase):
assert rv.status_code == 422
assert data == {"message": "Dataset could not be created."}
@patch("superset.commands.dataset.create.security_manager.raise_for_access")
def test_create_dataset_with_invalid_sql_validation(self, mock_raise_for_access):
"""
Dataset API: Test create dataset with invalid SQL during validation returns 422
"""
from superset.exceptions import SupersetParseError
# Mock raise_for_access to throw SupersetParseError during validation
mock_raise_for_access.side_effect = SupersetParseError(
sql="SELECT FROM WHERE AND",
engine="postgresql",
message="Invalid SQL syntax",
)
self.login(ADMIN_USERNAME)
examples_db = get_example_database()
dataset_data = {
"database": examples_db.id,
"schema": "",
"table_name": "invalid_sql_table",
"sql": "SELECT FROM WHERE AND",
}
uri = "api/v1/dataset/"
rv = self.client.post(uri, json=dataset_data)
data = json.loads(rv.data.decode("utf-8"))
# The error is caught during validation and returns 422
assert rv.status_code == 422
assert "sql" in data["message"]
assert "Invalid SQL:" in data["message"]["sql"][0]
def test_update_dataset_preserve_ownership(self):
"""
Dataset API: Test update dataset preserves owner list (if un-changed)