This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new 85bf28f1660 Move Snowflake trigger tests to match the trigger module
name (#73760)
85bf28f1660 is described below
commit 85bf28f1660e936f8bd81b1f94a337c054d0bda2
Author: Karthik Mohankumar <[email protected]>
AuthorDate: Sun Nov 1 18:34:18 2026 -0600
Move Snowflake trigger tests to match the trigger module name (#73760)
The tests for snowflake/triggers/snowflake_trigger.py lived in
test_snowflake.py, so the project-structure check could not match them and the
module sat on its overlooked-tests allowlist. Running several query ids through
SnowflakeSqlApiTrigger.run() also had no coverage.
Generated-by: Claude Opus 5
---
.../tests/unit/always/test_project_structure.py | 1 -
...test_snowflake.py => test_snowflake_trigger.py} | 43 ++++++++++++++++++++++
2 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/airflow-core/tests/unit/always/test_project_structure.py
b/airflow-core/tests/unit/always/test_project_structure.py
index cbade3332f6..babd38bb9ce 100644
--- a/airflow-core/tests/unit/always/test_project_structure.py
+++ b/airflow-core/tests/unit/always/test_project_structure.py
@@ -102,7 +102,6 @@ class TestProjectStructure:
"providers/google/tests/unit/google/cloud/transfers/test_bigquery_to_sql.py",
"providers/google/tests/unit/google/cloud/transfers/test_presto_to_gcs.py",
"providers/microsoft/azure/tests/unit/microsoft/azure/operators/test_adls.py",
-
"providers/snowflake/tests/unit/snowflake/triggers/test_snowflake_trigger.py",
]
# Deliberately untested: link modules whose tests would only assert
constants.
# Remove an entry once its module gains logic worth testing.
diff --git
a/providers/snowflake/tests/unit/snowflake/triggers/test_snowflake.py
b/providers/snowflake/tests/unit/snowflake/triggers/test_snowflake_trigger.py
similarity index 80%
rename from providers/snowflake/tests/unit/snowflake/triggers/test_snowflake.py
rename to
providers/snowflake/tests/unit/snowflake/triggers/test_snowflake_trigger.py
index 2649fe4547e..055eb471be4 100644
--- a/providers/snowflake/tests/unit/snowflake/triggers/test_snowflake.py
+++
b/providers/snowflake/tests/unit/snowflake/triggers/test_snowflake_trigger.py
@@ -166,6 +166,49 @@ class TestSnowflakeSqlApiTrigger:
actual = await generator.asend(None)
assert TriggerEvent({"status": "success", "statement_query_ids":
QUERY_IDS}) == actual
+ @pytest.mark.asyncio
+ @mock.patch(f"{MODULE}.triggers.snowflake_trigger.asyncio.sleep",
autospec=True)
+ @mock.patch.object(SnowflakeSqlApiTrigger, "get_query_status",
autospec=True)
+ @mock.patch(f"{MODULE}.triggers.snowflake_trigger.SnowflakeSqlApiHook",
autospec=True)
+ async def test_run_polls_each_query_until_finished(self, mock_hook,
mock_get_query_status, mock_sleep):
+ trigger = SnowflakeSqlApiTrigger(
+ poll_interval=POLL_INTERVAL,
+ query_ids=["q1", "q2"],
+ snowflake_conn_id="test_conn",
+ token_life_time=LIFETIME,
+ token_renewal_delta=RENEWAL_DELTA,
+ )
+ mock_get_query_status.side_effect = [
+ {"status": "running"},
+ {"status": "success"},
+ {"status": "success"},
+ ]
+
+ events = [event async for event in trigger.run()]
+
+ assert events == [TriggerEvent({"status": "success",
"statement_query_ids": ["q1", "q2"]})]
+ assert [c.args[1] for c in mock_get_query_status.call_args_list] ==
["q1", "q1", "q2"]
+ mock_sleep.assert_awaited_once_with(POLL_INTERVAL)
+
+ @pytest.mark.asyncio
+ @mock.patch.object(SnowflakeSqlApiTrigger, "get_query_status",
autospec=True)
+ @mock.patch(f"{MODULE}.triggers.snowflake_trigger.SnowflakeSqlApiHook",
autospec=True)
+ async def test_run_stops_at_first_failed_query(self, mock_hook,
mock_get_query_status):
+ trigger = SnowflakeSqlApiTrigger(
+ poll_interval=POLL_INTERVAL,
+ query_ids=["q1", "q2", "q3"],
+ snowflake_conn_id="test_conn",
+ token_life_time=LIFETIME,
+ token_renewal_delta=RENEWAL_DELTA,
+ )
+ error = {"status": "error", "message": "SQL compilation error"}
+ mock_get_query_status.side_effect = [{"status": "success"}, error]
+
+ events = [event async for event in trigger.run()]
+
+ assert events == [TriggerEvent(error)]
+ assert [c.args[1] for c in mock_get_query_status.call_args_list] ==
["q1", "q2"]
+
@pytest.mark.asyncio
@mock.patch(f"{MODULE}.hooks.sql_api.SnowflakeSqlApiHook.get_sql_api_query_status_async")
async def test_snowflake_sql_trigger_failure_status(self,
mock_get_sql_api_query_status_async):