Add cockpit question passing tests

New tests verify:
- DockerTmuxAdapter inherits from TmuxCLIController (architecture)
- DockerTmuxController backward compatibility alias works
- extract_response correctly parses tmux output
- extract_response detects questions ending with ?
- Question detection logic identifies questions correctly
- load_state returns proper default state
- Cockpit state tracks awaiting_response flag

53 tests total, all passing.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
admin
2026-01-14 11:14:23 -03:00
parent d163666599
commit fde9f1e7c9

View File

@@ -422,6 +422,113 @@ test_cockpit_container_exists()
test_cockpit_container_name() test_cockpit_container_name()
# =============================================================================
# Cockpit Question Passing Tests
# =============================================================================
print("\n### Cockpit Question Passing Tests ###")
@test("DockerTmuxAdapter inherits from TmuxCLIController")
def test_cockpit_adapter_inheritance():
from cockpit import DockerTmuxAdapter
from claude_code_tools.tmux_cli_controller import TmuxCLIController
assert issubclass(DockerTmuxAdapter, TmuxCLIController)
@test("DockerTmuxController alias works")
def test_cockpit_alias():
from cockpit import DockerTmuxAdapter, DockerTmuxController
assert DockerTmuxController is DockerTmuxAdapter
@test("DockerTmuxAdapter.extract_response parses output correctly")
def test_cockpit_extract_response():
from cockpit import DockerTmuxAdapter
adapter = DockerTmuxAdapter('test-container')
# Simulated tmux output
output = '''root@host:/workspace# echo 'test' | claude --print -p
This is Claude's response.
It has multiple lines.
root@host:/workspace#'''
response = adapter.extract_response(output, command_marker="claude --print")
assert "This is Claude's response" in response
assert "multiple lines" in response
# Should not include shell prompts
assert "root@host" not in response
@test("DockerTmuxAdapter.extract_response detects questions")
def test_cockpit_extract_response_question():
from cockpit import DockerTmuxAdapter
adapter = DockerTmuxAdapter('test-container')
output = '''root@host:/workspace# echo 'task' | claude --print -p
I understand. Before I proceed, what authentication method would you prefer?
root@host:/workspace#'''
response = adapter.extract_response(output, command_marker="claude --print")
# Response should contain the question
assert "what authentication method" in response
# Verify it ends with ?
lines = [l.strip() for l in response.split('\n') if l.strip()]
assert lines[-1].endswith('?')
@test("Question detection identifies questions correctly")
def test_cockpit_question_detection():
# Test the question detection logic used in cockpit
test_cases = [
("What file should I modify?", True),
("I completed the task.", False),
("Should I proceed with the changes?", True),
("Done.", False),
("Which approach do you prefer?", True),
("Task finished successfully", False),
]
for text, expected in test_cases:
is_question = text.strip().endswith('?')
assert is_question == expected, f"Failed for: {text}"
@test("load_state returns default state for new project")
def test_cockpit_load_state_default():
from cockpit import load_state
# Use a project name that won't exist
state = load_state('nonexistent-test-project-xyz')
assert state['awaiting_response'] == False
assert state['last_question'] is None
assert state['status'] == 'not_started'
@test("Cockpit state tracks awaiting_response flag")
def test_cockpit_awaiting_response_tracking():
import json
import tempfile
from pathlib import Path
# Create a mock state to verify structure
mock_state = {
"project": "test",
"session_id": "test-uuid",
"status": "running",
"session_started": True,
"awaiting_response": True,
"last_question": "What should I do next?",
"last_output": "Previous output"
}
# Verify all required fields exist
assert 'awaiting_response' in mock_state
assert 'last_question' in mock_state
assert mock_state['awaiting_response'] == True
assert mock_state['last_question'].endswith('?')
test_cockpit_adapter_inheritance()
test_cockpit_alias()
test_cockpit_extract_response()
test_cockpit_extract_response_question()
test_cockpit_question_detection()
test_cockpit_load_state_default()
test_cockpit_awaiting_response_tracking()
# ============================================================================= # =============================================================================
# KG Lookup Tests # KG Lookup Tests
# ============================================================================= # =============================================================================