mirror of
https://github.com/himanshudongre/smriti.git
synced 2026-10-07 02:58:07 +00:00
71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
"""Unit coverage for worktree UUID/prefix resolution."""
|
|
from __future__ import annotations
|
|
|
|
import uuid
|
|
from types import SimpleNamespace
|
|
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
from app.api.routes.worktrees import _resolve_worktree_id
|
|
|
|
|
|
class _Scalars:
|
|
def __init__(self, rows):
|
|
self._rows = rows
|
|
|
|
def all(self):
|
|
return self._rows
|
|
|
|
|
|
class _FakeSession:
|
|
def __init__(self, *, get_result=None, prefix_rows=None):
|
|
self.get_result = get_result
|
|
self.prefix_rows = prefix_rows or []
|
|
|
|
def get(self, model, key):
|
|
return self.get_result
|
|
|
|
def scalars(self, stmt):
|
|
return _Scalars(self.prefix_rows)
|
|
|
|
|
|
def _worktree(value: str):
|
|
return SimpleNamespace(id=uuid.UUID(value))
|
|
|
|
|
|
def test_resolve_worktree_id_rejects_too_short_prefix():
|
|
with pytest.raises(HTTPException) as exc:
|
|
_resolve_worktree_id("abc", _FakeSession())
|
|
|
|
assert exc.value.status_code == 400
|
|
assert "at least 4 characters" in exc.value.detail
|
|
|
|
|
|
def test_resolve_worktree_id_returns_full_uuid_match():
|
|
row = _worktree("11111111-1111-4111-8111-111111111111")
|
|
|
|
assert _resolve_worktree_id(str(row.id), _FakeSession(get_result=row)) is row
|
|
|
|
|
|
def test_resolve_worktree_id_prefix_no_match():
|
|
with pytest.raises(HTTPException) as exc:
|
|
_resolve_worktree_id("deadbeef", _FakeSession(prefix_rows=[]))
|
|
|
|
assert exc.value.status_code == 404
|
|
assert "No worktree matches prefix" in exc.value.detail
|
|
|
|
|
|
def test_resolve_worktree_id_prefix_ambiguous():
|
|
rows = [
|
|
_worktree("abcd1111-1111-4111-8111-111111111111"),
|
|
_worktree("abcd2222-2222-4222-8222-222222222222"),
|
|
]
|
|
|
|
with pytest.raises(HTTPException) as exc:
|
|
_resolve_worktree_id("abcd", _FakeSession(prefix_rows=rows))
|
|
|
|
assert exc.value.status_code == 422
|
|
assert "ambiguous" in exc.value.detail
|
|
assert "abcd1111" in exc.value.detail
|
|
assert "abcd2222" in exc.value.detail
|