dabla commented on code in PR #37937:
URL: https://github.com/apache/airflow/pull/37937#discussion_r1516019510


##########
tests/models/test_baseoperatormeta.py:
##########
@@ -0,0 +1,64 @@
+import os
+from typing import Any
+from unittest import TestCase
+from unittest.mock import Mock, patch, MagicMock
+
+import pendulum
+from sqlalchemy.orm import Session
+
+from airflow import AirflowException, DAG
+from airflow.models import TaskInstance, DagRun
+from airflow.models.baseoperator import BaseOperator
+from airflow.utils.context import Context
+from airflow.utils.state import DagRunState
+
+
+class HelloWorldOperator(BaseOperator):
+    called = False
+
+    def execute(self, context: Context) -> Any:
+        HelloWorldOperator.called = True
+        return f"Hello {self.owner}!"
+
+
+class IterableSession(Session):
+    def __next__(self):
+        pass
+
+
+class BaseOperatorMetaTestCase(TestCase):
+
+    @patch.dict(os.environ, {'AIRFLOW__CORE__UNIT_TEST_MODE': 'False'})
+    def test_executor_safeguard_when_unauthorized(self):
+        with self.assertRaises(AirflowException):
+            dag = DAG(dag_id="hello_world")
+            context = MagicMock(spec=Context)
+
+            HelloWorldOperator(task_id="task_id", 
dag=dag).execute(context=context)
+
+    @patch("sqlalchemy.orm.Session.__init__")
+    @patch.dict(os.environ, {'AIRFLOW__CORE__UNIT_TEST_MODE': 'False'})
+    def test_executor_safeguard_when_authorized(self, mock_session: MagicMock):
+        session = MagicMock(spec=IterableSession)
+        mock_session.return_value = session
+        session.__iter__.return_value = iter({})
+
+        dag = DAG(dag_id="hello_world")
+        context = {"params": {}}

Review Comment:
   > > you're bound to use a database (sqlite)
   > 
   > Small clarification it will use any supported database: Postgres, SQLite, 
MySQL. For DB required tests also required specific marker: `@pytest.mark.db`
   > 
   > If you worried about that some tests required DB when in unnecessary, 
there are hundreds of providers tests where DB is not required and which 
potentially could be fixed
   
   Indeed, it's just convienient to me as I can just directly run the test 
without the need to setup any db and have sqlalchemy do all it's stuff on the 
ORM, that's why I did it like this.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to