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.
57 lines
1.7 KiB
Python
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
|