mirror of https://github.com/gmbrax/Pilgrim.git
Compare commits
7 Commits
5f20bd3624
...
32f363f15a
| Author | SHA1 | Date |
|---|---|---|
|
|
32f363f15a | |
|
|
65cf7b04f3 | |
|
|
44824cd690 | |
|
|
32b1c24846 | |
|
|
5d0d4fc5ac | |
|
|
9d0bc50350 | |
|
|
83e7db9ce1 |
|
|
@ -25,7 +25,8 @@ class Photo(Base):
|
|||
back_populates="photos"
|
||||
)
|
||||
|
||||
fk_travel_diary_id = Column(Integer, ForeignKey("travel_diaries.id"),nullable=False)
|
||||
fk_travel_diary_id = Column(Integer, ForeignKey("travel_diaries.id"), nullable=False)
|
||||
travel_diary = relationship("TravelDiary", back_populates="photos")
|
||||
__table_args__ = (
|
||||
Index('idx_photo_hash_diary', 'hash', 'fk_travel_diary_id'),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ class TravelDiary(Base):
|
|||
name = Column(String, nullable=False)
|
||||
directory_name = Column(String, nullable=False, unique=True)
|
||||
entries = relationship("Entry", back_populates="travel_diary", cascade="all, delete-orphan")
|
||||
photos = relationship("Photo", back_populates="travel_diary", cascade="all, delete-orphan")
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint('directory_name', name='uq_travel_diary_directory_name'),
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ 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
|
||||
from pilgrim.models.photo import Photo
|
||||
|
||||
# Todos os imports necessários para as fixtures devem estar aqui
|
||||
# ...
|
||||
|
|
@ -39,22 +39,26 @@ def session_with_one_diary(db_session):
|
|||
|
||||
@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
|
||||
|
||||
# Usamos a mesma raiz de diretório que o mock do teste espera
|
||||
diaries_root = "/fake/diaries_root"
|
||||
|
||||
photo1 = Photo(
|
||||
filepath=f"/fake/{diary.directory_name}/p1.jpg", name="Foto 1",
|
||||
photo_hash="hash1", fk_travel_diary_id=diary.id
|
||||
# CORREÇÃO: O caminho agora inclui a raiz e a subpasta 'images'
|
||||
filepath=f"{diaries_root}/{diary.directory_name}/images/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
|
||||
filepath=f"{diaries_root}/{diary.directory_name}/images/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]
|
||||
|
|
@ -4,6 +4,8 @@ from pilgrim.service.photo_service import PhotoService
|
|||
import hashlib
|
||||
from unittest.mock import patch
|
||||
from pilgrim.models.photo import Photo
|
||||
from pilgrim.utils import DirectoryManager
|
||||
|
||||
|
||||
@patch.object(PhotoService, '_copy_photo_to_diary')
|
||||
@patch.object(PhotoService, 'hash_file', return_value="fake_hash_123")
|
||||
|
|
@ -105,4 +107,33 @@ def test_check_photo_by_hash_returns_none_when_not_found(session_with_photos):
|
|||
assert result1 is None
|
||||
invalid_diary_id = 999
|
||||
result2 = service.check_photo_by_hash(existing_hash, invalid_diary_id)
|
||||
assert result2 is None
|
||||
assert result2 is None
|
||||
|
||||
@patch('pathlib.Path.unlink')
|
||||
@patch('pathlib.Path.exists')
|
||||
@patch.object(DirectoryManager, 'get_diaries_root', return_value="/fake/diaries_root")
|
||||
def test_delete_photo_successfully(mock_get_root, mock_exists, mock_unlink, session_with_photos):
|
||||
session, photos = session_with_photos
|
||||
service = PhotoService(session)
|
||||
photo_to_delete = photos[0]
|
||||
photo_id = photo_to_delete.id
|
||||
mock_exists.return_value = True
|
||||
deleted_photo_data = service.delete(photo_to_delete)
|
||||
mock_unlink.assert_called_once()
|
||||
assert deleted_photo_data is not None
|
||||
assert deleted_photo_data.id == photo_id
|
||||
photo_in_db = service.read_by_id(photo_id)
|
||||
assert photo_in_db is None
|
||||
|
||||
@patch('pathlib.Path.unlink')
|
||||
def test_delete_returns_none_for_non_existent_photo(mock_unlink, db_session):
|
||||
service = PhotoService(db_session)
|
||||
non_existent_photo = Photo(
|
||||
filepath="/fake/path.jpg", name="dummy",
|
||||
photo_hash="dummy_hash", fk_travel_diary_id=1
|
||||
)
|
||||
non_existent_photo.id = 999
|
||||
result = service.delete(non_existent_photo)
|
||||
assert result is None
|
||||
mock_unlink.assert_not_called()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue