From 0b6c1df6ff9ba0a0cf09ca2b38bfb3462938d823 Mon Sep 17 00:00:00 2001 From: minhtrannhat Date: Sat, 2 Mar 2024 15:52:41 -0500 Subject: [PATCH] feat(api): insert members into database + testing --- backend/src/neo_neo_todo/models/member.py | 31 +++++++++++++++++++++++ backend/tests/test_model_member.py | 16 +++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/backend/src/neo_neo_todo/models/member.py b/backend/src/neo_neo_todo/models/member.py index 9098970..907bf24 100644 --- a/backend/src/neo_neo_todo/models/member.py +++ b/backend/src/neo_neo_todo/models/member.py @@ -55,3 +55,34 @@ async def select_member_by_id(db: AsyncConnectionPool, id: int) -> Member | None member = await curr.fetchone() return None if member is None else member + + +async def insert_member( + db: AsyncConnectionPool, email: str, password_hash: str +) -> Member | None: + """ + Insert a member into the database + + Return the inserted member object + """ + async with db.connection() as conn: + async with conn.cursor(row_factory=class_row(Member)) as curr: + query = sql.SQL( + """ + INSERT INTO members (email, password_hash) + VALUES (%s, %s) + RETURNING id, email, password_hash, created, email_verified + """ + ) + + await curr.execute( + query, + ( + email, + password_hash, + ), + ) + + member = await curr.fetchone() + + return None if member is None else member diff --git a/backend/tests/test_model_member.py b/backend/tests/test_model_member.py index d4b54fb..a070e2d 100644 --- a/backend/tests/test_model_member.py +++ b/backend/tests/test_model_member.py @@ -1,4 +1,8 @@ -from src.neo_neo_todo.models.member import select_member_by_email, select_member_by_id +from src.neo_neo_todo.models.member import ( + insert_member, + select_member_by_email, + select_member_by_id, +) async def test_model_member_select_by_email(db_pool): @@ -11,3 +15,13 @@ async def test_model_member_select_by_id(db_pool): member = await select_member_by_id(db_pool, 1) assert member is not None assert member.id == 1 + + +async def test_model_member_insert(db_pool): + member = await insert_member( + db_pool, "member_inserted@todo.test", "alkasdjfhasldkfjh12341238989" + ) + assert member is not None + assert member.id == 2 + assert member.email == "member_inserted@todo.test" + assert member.password_hash == "alkasdjfhasldkfjh12341238989"