mirror of https://github.com/gmbrax/Pilgrim.git
				
				
				
			Add the tests for the update photo service and also improved the fixture
This commit is contained in:
		
							parent
							
								
									32b1c24846
								
							
						
					
					
						commit
						44824cd690
					
				|  | @ -39,22 +39,26 @@ def session_with_one_diary(db_session): | ||||||
| 
 | 
 | ||||||
| @pytest.fixture | @pytest.fixture | ||||||
| def session_with_photos(session_with_one_diary): | 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 |     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( |     photo1 = Photo( | ||||||
|         filepath=f"/fake/{diary.directory_name}/p1.jpg", name="Foto 1", |         # CORREÇÃO: O caminho agora inclui a raiz e a subpasta 'images' | ||||||
|         photo_hash="hash1", fk_travel_diary_id=diary.id |         filepath=f"{diaries_root}/{diary.directory_name}/images/p1.jpg", | ||||||
|  |         name="Foto 1", | ||||||
|  |         photo_hash="hash1", | ||||||
|  |         fk_travel_diary_id=diary.id | ||||||
|     ) |     ) | ||||||
|     photo2 = Photo( |     photo2 = Photo( | ||||||
|         filepath=f"/fake/{diary.directory_name}/p2.jpg", name="Foto 2", |         filepath=f"{diaries_root}/{diary.directory_name}/images/p2.jpg", | ||||||
|         photo_hash="hash2", fk_travel_diary_id=diary.id |         name="Foto 2", | ||||||
|  |         photo_hash="hash2", | ||||||
|  |         fk_travel_diary_id=diary.id | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     session.add_all([photo1, photo2]) |     session.add_all([photo1, photo2]) | ||||||
|     session.commit() |     session.commit() | ||||||
| 
 | 
 | ||||||
|     # Retornamos a sessão e os objetos criados para que os testes possam usá-los |  | ||||||
|     return session, [photo1, photo2] |     return session, [photo1, photo2] | ||||||
|  | @ -4,6 +4,8 @@ from pilgrim.service.photo_service import PhotoService | ||||||
| import hashlib | import hashlib | ||||||
| from unittest.mock import patch | from unittest.mock import patch | ||||||
| from pilgrim.models.photo import Photo | from pilgrim.models.photo import Photo | ||||||
|  | from pilgrim.utils import DirectoryManager | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| @patch.object(PhotoService, '_copy_photo_to_diary') | @patch.object(PhotoService, '_copy_photo_to_diary') | ||||||
| @patch.object(PhotoService, 'hash_file', return_value="fake_hash_123") | @patch.object(PhotoService, 'hash_file', return_value="fake_hash_123") | ||||||
|  | @ -106,3 +108,50 @@ def test_check_photo_by_hash_returns_none_when_not_found(session_with_photos): | ||||||
|     invalid_diary_id = 999 |     invalid_diary_id = 999 | ||||||
|     result2 = service.check_photo_by_hash(existing_hash, invalid_diary_id) |     result2 = service.check_photo_by_hash(existing_hash, invalid_diary_id) | ||||||
|     assert result2 is None |     assert result2 is None | ||||||
|  | 
 | ||||||
|  | def test_update_photo_metadata_successfully(session_with_photos): | ||||||
|  |     session, photos = session_with_photos | ||||||
|  |     service = PhotoService(session) | ||||||
|  |     photo_to_update = photos[0] | ||||||
|  |     photo_with_new_data = Photo( | ||||||
|  |         filepath=photo_to_update.filepath, | ||||||
|  |         name="Novo Nome da Foto", | ||||||
|  |         caption="Nova legenda.", | ||||||
|  |         photo_hash=photo_to_update.photo_hash,  # Hash não muda | ||||||
|  |         addition_date=photo_to_update.addition_date, | ||||||
|  |         fk_travel_diary_id=photo_to_update.fk_travel_diary_id | ||||||
|  |     ) | ||||||
|  |     updated_photo = service.update(photo_to_update, photo_with_new_data) | ||||||
|  |     assert updated_photo is not None | ||||||
|  |     assert updated_photo.name == "Novo Nome da Foto" | ||||||
|  |     assert updated_photo.caption == "Nova legenda." | ||||||
|  |     assert updated_photo.photo_hash == "hash1" | ||||||
|  | 
 | ||||||
|  | @patch.object(PhotoService, 'hash_file') | ||||||
|  | @patch('pathlib.Path.unlink') | ||||||
|  | @patch('pathlib.Path.exists') | ||||||
|  | @patch.object(PhotoService, '_copy_photo_to_diary') | ||||||
|  | @patch.object(DirectoryManager, 'get_diaries_root', return_value="/fake/diaries_root") | ||||||
|  | def test_update_photo_with_new_file_successfully( | ||||||
|  |     mock_get_root, mock_copy, mock_exists, mock_unlink, mock_hash, session_with_photos | ||||||
|  | ): | ||||||
|  |     session, photos = session_with_photos | ||||||
|  |     service = PhotoService(session) | ||||||
|  |     photo_to_update = photos[0] | ||||||
|  |     new_source_path = Path("/path/para/nova_imagem.jpg") | ||||||
|  |     new_copied_path = Path(f"/fake/diaries_root/{photo_to_update.travel_diary.directory_name}/images/nova_imagem.jpg") | ||||||
|  |     mock_copy.return_value = new_copied_path | ||||||
|  |     mock_exists.return_value = True | ||||||
|  |     mock_hash.return_value = "novo_hash_calculado" | ||||||
|  |     photo_with_new_file = Photo( | ||||||
|  |         filepath=new_source_path, | ||||||
|  |         name=photo_to_update.name, | ||||||
|  |         photo_hash="hash_antigo", | ||||||
|  |         fk_travel_diary_id=photo_to_update.fk_travel_diary_id | ||||||
|  |     ) | ||||||
|  |     updated_photo = service.update(photo_to_update, photo_with_new_file) | ||||||
|  |     mock_copy.assert_called_once_with(new_source_path, photo_to_update.travel_diary) | ||||||
|  |     mock_unlink.assert_called_once() | ||||||
|  |     mock_hash.assert_called_once_with(new_copied_path) | ||||||
|  |     assert updated_photo.filepath == str(new_copied_path) | ||||||
|  |     assert updated_photo.photo_hash == "novo_hash_calculado" | ||||||
		Loading…
	
		Reference in New Issue