"""Tests for system tray data classes and menu configuration.""" import pytest from i2p_apps.desktop.tray import MenuItem, TrayConfig, TrayMenu class TestTrayConfig: def test_defaults(self): c = TrayConfig() assert c.console_url == "http://127.0.0.1:7657" assert c.tooltip == "I2P Router" def test_custom(self): c = TrayConfig(console_url="http://localhost:9999", tooltip="Test") assert c.console_url == "http://localhost:9999" assert c.tooltip == "Test" class TestMenuItem: def test_creation(self): mi = MenuItem(label="Open Console", action="open_console") assert mi.label == "Open Console" assert mi.action == "open_console" assert mi.is_separator is False def test_separator(self): sep = MenuItem.separator() assert sep.is_separator is True assert sep.label == "" assert sep.action == "" def test_defaults(self): mi = MenuItem() assert mi.label == "" assert mi.action == "" assert mi.is_separator is False class TestTrayMenu: def test_default_items(self): menu = TrayMenu() assert len(menu.items) > 0 # First item should be Open Console assert menu.items[0].action == "open_console" # Should contain separators seps = [i for i in menu.items if i.is_separator] assert len(seps) >= 2 def test_custom_items(self): items = [ MenuItem(label="Test", action="test"), MenuItem.separator(), ] menu = TrayMenu(items=items) assert len(menu.items) == 2 def test_status_text(self): text = TrayMenu.status_text("running", 42) assert "Running" in text assert "42" in text def test_status_text_different_states(self): text = TrayMenu.status_text("starting", 0) assert "Starting" in text assert "0" in text def test_default_items_actions(self): menu = TrayMenu() actions = [i.action for i in menu.items if not i.is_separator] assert "open_console" in actions assert "restart" in actions assert "shutdown_graceful" in actions assert "shutdown" in actions assert "cancel_shutdown" in actions