From 6fbe238e590313773b51dd2a584076ada7e83a9c Mon Sep 17 00:00:00 2001 From: Bertrand Benjamin Date: Mon, 26 Dec 2022 18:07:23 +0100 Subject: [PATCH] Feat: start sqlite tribe repository --- backend/adapters/sqlite.py | 18 +++++++++++ backend/repository/tribe_sqlite_repository.py | 29 +++++++++++++++++ tests/conftest.py | 9 ++++++ tests/integration/test_repository_sqlite.py | 31 +++++++++++++++++++ 4 files changed, 87 insertions(+) create mode 100644 backend/adapters/sqlite.py create mode 100644 backend/repository/tribe_sqlite_repository.py create mode 100644 tests/integration/test_repository_sqlite.py diff --git a/backend/adapters/sqlite.py b/backend/adapters/sqlite.py new file mode 100644 index 0000000..97e4fbc --- /dev/null +++ b/backend/adapters/sqlite.py @@ -0,0 +1,18 @@ +import sqlite3 + + +def create_tribe_table(conn) -> None: + cursor = conn.cursor() + cursor.execute( + """ + CREATE TABLE IF NOT EXISTS tribes( + name TEXT PRIMARY KEY UNIQUE, + level TEXT + ) + """ + ) + conn.commit() + + +def create_db(conn) -> None: + create_tribe_table(conn) diff --git a/backend/repository/tribe_sqlite_repository.py b/backend/repository/tribe_sqlite_repository.py new file mode 100644 index 0000000..60cd854 --- /dev/null +++ b/backend/repository/tribe_sqlite_repository.py @@ -0,0 +1,29 @@ +from backend.model.tribe import Tribe +from backend.repository.abstract_repository import AbstractRepository + + +class TribeSQLiteRepository(AbstractRepository): + def __init__(self, conn) -> None: + self.conn = conn + + def add(self, tribe: Tribe) -> None: + pass + + def update(self, name: str, tribe: Tribe) -> None: + pass + + def get(self, name: str) -> Tribe: + pass + + def list(self) -> list[Tribe]: + cursor = self.conn.cursor() + cursor.execute( + """ + SELECT * FROM tribes + """ + ) + rows = cursor.fetchall() + return [Tribe(*r) for r in rows] + + def delete(self, tribe: Tribe) -> None: + pass diff --git a/tests/conftest.py b/tests/conftest.py index 9614a7e..51ce08b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,3 +1,5 @@ +import sqlite3 + import pytest from sqlalchemy import create_engine from sqlalchemy.orm import clear_mappers, sessionmaker @@ -17,3 +19,10 @@ def session(in_memory_db): start_mappers() yield sessionmaker(bind=in_memory_db)() clear_mappers() + + +@pytest.fixture +def sqlite_conn(): + conn = sqlite3.connect(":memory:") + yield conn + conn.close() diff --git a/tests/integration/test_repository_sqlite.py b/tests/integration/test_repository_sqlite.py new file mode 100644 index 0000000..2f31542 --- /dev/null +++ b/tests/integration/test_repository_sqlite.py @@ -0,0 +1,31 @@ +from backend.adapters.sqlite import create_db +from backend.model.tribe import Tribe +from backend.repository.tribe_sqlite_repository import TribeSQLiteRepository + + +def populate_tribe(conn) -> None: + cursor = conn.cursor() + tribes = [ + ("Tribe1", "2nd"), + ("Tribe2", "2nd"), + ("Tribe3", "1ST"), + ] + cursor.executemany( + """ + INSERT INTO tribes(name, level) VALUES (?, ?) + """, + tribes, + ) + conn.commit() + + return [Tribe(*t) for t in tribes] + + +def test_list_tribes(sqlite_conn): + create_db(sqlite_conn) + prebuild_tribes = populate_tribe(sqlite_conn) + + tribe_repo = TribeSQLiteRepository(sqlite_conn) + tribes = tribe_repo.list() + + assert prebuild_tribes == tribes