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):

Reply via email to