feat(api+testing): select todos + testing
This commit is contained in:
parent
1a6469efa5
commit
e92254cdaf
@ -44,7 +44,25 @@ def generate_test_data() -> None:
|
||||
sql.SQL(
|
||||
"""
|
||||
INSERT INTO todos (member_id, task)
|
||||
VALUES (1, 'Test Task')
|
||||
VALUES (1, 'Test Task 1')
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
cur.execute(
|
||||
sql.SQL(
|
||||
"""
|
||||
INSERT INTO todos (member_id, task)
|
||||
VALUES (1, 'Test Task 2')
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
cur.execute(
|
||||
sql.SQL(
|
||||
"""
|
||||
INSERT INTO todos (member_id, task)
|
||||
VALUES (1, 'Test Task 3')
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
45
backend/src/neo_neo_todo/models/todo.py
Normal file
45
backend/src/neo_neo_todo/models/todo.py
Normal file
@ -0,0 +1,45 @@
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
from psycopg import sql
|
||||
from psycopg.rows import class_row
|
||||
from psycopg_pool import AsyncConnectionPool
|
||||
from pydantic import constr
|
||||
|
||||
|
||||
@dataclass
|
||||
class Todo:
|
||||
complete: bool
|
||||
due: datetime | None
|
||||
id: int
|
||||
task: constr(strip_whitespace=True, min_length=1) # type: ignore
|
||||
|
||||
|
||||
async def select_todos(
|
||||
db: AsyncConnectionPool, member_id: int, complete: bool | None = None
|
||||
) -> list[Todo]:
|
||||
async with db.connection() as conn:
|
||||
async with conn.cursor(row_factory=class_row(Todo)) as curr:
|
||||
|
||||
if complete is None:
|
||||
condition = sql.SQL("member_id = {}").format(sql.Literal(member_id))
|
||||
else:
|
||||
condition = sql.SQL("member_id = {} AND complete = {}").format(
|
||||
sql.Literal(member_id), sql.Literal(complete)
|
||||
)
|
||||
|
||||
query = sql.SQL(
|
||||
"""
|
||||
SELECT id, complete, due, task
|
||||
FROM todos
|
||||
WHERE {}
|
||||
"""
|
||||
).format(condition)
|
||||
|
||||
await curr.execute(
|
||||
query,
|
||||
)
|
||||
|
||||
todos = await curr.fetchall()
|
||||
|
||||
return todos
|
19
backend/tests/test_model_todo.py
Normal file
19
backend/tests/test_model_todo.py
Normal file
@ -0,0 +1,19 @@
|
||||
from src.neo_neo_todo.models.todo import select_todos
|
||||
|
||||
|
||||
async def test_model_todo_select_todos(db_pool):
|
||||
todos_list_all = await select_todos(db_pool, 1)
|
||||
|
||||
assert len(todos_list_all) == 3
|
||||
|
||||
todos_list_completed_false = await select_todos(db_pool, 1, False)
|
||||
|
||||
assert len(todos_list_completed_false) == 3
|
||||
|
||||
todos_list_completed_true = await select_todos(db_pool, 1, True)
|
||||
|
||||
assert len(todos_list_completed_true) == 0
|
||||
|
||||
todos_list_non_existent_member_id = await select_todos(db_pool, 12341234)
|
||||
|
||||
assert len(todos_list_non_existent_member_id) == 0
|
Loading…
x
Reference in New Issue
Block a user