From 32b1c24846c6c619a9c3b456ef34cf828ba89a7b Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Mon, 21 Jul 2025 02:48:04 -0300 Subject: [PATCH] Add the tests for the read methods for the photo service --- tests/conftest.py | 24 +++++++++++++ tests/service/test_photo_service.py | 52 +++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/tests/conftest.py b/tests/conftest.py index 0c1ce17..7232c5a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,6 +2,7 @@ import pytest from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker +from pilgrim import Photo from pilgrim.database import Base from pilgrim.models.travel_diary import TravelDiary @@ -34,3 +35,26 @@ def session_with_one_diary(db_session): db_session.commit() db_session.refresh(diary) return db_session, diary + + +@pytest.fixture +def session_with_photos(session_with_one_diary): + """ + Fixture que usa a session_with_one_diary e adiciona duas fotos a ela. + """ + session, diary = session_with_one_diary + + photo1 = Photo( + filepath=f"/fake/{diary.directory_name}/p1.jpg", name="Foto 1", + photo_hash="hash1", fk_travel_diary_id=diary.id + ) + photo2 = Photo( + filepath=f"/fake/{diary.directory_name}/p2.jpg", name="Foto 2", + photo_hash="hash2", fk_travel_diary_id=diary.id + ) + + session.add_all([photo1, photo2]) + session.commit() + + # Retornamos a sessão e os objetos criados para que os testes possam usá-los + return session, [photo1, photo2] \ No newline at end of file diff --git a/tests/service/test_photo_service.py b/tests/service/test_photo_service.py index a3f595f..4f4ec0a 100644 --- a/tests/service/test_photo_service.py +++ b/tests/service/test_photo_service.py @@ -54,3 +54,55 @@ def test_create_photo_returns_none_if_hash_exists(mock_hash, mock_copy, session_ ) assert new_photo is None mock_copy.assert_not_called() + +def test_read_by_id_successfully(session_with_photos): + session, photos = session_with_photos + service = PhotoService(session) + photo_to_find_id = photos[0].id + found_photo = service.read_by_id(photo_to_find_id) + assert found_photo is not None + assert found_photo.id == photo_to_find_id + assert found_photo.name == "Foto 1" + +def test_read_by_id_returns_none_for_invalid_id(db_session): + service = PhotoService(db_session) + result = service.read_by_id(999) + assert result is None + +def test_read_all_returns_all_photos(session_with_photos): + session, _ = session_with_photos + service = PhotoService(session) + all_photos = service.read_all() + + assert isinstance(all_photos, list) + assert len(all_photos) == 2 + assert all_photos[0].name == "Foto 1" + assert all_photos[1].name == "Foto 2" + +def test_read_all_returns_empty_list_for_empty_db(db_session): + service = PhotoService(db_session) + all_photos = service.read_all() + assert isinstance(all_photos, list) + assert len(all_photos) == 0 + +def test_check_photo_by_hash_finds_existing_photo(session_with_photos): + session, photos = session_with_photos + service = PhotoService(session) + existing_photo = photos[0] + hash_to_find = existing_photo.photo_hash # "hash1" + diary_id = existing_photo.fk_travel_diary_id # 1 + found_photo = service.check_photo_by_hash(hash_to_find, diary_id) + assert found_photo is not None + assert found_photo.id == existing_photo.id + assert found_photo.photo_hash == hash_to_find + +def test_check_photo_by_hash_returns_none_when_not_found(session_with_photos): + session, photos = session_with_photos + service = PhotoService(session) + existing_hash = photos[0].photo_hash # "hash1" + existing_diary_id = photos[0].fk_travel_diary_id # 1 + result1 = service.check_photo_by_hash("hash_inexistente", existing_diary_id) + assert result1 is None + invalid_diary_id = 999 + result2 = service.check_photo_by_hash(existing_hash, invalid_diary_id) + assert result2 is None \ No newline at end of file