1+ from datetime import date
12from unittest .mock import patch , Mock
23from io import BytesIO
34import time
@@ -210,6 +211,19 @@ def test_download_file_retries_on_download_timeout(mock_read_into, mock_path, mo
210211 # Should have been called 3 times (2 failures + 1 success)
211212 assert mock_read_into .call_count == 3
212213
214+ @patch ('vulmatch.worker.tasks.requests.get' )
215+ @patch ('vulmatch.worker.tasks.read_into' )
216+ def test_download_file_handles_empty_bundle_correctly (mock_read_into , mock_get , job , tmp_path , eager_celery ):
217+ mock_read_into .return_value = 2
218+ tempdir = str (tmp_path )
219+ mock_response = Mock ()
220+ mock_response .status_code = 200
221+ mock_response .url = 'https://example.com/file.json'
222+ mock_get .return_value = mock_response
223+ result = tasks .download_file .delay ('https://example.com/file.json' , tempdir , job_id = job .id )
224+ assert result .get () == ""
225+
226+
213227
214228@patch ('vulmatch.worker.tasks.requests.get' )
215229def test_download_file_max_retries_exceeded (mock_get , job , tmp_path , eager_celery ):
@@ -231,3 +245,35 @@ def test_download_file_max_retries_exceeded(mock_get, job, tmp_path, eager_celer
231245 assert 'after 3 retries' in job .errors [0 ]
232246 assert 'Network error' in job .errors [0 ]
233247
248+
249+ @pytest .mark .parametrize (
250+ "d,should_fail" ,
251+ [
252+ (date (2027 , 1 , 1 ), True ),
253+ (date (2025 , 1 , 1 ), False ),
254+ (date (2026 , 10 , 11 ), True ),
255+ (date (2026 , 6 , 10 ), False ),
256+ ]
257+ )
258+ @patch ('vulmatch.worker.tasks.requests.get' )
259+ def test_download_file__fails_on_404 (mock_get , job , tmp_path , d , should_fail , eager_celery ):
260+ """Test download_file fails after max retries"""
261+ from requests .models import Response
262+ r = Response ()
263+ r .status_code = 404
264+ mock_get .return_value = r
265+ tempdir = str (tmp_path )
266+
267+ # with pytest.raises(requests.exceptions.RequestException):
268+ r = tasks .download_file .delay ('https://example.com/file.json' , tempdir , job_id = job .id , file_date = d )
269+
270+ # Should have been called 4 times (1 initial + 3 retries as per max_retries=3)
271+ assert mock_get .call_count == 1
272+ assert r .failed () == should_fail
273+
274+ job .refresh_from_db ()
275+ assert len (job .errors ) == 1
276+ if should_fail :
277+ assert "file does not exist on remote server: https://example.com/file.json" in job .errors [0 ]
278+
279+
0 commit comments