From 3d926993e8f124ba572f8b5b01baa1b34283d1c4 Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Fri, 25 Jul 2025 00:13:08 -0300 Subject: [PATCH] Add the tests for the new methods of deleting --- tests/conftest.py | 17 ++++++++-- tests/service/test_travel_diary_service.py | 39 ++++++++++++++++++++-- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index bb57cca..91dff2a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,12 @@ -from datetime import datetime - import pytest from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker +from datetime import datetime from pilgrim.models.entry import Entry from pilgrim.database import Base from pilgrim.models.travel_diary import TravelDiary +from pilgrim.models.entry import Entry from pilgrim.models.photo import Photo # Todos os imports necessários para as fixtures devem estar aqui @@ -85,3 +85,16 @@ def entry_with_photo_references(session_with_one_diary): session.refresh(entry) return session, entry + + +@pytest.fixture +def session_with_multiple_entries(session_with_one_diary): + session, diary = session_with_one_diary + session.query(Entry).delete() + entry1 = Entry(title="Entrada 1", text="Texto 1", date=datetime.now(), travel_diary_id=diary.id) + entry2 = Entry(title="Entrada 2", text="Texto 2", date=datetime.now(), travel_diary_id=diary.id) + + session.add_all([entry1, entry2]) + session.commit() + + return session, diary \ No newline at end of file diff --git a/tests/service/test_travel_diary_service.py b/tests/service/test_travel_diary_service.py index efab0f9..9a1e890 100644 --- a/tests/service/test_travel_diary_service.py +++ b/tests/service/test_travel_diary_service.py @@ -1,9 +1,12 @@ -from unittest.mock import patch, MagicMock from pathlib import Path +from unittest.mock import patch, MagicMock + import pytest -from pilgrim import TravelDiary +from pilgrim.models.photo import Photo +from pilgrim.models.travel_diary import TravelDiary +from pilgrim.models.entry import Entry from pilgrim.service.travel_diary_service import TravelDiaryService @patch.object(TravelDiaryService, '_ensure_diary_directory') @@ -140,4 +143,34 @@ def test_sanitize_directory_name_handles_uniqueness(db_session): db_session.commit() third_sanitized_name = service._sanitize_directory_name("Viagem para a Praia") - assert third_sanitized_name == "viagem_para_a_praia_2" \ No newline at end of file + assert third_sanitized_name == "viagem_para_a_praia_2" + +def test_delete_all_entries_successfully(session_with_multiple_entries): + session, diary = session_with_multiple_entries + service = TravelDiaryService(session) + diary_id = 1 + assert session.query(Entry).filter_by(fk_travel_diary_id=diary_id).count() == 2 + result = service.delete_all_entries(diary) + assert result is True + assert session.query(Entry).filter_by(fk_travel_diary_id=diary_id).count() == 0 + +@patch.object(TravelDiaryService, '_ensure_diary_directory') +@patch('pathlib.Path.unlink') +@patch('pathlib.Path.exists', return_value=True) +@patch('pilgrim.utils.DirectoryManager.get_diaries_root', return_value=Path("/fake/diaries_root")) +def test_delete_all_photos_orchestration( + mock_ensure_dir, mock_unlink, mock_exists, mock_get_root, entry_with_photo_references +): + session, entry = entry_with_photo_references + diary_id = entry.fk_travel_diary_id + service = TravelDiaryService(session) + assert session.query(Photo).filter_by(fk_travel_diary_id=diary_id).count() == 2 + assert "[[photo::" in entry.text + diary = session.get(TravelDiary, diary_id) + result = service.delete_all_photos(diary) + assert result is True + photos_after_delete = session.query(Photo).filter_by(fk_travel_diary_id=diary_id).all() + assert len(photos_after_delete) == 0 + session.refresh(entry) + assert "[[photo::" not in entry.text + assert mock_unlink.call_count == 2