50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
from sqlalchemy.exc import SQLAlchemyError
|
|
|
|
from models import Todo
|
|
|
|
|
|
class FakeScalarResult:
|
|
def __init__(self, todos: list[Todo]) -> None:
|
|
self.todos = todos
|
|
|
|
def all(self) -> list[Todo]:
|
|
return self.todos
|
|
|
|
|
|
class FakeSession:
|
|
def __init__(self) -> None:
|
|
self.todo_to_return: Todo | None = None
|
|
self.added_todo: Todo | None = None
|
|
self.committed = False
|
|
self.deleted_todo: Todo | None = None
|
|
self.should_fail_commit = False
|
|
self.rolled_back = False
|
|
self.todos_to_return: list[Todo] = []
|
|
|
|
def add(self, todo: Todo) -> None:
|
|
self.added_todo = todo
|
|
todo.id = 1
|
|
todo.completion = False
|
|
|
|
def commit(self) -> None:
|
|
if self.should_fail_commit:
|
|
raise SQLAlchemyError("simulated commit failure")
|
|
|
|
self.committed = True
|
|
|
|
def get(
|
|
self,
|
|
_model: type[Todo],
|
|
_todo_id: int,
|
|
) -> Todo | None:
|
|
return self.todo_to_return
|
|
|
|
def delete(self, todo: Todo) -> None:
|
|
self.deleted_todo = todo
|
|
|
|
def rollback(self) -> None:
|
|
self.rolled_back = True
|
|
|
|
def scalars(self, _statement: object) -> FakeScalarResult:
|
|
return FakeScalarResult(self.todos_to_return)
|