Improve error handling in entry edit mode and update sudo request tests for clarity and accuracy
This commit is contained in:
		
							parent
							
								
									0041ded402
								
							
						
					
					
						commit
						8b8c02c6da
					
				
					 3 changed files with 30 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -402,8 +402,12 @@ class HostsManagerApp(App):
 | 
			
		|||
 | 
			
		||||
    def watch_entry_edit_mode(self, entry_edit_mode: bool) -> None:
 | 
			
		||||
        """Update the right pane border title when entry edit mode changes."""
 | 
			
		||||
        try:
 | 
			
		||||
            right_pane = self.query_one(".right-pane")
 | 
			
		||||
            if entry_edit_mode:
 | 
			
		||||
                right_pane.border_title = "Edit Entry"
 | 
			
		||||
            else:
 | 
			
		||||
                right_pane.border_title = "Entry Details"
 | 
			
		||||
        except Exception:
 | 
			
		||||
            # App not fully initialized yet, ignore
 | 
			
		||||
            pass
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,14 +44,14 @@ class TestPermissionManager:
 | 
			
		|||
    @patch("subprocess.run")
 | 
			
		||||
    def test_request_sudo_prompt_success(self, mock_run):
 | 
			
		||||
        """Test requesting sudo with password prompt success."""
 | 
			
		||||
        # First call (sudo -n true) fails, second call (sudo -v) succeeds
 | 
			
		||||
        # First call (sudo -n true) fails, second call (sudo -S -v) succeeds
 | 
			
		||||
        mock_run.side_effect = [
 | 
			
		||||
            Mock(returncode=1),  # sudo -n true fails
 | 
			
		||||
            Mock(returncode=0),  # sudo -v succeeds
 | 
			
		||||
            Mock(returncode=0),  # sudo -S -v succeeds
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        pm = PermissionManager()
 | 
			
		||||
        success, message = pm.request_sudo()
 | 
			
		||||
        success, message = pm.request_sudo("testpassword")
 | 
			
		||||
 | 
			
		||||
        assert success
 | 
			
		||||
        assert "access granted" in message
 | 
			
		||||
| 
						 | 
				
			
			@ -60,17 +60,31 @@ class TestPermissionManager:
 | 
			
		|||
 | 
			
		||||
        assert mock_run.call_count == 2
 | 
			
		||||
 | 
			
		||||
    @patch("subprocess.run")
 | 
			
		||||
    def test_request_sudo_no_password(self, mock_run):
 | 
			
		||||
        """Test requesting sudo when no password is provided."""
 | 
			
		||||
        # sudo -n true fails (password needed)
 | 
			
		||||
        mock_run.return_value = Mock(returncode=1)
 | 
			
		||||
 | 
			
		||||
        pm = PermissionManager()
 | 
			
		||||
        success, message = pm.request_sudo()
 | 
			
		||||
 | 
			
		||||
        assert not success
 | 
			
		||||
        assert "Password required" in message
 | 
			
		||||
        assert not pm.has_sudo
 | 
			
		||||
        assert not pm._sudo_validated
 | 
			
		||||
 | 
			
		||||
    @patch("subprocess.run")
 | 
			
		||||
    def test_request_sudo_denied(self, mock_run):
 | 
			
		||||
        """Test requesting sudo when access is denied."""
 | 
			
		||||
        # Both calls fail
 | 
			
		||||
        mock_run.side_effect = [
 | 
			
		||||
            Mock(returncode=1),  # sudo -n true fails
 | 
			
		||||
            Mock(returncode=1),  # sudo -v fails
 | 
			
		||||
            Mock(returncode=1, stderr="access denied"),  # sudo -S -v fails
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        pm = PermissionManager()
 | 
			
		||||
        success, message = pm.request_sudo()
 | 
			
		||||
        success, message = pm.request_sudo("testpassword")
 | 
			
		||||
 | 
			
		||||
        assert not success
 | 
			
		||||
        assert "denied" in message
 | 
			
		||||
| 
						 | 
				
			
			@ -234,7 +248,7 @@ class TestHostsManager:
 | 
			
		|||
            success, message = manager.enter_edit_mode()
 | 
			
		||||
 | 
			
		||||
            assert not success
 | 
			
		||||
            assert "Cannot enter edit mode" in message
 | 
			
		||||
            assert message == "Denied"
 | 
			
		||||
            assert not manager.edit_mode
 | 
			
		||||
 | 
			
		||||
    def test_enter_edit_mode_permission_validation_failure(self):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue