hosts/test_datatable.py
phg 25001042e5 Enhance status display and entry details in HostsManagerApp
- Updated header title to "/etc/hosts Manager" and modified subtitle format.
- Implemented a dedicated overlay status bar for error messages, ensuring no layout shifts.
- Refactored entry details display to use DataTable with labeled rows for improved consistency.
- Added CSS styles for the new status bar and DataTable.
- Created tests for status bar visibility and DataTable functionality, ensuring all tests pass.
2025-07-31 09:47:09 +02:00

84 lines
3 KiB
Python

#!/usr/bin/env python3
"""
Quick test script to verify the new DataTable details functionality.
"""
import sys
from unittest.mock import patch, Mock
from src.hosts.tui.app import HostsManagerApp
from src.hosts.core.models import HostsFile, HostEntry
def test_datatable_details():
"""Test the new DataTable details functionality."""
print("Testing new DataTable details display...")
with patch('hosts.tui.app.HostsParser') as mock_parser_cls, \
patch('hosts.tui.app.Config') as mock_config_cls:
# Set up mocks
mock_parser = Mock()
mock_config = Mock()
mock_config.should_show_default_entries.return_value = True
mock_parser_cls.return_value = mock_parser
mock_config_cls.return_value = mock_config
# Create app
app = HostsManagerApp()
# Add test entries
app.hosts_file = HostsFile()
app.hosts_file.add_entry(HostEntry(
ip_address="127.0.0.1",
hostnames=["localhost"],
comment="Local machine",
is_active=True
))
app.hosts_file.add_entry(HostEntry(
ip_address="192.168.1.1",
hostnames=["router", "gateway"],
comment="Network router",
is_active=False
))
app.selected_entry_index = 0
# Test the details handler logic (without UI)
entry = app.hosts_file.entries[0]
# Verify entry details are in correct order (same as edit form)
expected_order = [
("IP Address", entry.ip_address),
("Hostnames", ", ".join(entry.hostnames)),
("Comment", entry.comment or ""),
("Active", "Yes" if entry.is_active else "No")
]
print("✓ Entry details order matches edit form:")
for field, value in expected_order:
print(f" - {field}: {value}")
# Test second entry
app.selected_entry_index = 1
entry2 = app.hosts_file.entries[1]
expected_order_2 = [
("IP Address", entry2.ip_address),
("Hostnames", ", ".join(entry2.hostnames)),
("Comment", entry2.comment or ""),
("Active", "Yes" if entry2.is_active else "No")
]
print("\n✓ Second entry details:")
for field, value in expected_order_2:
print(f" - {field}: {value}")
print("\n✅ DataTable details functionality verified!")
print("\n📋 Implementation details:")
print(" - Entry details now shown in DataTable with labeled rows")
print(" - Field order matches edit form: IP Address, Hostnames, Comment, Active")
print(" - DataTable uses show_header=False for clean appearance")
print(" - DNS Name shown when present (read-only field)")
print(" - System default entry warnings displayed in table format")
if __name__ == "__main__":
test_datatable_details()