"""Unit tests for Planner left-nav helpers.""" from __future__ import annotations from unittest.mock import MagicMock from selenium.webdriver.common.by import By from onedrive_planner import ( _left_nav_pane_collapsed, _my_plans_nav_visible, ) def _nav_toggle(*, expanded: str = "false", displayed: bool = True): btn = MagicMock() btn.is_displayed.return_value = displayed btn.get_attribute.side_effect = lambda name: expanded if name == "aria-expanded" else "" return btn def _nav_link(*, displayed: bool = True, enabled: bool = True): el = MagicMock() el.is_displayed.return_value = displayed el.is_enabled.return_value = enabled return el def _mock_driver(*, elements: dict): drv = MagicMock() drv.find_elements.side_effect = lambda by, sel: elements.get((by, sel), []) return drv class TestNavHelpers: def test_collapsed_when_aria_expanded_false(self): drv = _mock_driver( elements={ (By.XPATH, "//button[@aria-label='Left navigation pane']"): [ _nav_toggle(expanded="false") ], } ) assert _left_nav_pane_collapsed(drv) def test_not_collapsed_when_aria_expanded_true(self): drv = _mock_driver( elements={ (By.XPATH, "//button[@aria-label='Left navigation pane']"): [ _nav_toggle(expanded="true") ], } ) assert not _left_nav_pane_collapsed(drv) def test_my_plans_visible(self): drv = _mock_driver( elements={ ( By.XPATH, "//*[self::span or self::div][normalize-space()='My plans']", ): [_nav_link()], } ) assert _my_plans_nav_visible(drv) def test_my_plans_hidden(self): drv = _mock_driver(elements={}) assert not _my_plans_nav_visible(drv)