11from unittest .mock import MagicMock , patch
22
3+ import pytest
4+ import requests
35from fastapi import status
46from httpx import Response
7+ from requests import RequestException
58
69from daq_config_server .app import ValidAcceptHeaders
710from daq_config_server .client import ConfigServer , RequestedResponseFormats
811from daq_config_server .constants import ENDPOINTS
912
1013
14+ def make_test_response (
15+ content : str ,
16+ status_code : int = 200 ,
17+ raise_exc : type [RequestException ] | None = None ,
18+ json_value : str | None = None ,
19+ content_type = ValidAcceptHeaders .PLAIN_TEXT ,
20+ ):
21+ r = Response (
22+ json = json_value ,
23+ status_code = status_code ,
24+ headers = {"content-type" : content_type },
25+ content = content ,
26+ )
27+ r .raise_for_status = MagicMock ()
28+
29+ if raise_exc :
30+ r .raise_for_status .side_effect = raise_exc
31+ else :
32+ r .raise_for_status .return_value = None
33+ return r
34+
35+
1136@patch ("daq_config_server.client.requests.get" )
1237def test_get_file_contents_default_header (mock_request : MagicMock ):
13- content_type = ValidAcceptHeaders .PLAIN_TEXT
1438 mock_request .return_value = Response (
1539 status_code = status .HTTP_200_OK ,
1640 content = "test" ,
17- headers = {
18- "content-type" : content_type ,
19- },
2041 )
42+ mock_request .return_value = make_test_response ("test" )
2143 file_path = "test"
2244 url = "url"
2345 server = ConfigServer (url )
@@ -34,13 +56,8 @@ def test_get_file_contents_warns_and_gives_bytes_on_invalid_json(
3456):
3557 content_type = ValidAcceptHeaders .JSON
3658 bad_json = "bad_dict}"
37- mock_request .return_value = Response (
38- status_code = status .HTTP_200_OK ,
39- json = "test" ,
40- headers = {
41- "content-type" : content_type ,
42- },
43- content = bad_json ,
59+ mock_request .return_value = make_test_response (
60+ bad_json , content_type = content_type , json_value = bad_json
4461 )
4562 file_path = "test"
4663 url = "url"
@@ -59,28 +76,31 @@ def test_get_file_contents_warns_and_gives_bytes_on_invalid_json(
5976
6077
6178@patch ("daq_config_server.client.requests.get" )
62- def test_logger_warning_if_content_type_doesnt_match_requested_type (
79+ def test_read_unformatted_file_reading_reset_cached_result_true_without_cache (
6380 mock_request : MagicMock ,
6481):
65- headers = {"Accept" : RequestedResponseFormats .DICT }
66- content_type = ValidAcceptHeaders .PLAIN_TEXT
67- text = "text"
68- mock_request .return_value = Response (
69- status_code = status .HTTP_200_OK ,
70- headers = {
71- "content-type" : content_type ,
72- },
73- content = text ,
74- )
82+ """Test reset_cached_result=False and reset_cached_result=True."""
83+ mock_request .side_effect = [
84+ make_test_response ("1st_read" ),
85+ make_test_response ("2nd_read" ),
86+ make_test_response ("3rd_read" ),
87+ ]
7588 file_path = "test"
7689 url = "url"
7790 server = ConfigServer (url )
78- server ._log . warning = MagicMock ()
79- server .get_file_contents (
80- file_path , requested_response_format = RequestedResponseFormats . DICT
81- )
91+ assert server .get_file_contents ( file_path , reset_cached_result = True ) == "1st_read"
92+ assert server .get_file_contents (file_path , reset_cached_result = True ) == "2nd_read"
93+ assert server . get_file_contents ( file_path , reset_cached_result = False ) == "2nd_read"
94+
8295
83- server ._log .warning .assert_called_once_with (
84- f"Server failed to parse the file as requested. Requested \
85- { headers ['Accept' ]} but response came as content-type { content_type } "
96+ @patch ("daq_config_server.client.requests.get" )
97+ def test_read_unformatted_file_reading_not_OK (mock_request : MagicMock ):
98+ """Test that a non-200 response raises a RequestException."""
99+ mock_request .return_value = make_test_response (
100+ "1st_read" , status .HTTP_204_NO_CONTENT , raise_exc = requests .exceptions .HTTPError
86101 )
102+ file_path = "test"
103+ url = "url"
104+ server = ConfigServer (url )
105+ with pytest .raises (requests .exceptions .HTTPError ):
106+ server .get_file_contents (file_path )
0 commit comments