Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
"""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)
|