mirror of
https://github.com/d3vyce/fastapi-toolsets.git
synced 2026-03-01 17:00:48 +01:00
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
"""Tests for fastapi_toolsets.fixtures.utils."""
|
|
|
|
import pytest
|
|
|
|
from fastapi_toolsets.fixtures import FixtureRegistry
|
|
from fastapi_toolsets.fixtures.utils import get_obj_by_attr
|
|
|
|
from .conftest import Role, User
|
|
|
|
registry = FixtureRegistry()
|
|
|
|
|
|
@registry.register
|
|
def roles() -> list[Role]:
|
|
return [
|
|
Role(id=1, name="admin"),
|
|
Role(id=2, name="user"),
|
|
Role(id=3, name="moderator"),
|
|
]
|
|
|
|
|
|
@registry.register(depends_on=["roles"])
|
|
def users() -> list[User]:
|
|
return [
|
|
User(id=1, username="alice", email="alice@example.com", role_id=1),
|
|
User(id=2, username="bob", email="bob@example.com", role_id=1),
|
|
]
|
|
|
|
|
|
class TestGetObjByAttr:
|
|
"""Tests for get_obj_by_attr."""
|
|
|
|
def test_get_by_id(self):
|
|
"""Get an object by its id attribute."""
|
|
role = get_obj_by_attr(roles, "id", 1)
|
|
assert role.name == "admin"
|
|
|
|
def test_get_user_by_username(self):
|
|
"""Get a user by username."""
|
|
user = get_obj_by_attr(users, "username", "bob")
|
|
assert user.id == 2
|
|
assert user.email == "bob@example.com"
|
|
|
|
def test_returns_first_match(self):
|
|
"""Returns the first matching object when multiple could match."""
|
|
user = get_obj_by_attr(users, "role_id", 1)
|
|
assert user.username == "alice"
|
|
|
|
def test_no_match_raises_stop_iteration(self):
|
|
"""Raises StopIteration when no object matches."""
|
|
with pytest.raises(StopIteration):
|
|
get_obj_by_attr(roles, "name", "nonexistent")
|
|
|
|
def test_no_match_on_wrong_value_type(self):
|
|
"""Raises StopIteration when value type doesn't match."""
|
|
with pytest.raises(StopIteration):
|
|
get_obj_by_attr(roles, "id", "1")
|