backend.tests.unit.database.test_models
1import pytest 2from datetime import datetime 3from sqlalchemy.exc import IntegrityError 4from backend.database.models import Worker, Entry 5 6 7def test_create_worker_success(db_session, sample_worker_data): 8 """ 9 Testuje poprawne utworzenie i zapisanie pracownika (Worker). 10 """ 11 worker = Worker( 12 name=sample_worker_data["name"], 13 face_embedding=sample_worker_data["face_embedding"], 14 expiration_date=sample_worker_data["expiration_date"], 15 secret=sample_worker_data["secret"] 16 ) 17 18 db_session.session.add(worker) 19 db_session.session.commit() 20 21 assert worker.id is not None 22 assert worker.name == "Jan Kowalski" 23 assert worker.secret == "super_secret_qr_code_content" 24 assert isinstance(worker.face_embedding, bytes) 25 26 27def test_create_worker_missing_fields(db_session): 28 """ 29 Testuje, czy baza danych rzuca błąd (IntegrityError), 30 gdy próbujemy zapisać pracownika bez wymaganych pól (nullable=False). 31 """ 32 # Brak pola 'name' i 'secret' 33 worker = Worker( 34 face_embedding=b'some_data', 35 expiration_date=datetime.now() 36 ) 37 38 db_session.session.add(worker) 39 40 with pytest.raises(IntegrityError): 41 db_session.session.commit() 42 43 44def test_create_entry_linked_to_worker(db_session, created_worker): 45 """ 46 Testuje utworzenie wpisu (Entry) powiązanego z istniejącym pracownikiem. 47 """ 48 entry = Entry( 49 worker_id=created_worker.id, 50 code=200, 51 message="Access Granted", 52 face_image=b'snapshot_blob' 53 ) 54 55 db_session.session.add(entry) 56 db_session.session.commit() 57 58 assert entry.id is not None 59 assert entry.worker_id == created_worker.id 60 assert entry.message == "Access Granted" 61 62 63def test_create_entry_without_worker(db_session): 64 """ 65 Testuje utworzenie wpisu (Entry) bez powiązania z pracownikiem (worker_id jest nullable). 66 Np. w przypadku próby wejścia osoby nierozpoznanej. 67 """ 68 entry = Entry( 69 worker_id=None, 70 code=404, 71 message="User not found", 72 face_image=b'unknown_face_blob' 73 ) 74 75 db_session.session.add(entry) 76 db_session.session.commit() 77 78 assert entry.id is not None 79 assert entry.worker_id is None 80 81 82def test_entry_default_date(db_session): 83 """ 84 Testuje, czy pole 'date' w modelu Entry otrzymuje domyślną wartość (server_default), 85 jeśli nie zostanie podane przy tworzeniu obiektu. 86 """ 87 entry = Entry( 88 code=200, 89 message="Test Date", 90 worker_id=None 91 ) 92 93 db_session.session.add(entry) 94 db_session.session.commit() 95 96 # Po commicie musimy odświeżyć obiekt, aby pobrać wartość wygenerowaną przez serwer bazy danych 97 db_session.session.refresh(entry) 98 99 assert entry.date is not None 100 assert isinstance(entry.date, datetime) 101 102 103def test_entry_missing_required_fields(db_session): 104 """ 105 Testuje brak wymaganych pól w modelu Entry (code, message). 106 """ 107 entry = Entry( 108 worker_id=None 109 # Brak code i message 110 ) 111 112 db_session.session.add(entry) 113 114 with pytest.raises(IntegrityError): 115 db_session.session.commit()
def
test_create_worker_success(db_session, sample_worker_data):
8def test_create_worker_success(db_session, sample_worker_data): 9 """ 10 Testuje poprawne utworzenie i zapisanie pracownika (Worker). 11 """ 12 worker = Worker( 13 name=sample_worker_data["name"], 14 face_embedding=sample_worker_data["face_embedding"], 15 expiration_date=sample_worker_data["expiration_date"], 16 secret=sample_worker_data["secret"] 17 ) 18 19 db_session.session.add(worker) 20 db_session.session.commit() 21 22 assert worker.id is not None 23 assert worker.name == "Jan Kowalski" 24 assert worker.secret == "super_secret_qr_code_content" 25 assert isinstance(worker.face_embedding, bytes)
Testuje poprawne utworzenie i zapisanie pracownika (Worker).
def
test_create_worker_missing_fields(db_session):
28def test_create_worker_missing_fields(db_session): 29 """ 30 Testuje, czy baza danych rzuca błąd (IntegrityError), 31 gdy próbujemy zapisać pracownika bez wymaganych pól (nullable=False). 32 """ 33 # Brak pola 'name' i 'secret' 34 worker = Worker( 35 face_embedding=b'some_data', 36 expiration_date=datetime.now() 37 ) 38 39 db_session.session.add(worker) 40 41 with pytest.raises(IntegrityError): 42 db_session.session.commit()
Testuje, czy baza danych rzuca błąd (IntegrityError), gdy próbujemy zapisać pracownika bez wymaganych pól (nullable=False).
def
test_create_entry_linked_to_worker(db_session, created_worker):
45def test_create_entry_linked_to_worker(db_session, created_worker): 46 """ 47 Testuje utworzenie wpisu (Entry) powiązanego z istniejącym pracownikiem. 48 """ 49 entry = Entry( 50 worker_id=created_worker.id, 51 code=200, 52 message="Access Granted", 53 face_image=b'snapshot_blob' 54 ) 55 56 db_session.session.add(entry) 57 db_session.session.commit() 58 59 assert entry.id is not None 60 assert entry.worker_id == created_worker.id 61 assert entry.message == "Access Granted"
Testuje utworzenie wpisu (Entry) powiązanego z istniejącym pracownikiem.
def
test_create_entry_without_worker(db_session):
64def test_create_entry_without_worker(db_session): 65 """ 66 Testuje utworzenie wpisu (Entry) bez powiązania z pracownikiem (worker_id jest nullable). 67 Np. w przypadku próby wejścia osoby nierozpoznanej. 68 """ 69 entry = Entry( 70 worker_id=None, 71 code=404, 72 message="User not found", 73 face_image=b'unknown_face_blob' 74 ) 75 76 db_session.session.add(entry) 77 db_session.session.commit() 78 79 assert entry.id is not None 80 assert entry.worker_id is None
Testuje utworzenie wpisu (Entry) bez powiązania z pracownikiem (worker_id jest nullable). Np. w przypadku próby wejścia osoby nierozpoznanej.
def
test_entry_default_date(db_session):
83def test_entry_default_date(db_session): 84 """ 85 Testuje, czy pole 'date' w modelu Entry otrzymuje domyślną wartość (server_default), 86 jeśli nie zostanie podane przy tworzeniu obiektu. 87 """ 88 entry = Entry( 89 code=200, 90 message="Test Date", 91 worker_id=None 92 ) 93 94 db_session.session.add(entry) 95 db_session.session.commit() 96 97 # Po commicie musimy odświeżyć obiekt, aby pobrać wartość wygenerowaną przez serwer bazy danych 98 db_session.session.refresh(entry) 99 100 assert entry.date is not None 101 assert isinstance(entry.date, datetime)
Testuje, czy pole 'date' w modelu Entry otrzymuje domyślną wartość (server_default), jeśli nie zostanie podane przy tworzeniu obiektu.
def
test_entry_missing_required_fields(db_session):
104def test_entry_missing_required_fields(db_session): 105 """ 106 Testuje brak wymaganych pól w modelu Entry (code, message). 107 """ 108 entry = Entry( 109 worker_id=None 110 # Brak code i message 111 ) 112 113 db_session.session.add(entry) 114 115 with pytest.raises(IntegrityError): 116 db_session.session.commit()
Testuje brak wymaganych pól w modelu Entry (code, message).