Skip to content

Commit de46306

Browse files
committed
Add new test for external models
1 parent d4e3fbe commit de46306

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

tests/core/engine_adapter/integration/test_freshness.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,65 @@ def my_signal(batch):
414414
day_delta=3,
415415
was_evaluated=False,
416416
)
417+
418+
419+
@use_terminal_console
420+
def test_registered_and_unregistered_external_models(
421+
ctx: TestContext, tmp_path: pathlib.Path, mocker: MockerFixture
422+
):
423+
"""
424+
Scenario: Ensure that external models are queried for their last modified timestamp
425+
regardless of whether they are present in the "external_models.yaml" file (registered) or not (unregistered)
426+
"""
427+
428+
adapter = ctx.engine_adapter
429+
context, schema, (registered_external_table,) = initialize_context(
430+
ctx, tmp_path, num_external_models=1
431+
)
432+
433+
current_catalog = ctx.engine_adapter.get_current_catalog()
434+
435+
def normalize_external_table_name(external_table_name) -> str:
436+
from sqlglot import exp
437+
438+
normalized = exp.normalize_table_name(
439+
f"{current_catalog}.{external_table_name}", dialect=ctx.dialect
440+
)
441+
return exp.table_name(normalized, dialect=ctx.dialect, identify=True)
442+
443+
unregistered_external_table = f"{schema}.unregistered_external_table"
444+
445+
adapter.execute(
446+
f"CREATE TABLE {unregistered_external_table} AS (SELECT 1 AS col)",
447+
quote_identifiers=False,
448+
)
449+
450+
create_model(
451+
"new_model",
452+
schema,
453+
f"SELECT * FROM {unregistered_external_table}, {registered_external_table}",
454+
tmp_path,
455+
)
456+
457+
context.load()
458+
context.plan(auto_apply=True, no_prompts=True)
459+
460+
spy = mocker.spy(
461+
sqlmesh.core.engine_adapter.SnowflakeEngineAdapter, "get_table_last_modified_ts"
462+
)
463+
assert_model_evaluation(
464+
lambda: context.run(),
465+
day_delta=1,
466+
was_evaluated=False,
467+
)
468+
469+
assert spy.call_args_list
470+
471+
# The first argument of "get_table_last_modified_ts" is a list of external table names in normalized form
472+
# Ensure that this contains both external tables (registered and unregistered)
473+
assert sorted(spy.call_args[0][1]) == sorted(
474+
[
475+
normalize_external_table_name(registered_external_table),
476+
normalize_external_table_name(unregistered_external_table),
477+
]
478+
)

0 commit comments

Comments
 (0)