From e597a95495bc46895a5671a35b6fb0b922f8658b Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Tue, 12 Aug 2025 11:30:46 +0530 Subject: [PATCH 1/3] To fix Fab auth manager returns get_id of integer type where str is expected #54298 --- .../src/airflow/providers/fab/auth_manager/models/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py b/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py index cb6f59f6ad576..dd895e1c0b736 100644 --- a/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py +++ b/providers/fab/src/airflow/providers/fab/auth_manager/models/__init__.py @@ -288,8 +288,8 @@ def perms(self): } return self._perms - def get_id(self): - return self.id + def get_id(self) -> str: + return str(self.id) def get_name(self) -> str: return self.username or self.email or self.user_id From 8eab2851de11bb68c733d90c37ad8052836ddbfe Mon Sep 17 00:00:00 2001 From: Abhishek Tiwari Date: Thu, 14 Aug 2025 14:16:04 +0530 Subject: [PATCH 2/3] Added relevant test --- .../auth_manager/models/test_user_model.py | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py diff --git a/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py b/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py new file mode 100644 index 0000000000000..b0854327545dc --- /dev/null +++ b/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py @@ -0,0 +1,51 @@ +# 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. +from __future__ import annotations + +import pytest + +pytestmark = pytest.mark.db_test + +try: + from airflow.providers.fab.auth_manager.models import User + + class TestUserModelGetId: + def test_get_id_returns_str_for_int_id(self, session): + """ + To ensure get_id() always returns a string. + This is required because return type str is expected. + """ + user = User() + user.id = 999 + result = user.get_id() + + assert isinstance(result, str), f"Expected str, got {type(result)}" + assert result == "999" + + def test_get_id_returns_str_for_str_id(self, session): + """ + If the user id is a string, get_id() should return it without any modification. + """ + user = User() + user.id = "999" + result = user.get_id() + + assert isinstance(result, str) + assert result == "999" + +except ModuleNotFoundError: + pass From 22cb68b4169afff79a7c1e825e0b2b2c5d337f23 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Tue, 26 Aug 2025 10:49:47 +0800 Subject: [PATCH 3/3] test(fab): refactor user_model test --- .../auth_manager/models/test_user_model.py | 46 ++++++++----------- 1 file changed, 18 insertions(+), 28 deletions(-) diff --git a/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py b/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py index b0854327545dc..051e39cd0530d 100644 --- a/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py +++ b/providers/fab/tests/unit/fab/auth_manager/models/test_user_model.py @@ -18,34 +18,24 @@ import pytest -pytestmark = pytest.mark.db_test - -try: - from airflow.providers.fab.auth_manager.models import User - - class TestUserModelGetId: - def test_get_id_returns_str_for_int_id(self, session): - """ - To ensure get_id() always returns a string. - This is required because return type str is expected. - """ - user = User() - user.id = 999 - result = user.get_id() +from airflow.providers.fab.auth_manager.models import User - assert isinstance(result, str), f"Expected str, got {type(result)}" - assert result == "999" - - def test_get_id_returns_str_for_str_id(self, session): - """ - If the user id is a string, get_id() should return it without any modification. - """ - user = User() - user.id = "999" - result = user.get_id() +pytestmark = pytest.mark.db_test - assert isinstance(result, str) - assert result == "999" -except ModuleNotFoundError: - pass +@pytest.mark.parametrize( + "user_id, expected_id", + [ + (999, "999"), + ("999", "999"), + ], +) +def test_get_id_returns_str(user_id: int | str, expected_id: str) -> None: + """ + Ensure get_id() always returns a string representation of the id. + """ + user = User() + user.id = user_id + result = user.get_id() + assert isinstance(result, str), f"Expected str, got {type(result)}" + assert result == expected_id