71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
import subprocess
|
|
import json
|
|
import pytest
|
|
|
|
|
|
def get_message_content(stdout):
|
|
for line in stdout.splitlines():
|
|
line = line.strip()
|
|
if not line:
|
|
continue
|
|
try:
|
|
obj = json.loads(line)
|
|
if isinstance(obj, dict) and obj.get('type') == 'message':
|
|
return obj.get('content', '')
|
|
except json.JSONDecodeError:
|
|
continue
|
|
return ''
|
|
|
|
|
|
def run_mock(prompt):
|
|
return subprocess.run(
|
|
['uv', 'run', 'python', 'tests/mock_gemini_cli.py'],
|
|
input=prompt,
|
|
capture_output=True,
|
|
text=True,
|
|
cwd='.'
|
|
)
|
|
|
|
|
|
def test_epic_prompt_returns_track_json():
|
|
result = run_mock('PATH: Epic Initialization — please produce tracks')
|
|
assert result.returncode == 0
|
|
assert 'function_call' not in result.stdout
|
|
content = get_message_content(result.stdout)
|
|
parsed = json.loads(content)
|
|
assert isinstance(parsed, list)
|
|
assert len(parsed) > 0
|
|
for item in parsed:
|
|
assert 'id' in item
|
|
assert 'title' in item
|
|
|
|
|
|
def test_sprint_prompt_returns_ticket_json():
|
|
result = run_mock('Please generate the implementation tickets for this track.')
|
|
assert result.returncode == 0
|
|
assert 'function_call' not in result.stdout
|
|
content = get_message_content(result.stdout)
|
|
parsed = json.loads(content)
|
|
assert isinstance(parsed, list)
|
|
assert len(parsed) > 0
|
|
for item in parsed:
|
|
assert 'id' in item
|
|
assert 'description' in item
|
|
assert 'status' in item
|
|
assert 'assigned_to' in item
|
|
|
|
|
|
def test_worker_prompt_returns_plain_text():
|
|
result = run_mock('Please read test.txt\nYou are assigned to Ticket T1.\nTask Description: do something')
|
|
assert result.returncode == 0
|
|
assert 'function_call' not in result.stdout
|
|
content = get_message_content(result.stdout)
|
|
assert content != ''
|
|
|
|
|
|
def test_tool_result_prompt_returns_plain_text():
|
|
result = run_mock('role: tool\nHere are the results: {"content": "done"}')
|
|
assert result.returncode == 0
|
|
content = get_message_content(result.stdout)
|
|
assert content != ''
|