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)