You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by po...@apache.org on 2021/08/23 21:43:58 UTC

[airflow] branch main updated: Move Model collation args tests to correct folder (#17791)

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 cb9f0bd  Move Model collation args tests to correct folder (#17791)
cb9f0bd is described below

commit cb9f0bd5bd27306e4e8c0985468fe979518d0896
Author: Ash Berlin-Taylor <as...@firemirror.com>
AuthorDate: Mon Aug 23 22:43:35 2021 +0100

    Move Model collation args tests to correct folder (#17791)
    
    The tests for this got added to test_base.py, which is the right file
    name, but inside tests/sensors/, which isn't right :)
    
    Created a new tests/models/test_base.py for this
---
 tests/models/test_base.py  | 47 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/sensors/test_base.py | 41 ----------------------------------------
 2 files changed, 47 insertions(+), 41 deletions(-)

diff --git a/tests/models/test_base.py b/tests/models/test_base.py
new file mode 100644
index 0000000..fa25313
--- /dev/null
+++ b/tests/models/test_base.py
@@ -0,0 +1,47 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import pytest
+from pytest import param
+
+from airflow.models.base import get_id_collation_args
+from tests.test_utils.config import conf_vars
+
+
+@pytest.mark.parametrize(
+    ("dsn", "expected", "extra"),
+    [
+        param("postgres://host/the_database", {}, {}, id="postgres"),
+        param("mysql://host/the_database", {"collation": "utf8mb3_general_ci"}, {}, id="mysql"),
+        param("mysql+pymsql://host/the_database", {"collation": "utf8mb3_general_ci"}, {}, id="mysql+pymsql"),
+        param(
+            "mysql://host/the_database",
+            {"collation": "ascii"},
+            {('core', 'sql_engine_collation_for_ids'): 'ascii'},
+            id="mysql with explicit config",
+        ),
+        param(
+            "postgres://host/the_database",
+            {"collation": "ascii"},
+            {('core', 'sql_engine_collation_for_ids'): 'ascii'},
+            id="postgres with explicit config",
+        ),
+    ],
+)
+def test_collation(dsn, expected, extra):
+    with conf_vars({('core', 'sql_alchemy_conn'): dsn, **extra}):
+        assert expected == get_id_collation_args()
diff --git a/tests/sensors/test_base.py b/tests/sensors/test_base.py
index a26bc94..dd3bf29 100644
--- a/tests/sensors/test_base.py
+++ b/tests/sensors/test_base.py
@@ -19,7 +19,6 @@
 
 import unittest
 from datetime import timedelta
-from unittest import mock
 from unittest.mock import Mock, patch
 
 import pytest
@@ -27,7 +26,6 @@ from freezegun import freeze_time
 
 from airflow.exceptions import AirflowException, AirflowRescheduleException, AirflowSensorTimeout
 from airflow.models import DagBag, TaskInstance, TaskReschedule
-from airflow.models.base import get_id_collation_args
 from airflow.models.dag import DAG
 from airflow.operators.dummy import DummyOperator
 from airflow.sensors.base import BaseSensorOperator, poke_mode_only
@@ -657,42 +655,3 @@ class TestPokeModeOnly(unittest.TestCase):
         sensor = DummyPokeOnlySensor(task_id='foo', mode='poke', poke_changes_mode=True, dag=self.dag)
         with pytest.raises(ValueError):
             sensor.poke({})
-
-
-class TestCollation(unittest.TestCase):
-    @mock.patch.dict(
-        'os.environ',
-        AIRFLOW__CORE__SQL_ALCHEMY_CONN='postgres://host/the_database',
-    )
-    def test_collation_empty_on_non_mysql(self):
-        assert {} == get_id_collation_args()
-
-    @mock.patch.dict(
-        'os.environ',
-        AIRFLOW__CORE__SQL_ALCHEMY_CONN='mysql://host/the_database',
-    )
-    def test_collation_set_on_mysql(self):
-        assert {"collation": "utf8mb3_general_ci"} == get_id_collation_args()
-
-    @mock.patch.dict(
-        'os.environ',
-        AIRFLOW__CORE__SQL_ALCHEMY_CONN='mysql+pymsql://host/the_database',
-    )
-    def test_collation_set_on_mysql_with_pymsql(self):
-        assert {"collation": "utf8mb3_general_ci"} == get_id_collation_args()
-
-    @mock.patch.dict(
-        'os.environ',
-        AIRFLOW__CORE__SQL_ALCHEMY_CONN='mysql://host/the_database',
-        AIRFLOW__CORE__SQL_ENGINE_COLLATION_FOR_IDS='ascii',
-    )
-    def test_collation_override_on_non_mysql(self):
-        assert {"collation": "ascii"} == get_id_collation_args()
-
-    @mock.patch.dict(
-        'os.environ',
-        AIRFLOW__CORE__SQL_ALCHEMY_CONN='postgres://host/the_database',
-        AIRFLOW__CORE__SQL_ENGINE_COLLATION_FOR_IDS='ascii',
-    )
-    def test_collation_override_on_mysql(self):
-        assert {"collation": "ascii"} == get_id_collation_args()