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 2fc1cfc0ba9 Make serializers test code more cleaner (#55888)
2fc1cfc0ba9 is described below

commit 2fc1cfc0ba9ecceeb0afe21d894ea9e8d1a0adad
Author: Yang Yule <[email protected]>
AuthorDate: Tue Oct 14 01:03:31 2025 +0800

    Make serializers test code more cleaner (#55888)
    
    * Make serializers test code more cleaner
    
    * Chage to parameterize test
    
    * Add pyparam id
---
 .../serialization/serializers/test_serializers.py  | 148 ++++++++-------------
 1 file changed, 57 insertions(+), 91 deletions(-)

diff --git 
a/airflow-core/tests/unit/serialization/serializers/test_serializers.py 
b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
index 3f753150b38..deabcf0f4f1 100644
--- a/airflow-core/tests/unit/serialization/serializers/test_serializers.py
+++ b/airflow-core/tests/unit/serialization/serializers/test_serializers.py
@@ -70,101 +70,67 @@ class FooBarModel(BaseModel):
 
 @skip_if_force_lowest_dependencies_marker
 class TestSerializers:
-    def test_datetime(self):
-        i = datetime.datetime(2022, 7, 10, 22, 10, 43, microsecond=0, 
tzinfo=pendulum.tz.UTC)
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = DateTime(2022, 7, 10, tzinfo=pendulum.tz.UTC)
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = datetime.date(2022, 7, 10)
-        s = serialize(i)
-        d = deserialize(s)
-        assert i == d
-
-        i = datetime.timedelta(days=320)
-        s = serialize(i)
-        d = deserialize(s)
-        assert i == d
-
-        i = datetime.datetime(
-            2022, 7, 10, 22, 10, 43, microsecond=0, 
tzinfo=pendulum.timezone("America/New_York")
-        )
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = DateTime(2022, 7, 10, tzinfo=pendulum.timezone("America/New_York"))
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = DateTime(2022, 7, 10, tzinfo=tzutc())
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = DateTime(2022, 7, 10, tzinfo=ZoneInfo("Europe/Paris"))
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-        i = datetime.datetime.now()
-        s = serialize(i)
-        d = deserialize(s)
-        assert i.timestamp() == d.timestamp()
-
-    def test_deserialize_datetime_v1(self):
-        s = {
+    @pytest.mark.parametrize(
+        "input_obj",
+        [
+            pytest.param(
+                datetime.datetime(2022, 7, 10, 22, 10, 43, microsecond=0, 
tzinfo=pendulum.tz.UTC),
+                id="datetime_utc",
+            ),
+            pytest.param(DateTime(2022, 7, 10, tzinfo=pendulum.tz.UTC), 
id="pendulum_datetime_utc"),
+            pytest.param(datetime.date(2022, 7, 10), id="date"),
+            pytest.param(datetime.timedelta(days=320), id="timedelta"),
+            pytest.param(
+                datetime.datetime(
+                    2022, 7, 10, 22, 10, 43, microsecond=0, 
tzinfo=pendulum.timezone("America/New_York")
+                ),
+                id="datetime_ny_tz",
+            ),
+            pytest.param(
+                DateTime(2022, 7, 10, 
tzinfo=pendulum.timezone("America/New_York")),
+                id="pendulum_datetime_ny_tz",
+            ),
+            pytest.param(DateTime(2022, 7, 10, tzinfo=tzutc()), 
id="datetime_tzutc"),
+            pytest.param(DateTime(2022, 7, 10, 
tzinfo=ZoneInfo("Europe/Paris")), id="datetime_zoneinfo"),
+            pytest.param(datetime.datetime.now(), id="datetime_now"),
+        ],
+    )
+    def test_datetime(self, input_obj):
+        """Test serialization and deserialization of various datetime-related 
objects."""
+        serialized_obj = serialize(input_obj)
+        deserialized_obj = deserialize(serialized_obj)
+        if isinstance(input_obj, (datetime.date, datetime.timedelta)):
+            assert input_obj == deserialized_obj
+        else:
+            assert input_obj.timestamp() == deserialized_obj.timestamp()
+
+    @pytest.mark.parametrize(
+        "tz_input, expected_tz_name",
+        [
+            pytest.param("UTC", "UTC", id="utc"),
+            pytest.param("Europe/Paris", "Europe/Paris", id="europe_paris"),
+            pytest.param("America/New_York", "America/New_York", 
id="america_new_york"),
+            pytest.param("EDT", "-04:00", id="edt_ambiguous"),
+            pytest.param("CDT", "-05:00", id="cdt_ambiguous"),
+            pytest.param("MDT", "-06:00", id="mdt_ambiguous"),
+            pytest.param("PDT", "-07:00", id="pdt_ambiguous"),
+        ],
+    )
+    def test_deserialize_datetime_v1(self, tz_input, expected_tz_name):
+        """Test deserialization of datetime objects from version 1 format."""
+        serialized_data = {
             "__classname__": "pendulum.datetime.DateTime",
             "__version__": 1,
             "__data__": {"timestamp": 1657505443.0, "tz": "UTC"},
         }
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "UTC"
-
-        s["__data__"]["tz"] = "Europe/Paris"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "Europe/Paris"
-
-        s["__data__"]["tz"] = "America/New_York"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "America/New_York"
-
-        s["__data__"]["tz"] = "EDT"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "-04:00"
-        # assert that it's serializable with the new format
-        assert deserialize(serialize(d)) == d
-
-        s["__data__"]["tz"] = "CDT"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "-05:00"
-        # assert that it's serializable with the new format
-        assert deserialize(serialize(d)) == d
-
-        s["__data__"]["tz"] = "MDT"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "-06:00"
-        # assert that it's serializable with the new format
-        assert deserialize(serialize(d)) == d
-
-        s["__data__"]["tz"] = "PDT"
-        d = deserialize(s)
-        assert d.timestamp() == 1657505443.0
-        assert d.tzinfo.name == "-07:00"
-        # assert that it's serializable with the new format
-        assert deserialize(serialize(d)) == d
+
+        serialized_data["__data__"]["tz"] = tz_input
+        deserialized_dt = deserialize(serialized_data)
+        assert deserialized_dt.timestamp() == 1657505443.0
+        assert deserialized_dt.tzinfo.name == expected_tz_name
+        # Assert that it's serializable with the new format for ambiguous 
timezones
+        if tz_input in ["EDT", "CDT", "MDT", "PDT"]:
+            assert deserialize(serialize(deserialized_dt)) == deserialized_dt
 
     @pytest.mark.parametrize(
         "expr, expected",

Reply via email to