mcp-adb/tests/test_models.py
Ryan Malloy fb297f7937 Add pytest suite (216 tests) and fix UI/notification parser bugs
Test infrastructure with conftest fixtures mocking run_shell_args/run_adb
for device-free testing across all 8 mixins.

Fixed: UI parser regex couldn't match hyphenated XML attributes
(content-desc, resource-id). Notification parser captured trailing
parenthesis in package names.
2026-02-11 03:38:37 -07:00

57 lines
1.7 KiB
Python

"""Tests for Pydantic models."""
from src.models import CommandResult, DeviceInfo, ScreenshotResult
class TestCommandResult:
def test_success(self):
r = CommandResult(success=True, stdout="ok", stderr="", returncode=0)
assert r.success is True
assert r.returncode == 0
def test_failure(self):
r = CommandResult(success=False, stdout="", stderr="err", returncode=1)
assert r.success is False
assert r.stderr == "err"
def test_defaults(self):
r = CommandResult(success=True, returncode=0)
assert r.stdout == ""
assert r.stderr == ""
def test_model_copy(self):
r = CommandResult(success=True, stdout="ok", stderr="", returncode=0)
r2 = r.model_copy(update={"success": False, "stderr": "changed"})
assert r2.success is False
assert r2.stderr == "changed"
assert r.success is True # original unchanged
class TestDeviceInfo:
def test_basic(self):
d = DeviceInfo(device_id="ABC123", status="device")
assert d.device_id == "ABC123"
assert d.model is None
def test_full(self):
d = DeviceInfo(
device_id="ABC123",
status="device",
model="Pixel_6",
product="oriole",
)
assert d.model == "Pixel_6"
dump = d.model_dump()
assert dump["product"] == "oriole"
class TestScreenshotResult:
def test_success(self):
r = ScreenshotResult(success=True, local_path="/tmp/shot.png")
assert r.local_path == "/tmp/shot.png"
def test_failure(self):
r = ScreenshotResult(success=False, error="No device")
assert r.error == "No device"
assert r.local_path is None