Remove obsolete test scripts for DataTable details, status overlay, status positioning, status display, and status visibility
This commit is contained in:
		
							parent
							
								
									25001042e5
								
							
						
					
					
						commit
						48e8e1c67c
					
				
					 5 changed files with 0 additions and 300 deletions
				
			
		| 
						 | 
					@ -1,84 +0,0 @@
 | 
				
			||||||
#!/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()
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,56 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
Test script to verify the status bar overlay behavior.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import asyncio
 | 
					 | 
				
			||||||
from unittest.mock import patch, Mock
 | 
					 | 
				
			||||||
from src.hosts.tui.app import HostsManagerApp
 | 
					 | 
				
			||||||
from src.hosts.core.models import HostsFile, HostEntry
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def test_status_overlay():
 | 
					 | 
				
			||||||
    """Test that the status bar appears as an overlay without affecting layout."""
 | 
					 | 
				
			||||||
    print("Testing status bar overlay behavior...")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    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"], 
 | 
					 | 
				
			||||||
            is_active=True
 | 
					 | 
				
			||||||
        ))
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test status update with error message
 | 
					 | 
				
			||||||
        app.update_status("❌ Test error message")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("✓ Error message should appear as overlay")
 | 
					 | 
				
			||||||
        print("✓ Panes should not shift down when message appears")
 | 
					 | 
				
			||||||
        print("✓ Status bar positioned with dock: top, layer: overlay, offset: 3 0")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test clearing message
 | 
					 | 
				
			||||||
        app._clear_status_message()
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("✓ Message clears and status bar becomes hidden")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("\n✅ Status bar overlay test completed!")
 | 
					 | 
				
			||||||
        print("\n📋 CSS Implementation:")
 | 
					 | 
				
			||||||
        print("  - dock: top - positions at top of screen")
 | 
					 | 
				
			||||||
        print("  - layer: overlay - renders above other content")
 | 
					 | 
				
			||||||
        print("  - offset: 3 0 - positioned 3 lines down from top (below header)")
 | 
					 | 
				
			||||||
        print("  - No layout flow impact - content stays in same position")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    asyncio.run(test_status_overlay())
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,41 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
Test the status bar positioning by directly updating the app.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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_status_positioning():
 | 
					 | 
				
			||||||
    """Test status bar positioning."""
 | 
					 | 
				
			||||||
    print("Creating app instance and triggering error message...")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    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_parser_cls.return_value = mock_parser
 | 
					 | 
				
			||||||
        mock_config_cls.return_value = mock_config
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Create app
 | 
					 | 
				
			||||||
        app = HostsManagerApp()
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test that CSS is correct for positioning below header
 | 
					 | 
				
			||||||
        print("✅ Status bar CSS updated:")
 | 
					 | 
				
			||||||
        print("   - layer: overlay (renders above content)")
 | 
					 | 
				
			||||||
        print("   - offset: 3 0 (positioned 3 lines from top)")
 | 
					 | 
				
			||||||
        print("   - content-align: center middle (properly centered)")
 | 
					 | 
				
			||||||
        print("   - Should appear below header without shifting content")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("\n🎯 Positioning should now be:")
 | 
					 | 
				
			||||||
        print("   Line 1: Header title area")
 | 
					 | 
				
			||||||
        print("   Line 2: Header subtitle area") 
 | 
					 | 
				
			||||||
        print("   Line 3: Status bar overlay (when visible)")
 | 
					 | 
				
			||||||
        print("   Line 4+: Main content panes")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    test_status_positioning()
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,60 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
Quick test script to verify the new status display 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_status_display():
 | 
					 | 
				
			||||||
    """Test the new status display functionality."""
 | 
					 | 
				
			||||||
    print("Testing new status 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_parser_cls.return_value = mock_parser
 | 
					 | 
				
			||||||
        mock_config_cls.return_value = mock_config
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Create app
 | 
					 | 
				
			||||||
        app = HostsManagerApp()
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test title
 | 
					 | 
				
			||||||
        print(f"✓ Title: '{app.title}' (should be '/etc/hosts Manager')")
 | 
					 | 
				
			||||||
        assert app.title == "/etc/hosts Manager"
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Add some test entries
 | 
					 | 
				
			||||||
        app.hosts_file = HostsFile()
 | 
					 | 
				
			||||||
        app.hosts_file.add_entry(HostEntry(ip_address="127.0.0.1", hostnames=["localhost"]))
 | 
					 | 
				
			||||||
        app.hosts_file.add_entry(HostEntry(ip_address="192.168.1.1", hostnames=["router"]))
 | 
					 | 
				
			||||||
        app.hosts_file.add_entry(HostEntry(ip_address="10.0.0.1", hostnames=["server"], is_active=False))
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test normal status update
 | 
					 | 
				
			||||||
        app.update_status()
 | 
					 | 
				
			||||||
        expected_subtitle = "3 entries (2 active) | Read-only mode"
 | 
					 | 
				
			||||||
        print(f"✓ Subtitle: '{app.sub_title}' (should be '{expected_subtitle}')")
 | 
					 | 
				
			||||||
        assert app.sub_title == expected_subtitle
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test edit mode
 | 
					 | 
				
			||||||
        app.edit_mode = True
 | 
					 | 
				
			||||||
        app.update_status()
 | 
					 | 
				
			||||||
        expected_subtitle = "3 entries (2 active) | Edit mode"
 | 
					 | 
				
			||||||
        print(f"✓ Edit mode subtitle: '{app.sub_title}' (should be '{expected_subtitle}')")
 | 
					 | 
				
			||||||
        assert app.sub_title == expected_subtitle
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("\n✅ All status display tests passed!")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test error message handling (would go to status bar)
 | 
					 | 
				
			||||||
        print("\n📋 Status bar functionality:")
 | 
					 | 
				
			||||||
        print("  - Error messages now appear in a status bar below the header")
 | 
					 | 
				
			||||||
        print("  - Status bar is hidden by default and only shows when there are messages")
 | 
					 | 
				
			||||||
        print("  - Messages auto-clear after 3-5 seconds")
 | 
					 | 
				
			||||||
        print("  - Header subtitle always shows: 'X entries (Y active) | Mode'")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    test_status_display()
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,59 +0,0 @@
 | 
				
			||||||
#!/usr/bin/env python3
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
Test status bar visibility by triggering an error message manually.
 | 
					 | 
				
			||||||
"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import asyncio
 | 
					 | 
				
			||||||
from unittest.mock import patch, Mock
 | 
					 | 
				
			||||||
from src.hosts.tui.app import HostsManagerApp
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
async def test_status_bar_visibility():
 | 
					 | 
				
			||||||
    """Test that the status bar becomes visible when an error occurs."""
 | 
					 | 
				
			||||||
    print("Testing status bar visibility...")
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    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_parser_cls.return_value = mock_parser
 | 
					 | 
				
			||||||
        mock_config_cls.return_value = mock_config
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Create app
 | 
					 | 
				
			||||||
        app = HostsManagerApp()
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Mock the query_one method to capture status bar interactions
 | 
					 | 
				
			||||||
        mock_status_bar = Mock()
 | 
					 | 
				
			||||||
        original_query_one = app.query_one
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        def mock_query_one(selector, widget_type=None):
 | 
					 | 
				
			||||||
            if selector == "#status-bar":
 | 
					 | 
				
			||||||
                return mock_status_bar
 | 
					 | 
				
			||||||
            return original_query_one(selector, widget_type)
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        app.query_one = mock_query_one
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test updating status with error message
 | 
					 | 
				
			||||||
        print("🔧 Triggering error message...")
 | 
					 | 
				
			||||||
        app.update_status("❌ Test error message")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Verify status bar operations
 | 
					 | 
				
			||||||
        print("✅ Status bar operations:")
 | 
					 | 
				
			||||||
        print(f"   - update() called: {mock_status_bar.update.called}")
 | 
					 | 
				
			||||||
        print(f"   - remove_class('hidden') called: {mock_status_bar.remove_class.called}")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        if mock_status_bar.update.called:
 | 
					 | 
				
			||||||
            call_args = mock_status_bar.update.call_args[0]
 | 
					 | 
				
			||||||
            print(f"   - Message passed: '{call_args[0]}'")
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # Test clearing status
 | 
					 | 
				
			||||||
        print("\n🔧 Clearing status message...")
 | 
					 | 
				
			||||||
        app._clear_status_message()
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        print("✅ Clear operations:")
 | 
					 | 
				
			||||||
        print(f"   - update('') called: {mock_status_bar.update.call_count > 1}")
 | 
					 | 
				
			||||||
        print(f"   - add_class('hidden') called: {mock_status_bar.add_class.called}")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
    asyncio.run(test_status_bar_visibility())
 | 
					 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue