From 6131e36bf6c2c984732c98518e5ab3a1b52a7b16 Mon Sep 17 00:00:00 2001 From: George Sittas Date: Thu, 9 Oct 2025 15:27:49 +0300 Subject: [PATCH] Chore: improve unit test validation --- sqlmesh/core/test/definition.py | 3 +++ tests/core/test_test.py | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/sqlmesh/core/test/definition.py b/sqlmesh/core/test/definition.py index 4336e00ce0..8d8ca17702 100644 --- a/sqlmesh/core/test/definition.py +++ b/sqlmesh/core/test/definition.py @@ -454,6 +454,9 @@ def _validate_and_normalize_test(self) -> None: query = outputs.get("query") partial = outputs.pop("partial", None) + if ctes is None and query is None: + _raise_error("Incomplete test, outputs must contain 'query' or 'ctes'", self.path) + def _normalize_rows( values: t.List[Row] | t.Dict, name: str, diff --git a/tests/core/test_test.py b/tests/core/test_test.py index 56a44cc955..13e31703a1 100644 --- a/tests/core/test_test.py +++ b/tests/core/test_test.py @@ -1185,6 +1185,27 @@ def test_unknown_column_error() -> None: ) +def test_invalid_outputs_error() -> None: + with pytest.raises(TestError, match="Incomplete test, outputs must contain 'query' or 'ctes'"): + _create_test( + body=load_yaml( + """ +test_foo: + model: sushi.foo + inputs: + raw: + - id: 1 + outputs: + rows: + - id: 1 + """ + ), + test_name="test_foo", + model=_create_model("SELECT id FROM raw"), + context=Context(config=Config(model_defaults=ModelDefaultsConfig(dialect="duckdb"))), + ) + + def test_empty_rows(sushi_context: Context) -> None: _check_successful_or_raise( _create_test(