Skip to content

Commit d063ef4

Browse files
author
danameyer
committed
mock different scenarios for fetching images. Refs #5.
1 parent 7e2f8f3 commit d063ef4

1 file changed

Lines changed: 64 additions & 8 deletions

File tree

tests/unit_tests/fetch_images_test.py

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
import unittest
33
from typing import List
44
from unittest.mock import patch, MagicMock
5+
6+
from build.lib.flow_preprocessor.exceptions.exceptions import ImageProcessException
7+
from flow_preprocessor.exceptions.exceptions import ImageFetchException
58
from flow_preprocessor.preprocessing_logic.fetch_images import ImageDownloader
69
from flow_preprocessor.preprocessing_logic.parse_textlines import Metadata, Page
710

@@ -34,7 +37,8 @@ def setUp(self) -> None:
3437
"https://escriptorium.flow-project.net/media/documents/37/1_0054.png")
3538
self.page_escriptorium = Page("1_0054.png", [], self.metadata_escriptorium)
3639

37-
def test_fetch_images(self) -> None:
40+
@patch.object(ImageDownloader, 'fetch_image')
41+
def test_fetch_images(self, mock_fetch_image) -> None:
3842
"""
3943
Test case to ensure that images are fetched correctly.
4044
@@ -43,13 +47,65 @@ def test_fetch_images(self) -> None:
4347
specified output path. It checks if the number of processed images matches
4448
the number of input XML files, indicating successful processing.
4549
"""
46-
self.image_downloader.fetch_image(self.page_transkribus, self.out_path)
47-
failed_downloads: List[str] = self.image_downloader.get_failed_downloads()
48-
failed_processing: List[str] = self.image_downloader.get_failed_processing()
49-
successes: List[str] = self.image_downloader.get_successes()
50-
processed_dataset_size: int = len(failed_downloads) + len(failed_processing) + len(successes)
51-
52-
self.assertEqual(self.dataset_size, processed_dataset_size)
50+
pages = [self.page_transkribus, self.page_escriptorium]
51+
52+
# Case 1: Both succeed
53+
mock_fetch_image.side_effect = [None, None]
54+
for page in pages:
55+
try:
56+
self.image_downloader.fetch_image(page, self.out_path)
57+
self.image_downloader.successes.append(page.image_file_name)
58+
except ImageFetchException:
59+
self.image_downloader.failed_downloads.append(page.image_file_name)
60+
except ImageProcessException:
61+
self.image_downloader.failed_processing.append(page.image_file_name)
62+
63+
self.assertEqual(len(self.image_downloader.successes), 2)
64+
self.assertEqual(len(self.image_downloader.failed_downloads), 0)
65+
self.assertEqual(len(self.image_downloader.failed_processing), 0)
66+
67+
# Reset state for the next case
68+
self.image_downloader.successes.clear()
69+
self.image_downloader.failed_downloads.clear()
70+
self.image_downloader.failed_processing.clear()
71+
72+
# Case 2: One succeeds, one fails
73+
mock_fetch_image.side_effect = [None, ImageFetchException("Simulated failure")]
74+
for page in pages:
75+
try:
76+
self.image_downloader.fetch_image(page, self.out_path)
77+
self.image_downloader.successes.append(page.image_file_name)
78+
except ImageFetchException:
79+
self.image_downloader.failed_downloads.append(page.image_file_name)
80+
except ImageProcessException:
81+
self.image_downloader.failed_processing.append(page.image_file_name)
82+
83+
self.assertEqual(len(self.image_downloader.successes), 1)
84+
self.assertEqual(len(self.image_downloader.failed_downloads), 1)
85+
self.assertEqual(len(self.image_downloader.failed_processing), 0)
86+
87+
# Reset state for the next case
88+
self.image_downloader.successes.clear()
89+
self.image_downloader.failed_downloads.clear()
90+
self.image_downloader.failed_processing.clear()
91+
92+
# Case 3: Both fail
93+
mock_fetch_image.side_effect = [
94+
ImageFetchException("Simulated failure"),
95+
ImageFetchException("Simulated failure"),
96+
]
97+
for page in pages:
98+
try:
99+
self.image_downloader.fetch_image(page, self.out_path)
100+
self.image_downloader.successes.append(page.image_file_name)
101+
except ImageFetchException:
102+
self.image_downloader.failed_downloads.append(page.image_file_name)
103+
except ImageProcessException:
104+
self.image_downloader.failed_processing.append(page.image_file_name)
105+
106+
self.assertEqual(len(self.image_downloader.successes), 0)
107+
self.assertEqual(len(self.image_downloader.failed_downloads), 2)
108+
self.assertEqual(len(self.image_downloader.failed_processing), 0)
53109

54110
@patch('flow_preprocessor.preprocessing_logic.fetch_images.requests.get')
55111
def test_request_image_via_url(self, mock_get: MagicMock):

0 commit comments

Comments
 (0)