From 25f901a963001377621abe0ac0a1ff121a042bcd Mon Sep 17 00:00:00 2001 From: Brent Bovenzi Date: Sat, 27 Apr 2024 12:21:24 -0400 Subject: [PATCH] Copy menu_item href for nav bar (#39282) Co-authored-by: Jed Cunningham --- airflow/auth/managers/base_auth_manager.py | 10 ++++------ tests/auth/managers/test_base_auth_manager.py | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/airflow/auth/managers/base_auth_manager.py b/airflow/auth/managers/base_auth_manager.py index 44fc53a66e50f..86f0ebd6dc254 100644 --- a/airflow/auth/managers/base_auth_manager.py +++ b/airflow/auth/managers/base_auth_manager.py @@ -398,12 +398,10 @@ def filter_permitted_menu_items(self, menu_items: list[MenuItem]) -> list[MenuIt accessible_items = [] for menu_item in items: menu_item_copy = MenuItem( - name=menu_item.name, - icon=menu_item.icon, - label=menu_item.label, - childs=[], - baseview=menu_item.baseview, - cond=menu_item.cond, + **{ + **menu_item.__dict__, + "childs": [], + } ) if menu_item.childs: accessible_children = [] diff --git a/tests/auth/managers/test_base_auth_manager.py b/tests/auth/managers/test_base_auth_manager.py index a39b60787cead..7628924ad688f 100644 --- a/tests/auth/managers/test_base_auth_manager.py +++ b/tests/auth/managers/test_base_auth_manager.py @@ -300,7 +300,15 @@ def test_filter_permitted_menu_items(self, mock_security_manager, auth_manager): mock_security_manager.has_access.side_effect = [True, False, True, True, False] menu = Menu() - menu.add_link("item1") + menu.add_link( + # These may not all be valid types, but it does let us check each attr is copied + name="item1", + href="h1", + icon="i1", + label="l1", + baseview="b1", + cond="c1", + ) menu.add_link("item2") menu.add_link("item3") menu.add_link("item3.1", category="item3") @@ -313,6 +321,12 @@ def test_filter_permitted_menu_items(self, mock_security_manager, auth_manager): assert result[1].name == "item3" assert len(result[1].childs) == 1 assert result[1].childs[0].name == "item3.1" + # check we've copied every attr + assert result[0].href == "h1" + assert result[0].icon == "i1" + assert result[0].label == "l1" + assert result[0].baseview == "b1" + assert result[0].cond == "c1" @patch.object(EmptyAuthManager, "security_manager") def test_filter_permitted_menu_items_twice(self, mock_security_manager, auth_manager):