@@ -280,16 +280,20 @@ def test_on_run_start_end(copy_to_temp_path):
280280 sushi_context = Context (paths = copy_to_temp_path (project_root ))
281281 assert len (sushi_context ._environment_statements ) == 2
282282
283- # Root project on run start / on run end
283+ # Root project's on run start / on run end should be first by checking the macros
284284 root_environment_statements = sushi_context ._environment_statements [0 ]
285+ assert "create_tables" in root_environment_statements .jinja_macros .root_macros
286+
287+ # Validate order of execution to be correct
285288 assert root_environment_statements .before_all == [
286- "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS analytic_stats (physical_table VARCHAR, evaluation_time VARCHAR);\n JINJA_END;"
289+ "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS analytic_stats (physical_table VARCHAR, evaluation_time VARCHAR);\n JINJA_END;" ,
290+ "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS to_be_executed_last (col VARCHAR);\n JINJA_END;" ,
287291 ]
288292 assert root_environment_statements .after_all == [
289- "JINJA_STATEMENT_BEGIN;\n {{ create_tables(schemas) }}\n JINJA_END;"
293+ "JINJA_STATEMENT_BEGIN;\n {{ create_tables(schemas) }}\n JINJA_END;" ,
294+ "JINJA_STATEMENT_BEGIN;\n DROP TABLE to_be_executed_last;\n JINJA_END;" ,
290295 ]
291296
292- assert "create_tables" in root_environment_statements .jinja_macros .root_macros
293297 assert root_environment_statements .jinja_macros .root_package_name == "sushi"
294298
295299 rendered_before_all = render_statements (
@@ -311,25 +315,30 @@ def test_on_run_start_end(copy_to_temp_path):
311315 )
312316
313317 assert rendered_before_all == [
314- "CREATE TABLE IF NOT EXISTS analytic_stats (physical_table TEXT, evaluation_time TEXT)"
318+ "CREATE TABLE IF NOT EXISTS analytic_stats (physical_table TEXT, evaluation_time TEXT)" ,
319+ "CREATE TABLE IF NOT EXISTS to_be_executed_last (col TEXT)" ,
315320 ]
316321
317322 # The jinja macro should have resolved the schemas for this environment and generated corresponding statements
318323 assert sorted (rendered_after_all ) == sorted (
319324 [
320325 "CREATE OR REPLACE TABLE schema_table_snapshots__dev AS SELECT 'snapshots__dev' AS schema" ,
321326 "CREATE OR REPLACE TABLE schema_table_sushi__dev AS SELECT 'sushi__dev' AS schema" ,
327+ "DROP TABLE to_be_executed_last" ,
322328 ]
323329 )
324330
325331 # Nested dbt_packages on run start / on run end
326332 packaged_environment_statements = sushi_context ._environment_statements [1 ]
327333
334+ # Validate order of execution to be correct
328335 assert packaged_environment_statements .before_all == [
329- "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS analytic_stats_packaged_project (physical_table VARCHAR, evaluation_time VARCHAR);\n JINJA_END;"
336+ "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS to_be_executed_first (col VARCHAR);\n JINJA_END;" ,
337+ "JINJA_STATEMENT_BEGIN;\n CREATE TABLE IF NOT EXISTS analytic_stats_packaged_project (physical_table VARCHAR, evaluation_time VARCHAR);\n JINJA_END;" ,
330338 ]
331339 assert packaged_environment_statements .after_all == [
332- "JINJA_STATEMENT_BEGIN;\n {{ packaged_tables(schemas) }}\n JINJA_END;"
340+ "JINJA_STATEMENT_BEGIN;\n DROP TABLE to_be_executed_first\n JINJA_END;" ,
341+ "JINJA_STATEMENT_BEGIN;\n {{ packaged_tables(schemas) }}\n JINJA_END;" ,
333342 ]
334343
335344 assert "packaged_tables" in packaged_environment_statements .jinja_macros .root_macros
@@ -353,13 +362,19 @@ def test_on_run_start_end(copy_to_temp_path):
353362 environment_naming_info = EnvironmentNamingInfo (name = "dev" ),
354363 )
355364
365+ # Validate order of execution to match dbt's
356366 assert rendered_before_all == [
357- "CREATE TABLE IF NOT EXISTS analytic_stats_packaged_project (physical_table TEXT, evaluation_time TEXT)"
367+ "CREATE TABLE IF NOT EXISTS to_be_executed_first (col TEXT)" ,
368+ "CREATE TABLE IF NOT EXISTS analytic_stats_packaged_project (physical_table TEXT, evaluation_time TEXT)" ,
358369 ]
359370
371+ # This on run end statement should be executed first
372+ assert rendered_after_all [0 ] == "DROP TABLE to_be_executed_first"
373+
360374 # The table names is an indication of the rendering of the dbt_packages statements
361375 assert sorted (rendered_after_all ) == sorted (
362376 [
377+ "DROP TABLE to_be_executed_first" ,
363378 "CREATE OR REPLACE TABLE schema_table_snapshots__dev_nested_package AS SELECT 'snapshots__dev' AS schema" ,
364379 "CREATE OR REPLACE TABLE schema_table_sushi__dev_nested_package AS SELECT 'sushi__dev' AS schema" ,
365380 ]
0 commit comments