import sqlite3 import pytest from backend.model.student import Student from backend.repository.student_sqlite_repository import ( StudentRepositoryError, StudentSQLiteRepository, ) def test_get_student(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, prebuild_students): student_repo = StudentSQLiteRepository(memory_sqlite_conn) student_id = prebuild_students[0].id student = student_repo.get(student_id, prebuild_tribes) assert prebuild_students[0] == student def test_get_student_not_exists(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, _): student_repo = StudentSQLiteRepository(memory_sqlite_conn) with pytest.raises(ValueError): student_repo.get("student0", prebuild_tribes) def test_list_students(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, prebuild_students): student_repo = StudentSQLiteRepository(memory_sqlite_conn) students = student_repo.list(prebuild_tribes) assert prebuild_students == students def test_add_student(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, _): student_repo = StudentSQLiteRepository(memory_sqlite_conn) student_infos = {"name": "student1", "tribe": prebuild_tribes[0]} student = Student(**student_infos) student_repo.add(student) memory_sqlite_conn.commit() cursor = memory_sqlite_conn.cursor() cursor.execute( """ SELECT id, name, tribe_name FROM students WHERE id=? """, (student.id,), ) row = cursor.fetchone() assert row == student.to_tuple() def test_add_student_fail_exists(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, _): student_repo = StudentSQLiteRepository(memory_sqlite_conn) student_infos = {"name": "student1", "tribe": prebuild_tribes[0]} student = Student(**student_infos) student_repo.add(student) memory_sqlite_conn.commit() with pytest.raises(sqlite3.IntegrityError): student_repo.add(student) def test_update_student(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, prebuild_students): student_repo = StudentSQLiteRepository(memory_sqlite_conn) student = prebuild_students[0] student.name = "Boby" student.tribe = prebuild_tribes[-1] student_repo.update(student) memory_sqlite_conn.commit() student_list = student_repo.list(prebuild_tribes) assert set(student_list) == set(prebuild_students) moded_student = next(filter(lambda s: s.id == student.id, student_list)) assert moded_student == student def test_update_student_does_not_exists(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, _): student_repo = StudentSQLiteRepository(memory_sqlite_conn) student = Student(name="jkl", tribe=prebuild_tribes[0]) with pytest.raises(StudentRepositoryError): student_repo.update(student) def test_delete_student(memory_sqlite_conn, populate_db): with populate_db(memory_sqlite_conn) as (prebuild_tribes, prebuild_students): student_repo = StudentSQLiteRepository(memory_sqlite_conn) deleted_student = prebuild_students.pop() student_repo.delete(deleted_student.id) memory_sqlite_conn.commit() assert student_repo.list(prebuild_tribes) == prebuild_students