Skip to content

Commit 2c97660

Browse files
authored
Disregard column order when comparing dataframes in tests (#1031)
1 parent 02160c2 commit 2c97660

2 files changed

Lines changed: 63 additions & 41 deletions

File tree

sqlmesh/core/test/definition.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,10 @@ def assert_equal(self, df1: pd.DataFrame, df2: pd.DataFrame) -> None:
8080
"""Compare two DataFrames"""
8181
try:
8282
pd.testing.assert_frame_equal(
83-
df1, df2, check_dtype=False, check_datetimelike_compat=True
83+
df1.sort_index(axis=1),
84+
df2.sort_index(axis=1),
85+
check_dtype=False,
86+
check_datetimelike_compat=True,
8487
)
8588
except AssertionError as e:
8689
diff = "\n".join(

tests/core/test_test.py

Lines changed: 59 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@
99
from sqlmesh.utils.yaml import load as load_yaml
1010

1111

12+
def _run_test(body, test_name, model, sushi_context):
13+
return SqlModelTest(
14+
body=body[test_name],
15+
test_name=test_name,
16+
model=model,
17+
models=sushi_context._models,
18+
engine_adapter=sushi_context._test_engine_adapter,
19+
path=None,
20+
).run()
21+
22+
1223
def test_ctes(sushi_context: Context) -> None:
1324
model = t.cast(
1425
SqlModel,
@@ -55,14 +66,7 @@ def test_ctes(sushi_context: Context) -> None:
5566
latest: 2022-01-01
5667
"""
5768
)
58-
result = SqlModelTest(
59-
body=body["test_foo"],
60-
test_name="test_foo",
61-
model=model,
62-
models=sushi_context._models,
63-
engine_adapter=sushi_context._test_engine_adapter,
64-
path=None,
65-
).run()
69+
result = _run_test(body, "test_foo", model, sushi_context)
6670
assert result and result.wasSuccessful()
6771

6872

@@ -110,14 +114,7 @@ def test_ctes_only(sushi_context: Context) -> None:
110114
latest: 2022-01-01
111115
"""
112116
)
113-
result = SqlModelTest(
114-
body=body["test_foo"],
115-
test_name="test_foo",
116-
model=model,
117-
models=sushi_context._models,
118-
engine_adapter=sushi_context._test_engine_adapter,
119-
path=None,
120-
).run()
117+
result = _run_test(body, "test_foo", model, sushi_context)
121118
assert result and result.wasSuccessful()
122119

123120

@@ -162,14 +159,7 @@ def test_query_only(sushi_context: Context) -> None:
162159
latest: 2022-01-01
163160
"""
164161
)
165-
result = SqlModelTest(
166-
body=body["test_foo"],
167-
test_name="test_foo",
168-
model=model,
169-
models=sushi_context._models,
170-
engine_adapter=sushi_context._test_engine_adapter,
171-
path=None,
172-
).run()
162+
result = _run_test(body, "test_foo", model, sushi_context)
173163
assert result and result.wasSuccessful()
174164

175165

@@ -217,14 +207,7 @@ def test_with_rows(sushi_context: Context) -> None:
217207
latest: 2022-01-01
218208
"""
219209
)
220-
result = SqlModelTest(
221-
body=body["test_foo"],
222-
test_name="test_foo",
223-
model=model,
224-
models=sushi_context._models,
225-
engine_adapter=sushi_context._test_engine_adapter,
226-
path=None,
227-
).run()
210+
result = _run_test(body, "test_foo", model, sushi_context)
228211
assert result and result.wasSuccessful()
229212

230213

@@ -269,12 +252,48 @@ def test_without_rows(sushi_context: Context) -> None:
269252
latest: 2022-01-01
270253
"""
271254
)
272-
result = SqlModelTest(
273-
body=body["test_foo"],
274-
test_name="test_foo",
275-
model=model,
276-
models=sushi_context._models,
277-
engine_adapter=sushi_context._test_engine_adapter,
278-
path=None,
279-
).run()
255+
result = _run_test(body, "test_foo", model, sushi_context)
256+
assert result and result.wasSuccessful()
257+
258+
259+
def test_column_order(sushi_context: Context) -> None:
260+
model = t.cast(
261+
SqlModel,
262+
sushi_context.upsert_model(
263+
load_model(
264+
parse(
265+
"""
266+
MODEL (
267+
name sushi.foo,
268+
kind FULL,
269+
);
270+
271+
SELECT id, value, ds FROM raw;
272+
"""
273+
)
274+
)
275+
),
276+
)
277+
278+
body = load_yaml(
279+
"""
280+
test_foo:
281+
model: sushi.foo
282+
inputs:
283+
raw:
284+
- id: 1
285+
value: 2
286+
ds: 3
287+
outputs:
288+
query:
289+
- id: 1
290+
ds: 3
291+
value: 2
292+
vars:
293+
start: 2022-01-01
294+
end: 2022-01-01
295+
latest: 2022-01-01
296+
"""
297+
)
298+
result = _run_test(body, "test_foo", model, sushi_context)
280299
assert result and result.wasSuccessful()

0 commit comments

Comments
 (0)