From 819a2c7b6b1c266508d5f222d4b1e6c48a35814c Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Thu, 24 Jul 2025 23:36:02 -0300 Subject: [PATCH] Add the tests for the new methods of deleting --- tests/conftest.py | 25 ++++++++++++++++- tests/service/test_entry_service.py | 43 +++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 59d0e26..bb57cca 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,7 +1,10 @@ +from datetime import datetime + import pytest from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker +from pilgrim.models.entry import Entry from pilgrim.database import Base from pilgrim.models.travel_diary import TravelDiary from pilgrim.models.photo import Photo @@ -61,4 +64,24 @@ def session_with_photos(session_with_one_diary): session.add_all([photo1, photo2]) session.commit() - return session, [photo1, photo2] \ No newline at end of file + return session, [photo1, photo2] + +@pytest.fixture +def entry_with_photo_references(session_with_one_diary): + session, diary = session_with_one_diary + photo1 = Photo(filepath="p1.jpg", name="P1", photo_hash="aaaaaaaa", fk_travel_diary_id=diary.id) + photo2 = Photo(filepath="p2.jpg", name="P2", photo_hash="bbbbbbbb", fk_travel_diary_id=diary.id) + session.add_all([photo1, photo2]) + session.flush() + entry = Entry( + title="Entrada com Fotos", + text="Texto com a foto A [[photo::aaaaaaaa]] e também a foto B [[photo::bbbbbbbb]].", + date=datetime.now(), + travel_diary_id=diary.id, + photos=[photo1, photo2] + ) + session.add(entry) + session.commit() + session.refresh(entry) + + return session, entry diff --git a/tests/service/test_entry_service.py b/tests/service/test_entry_service.py index cdad48f..5cab040 100644 --- a/tests/service/test_entry_service.py +++ b/tests/service/test_entry_service.py @@ -261,3 +261,46 @@ def test_delete_returns_none_if_entry_does_not_exist(db_session): non_existent_entry.id = 999 result = service.delete(non_existent_entry) assert result is None + +def test_delete_references_for_specific_photo(entry_with_photo_references): + session, entry = entry_with_photo_references + service = EntryService(session) + updated_entry = service.delete_references_for_specific_photo(entry, "aaaaaaaa") + assert "[[photo::aaaaaaaa]]" not in updated_entry.text + assert "[[photo::bbbbbbbb]]" in updated_entry.text + +def test_delete_specific_photo_reference_does_nothing_if_no_match(entry_with_photo_references): + session, entry = entry_with_photo_references + service = EntryService(session) + + original_text = entry.text + updated_entry = service.delete_references_for_specific_photo(entry, "cccccccc") + assert updated_entry.text == original_text + +def test_delete_all_photo_references_removes_all_refs(entry_with_photo_references): + session, entry = entry_with_photo_references + service = EntryService(session) + updated_entry = service.delete_all_photo_references(entry) + assert "[[photo::aaaaaaaa]]" not in updated_entry.text + assert "[[photo::bbbbbbbb]]" not in updated_entry.text + +def test_delete_all_photo_references_uses_truncated_hash(session_with_one_diary): + session, diary = session_with_one_diary + service = EntryService(session) + long_hash_photo = Photo( + filepath="long.jpg", name="Long", + photo_hash="1234567890abcdef", # Hash com 16 caracteres + fk_travel_diary_id=diary.id + ) + entry = Entry( + title="Teste de Hash Curto", + text="Referência com hash truncado [[photo::12345678]].", # Texto usa só os 8 primeiros + date=datetime.now(), + travel_diary_id=diary.id + ) + entry.photos.append(long_hash_photo) + session.add_all([long_hash_photo, entry]) + session.commit() + updated_entry = service.delete_all_photo_references(entry) + expected_text = "Referência com hash truncado ." + assert "[[photo::12345678]]" not in updated_entry.text