22import unittest
33from typing import List
44from unittest .mock import patch , MagicMock
5+
6+ from build .lib .flow_preprocessor .exceptions .exceptions import ImageProcessException
7+ from flow_preprocessor .exceptions .exceptions import ImageFetchException
58from flow_preprocessor .preprocessing_logic .fetch_images import ImageDownloader
69from 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