"""Tests for desktop system tray — TDD: tests before implementation.""" import pytest from unittest.mock import patch from i2p_apps.desktop.tray import TrayConfig, TrayMenu, MenuItem class TestTrayConfig: def test_defaults(self): cfg = TrayConfig() assert cfg.console_url == "http://127.0.0.1:7657" assert cfg.tooltip == "I2P Router" def test_custom(self): cfg = TrayConfig(console_url="http://localhost:8080", tooltip="My I2P") assert cfg.console_url == "http://localhost:8080" assert cfg.tooltip == "My I2P" class TestMenuItem: def test_creation(self): item = MenuItem(label="Open Console", action="open_console") assert item.label == "Open Console" assert item.action == "open_console" def test_separator(self): item = MenuItem.separator() assert item.is_separator is True def test_not_separator(self): item = MenuItem(label="Quit", action="quit") assert item.is_separator is False class TestTrayMenu: def test_default_items(self): menu = TrayMenu() labels = [item.label for item in menu.items if not item.is_separator] assert "Open Console" in labels assert "Restart" in labels assert any("Shutdown" in l for l in labels) def test_item_count(self): menu = TrayMenu() assert len(menu.items) >= 3 def test_custom_items(self): items = [ MenuItem(label="Custom", action="custom"), MenuItem(label="Quit", action="quit"), ] menu = TrayMenu(items=items) assert len(menu.items) == 2 def test_status_text(self): menu = TrayMenu() status = menu.status_text("running", 5) assert "running" in status.lower() or "Running" in status assert "5" in status