(
method: str,
url: str,
params: dict[str, str] | None,
headers: dict[str, str] | None,
data: dict[str, Any] | str | None,
json_data: dict[str, Any] | None,
expected_body: bytes,
expected_headers: dict[str, str],
)
| 109 | ], |
| 110 | ) |
| 111 | def test_make_request( |
| 112 | method: str, |
| 113 | url: str, |
| 114 | params: dict[str, str] | None, |
| 115 | headers: dict[str, str] | None, |
| 116 | data: dict[str, Any] | str | None, |
| 117 | json_data: dict[str, Any] | None, |
| 118 | expected_body: bytes, |
| 119 | expected_headers: dict[str, str], |
| 120 | ): |
| 121 | mock_response = MagicMock() |
| 122 | mock_response.getcode.return_value = 200 |
| 123 | mock_response.read.return_value = b'{"key": "value"}' |
| 124 | mock_response.headers = {"Content-Type": "application/json"} |
| 125 | mock_response.__enter__.return_value = mock_response |
| 126 | mock_response.__exit__.return_value = None |
| 127 | |
| 128 | with patch( |
| 129 | "urllib.request.urlopen", return_value=mock_response |
| 130 | ) as mock_urlopen: |
| 131 | response = _make_request( |
| 132 | method, |
| 133 | url, |
| 134 | params=params, |
| 135 | headers=headers, |
| 136 | data=data, |
| 137 | json_data=json_data, |
| 138 | ) |
| 139 | |
| 140 | # Verify request was made |
| 141 | mock_urlopen.assert_called_once() |
| 142 | request_arg = mock_urlopen.call_args[0][0] |
| 143 | |
| 144 | # Check method and URL |
| 145 | assert request_arg.get_method() == method |
| 146 | if params: |
| 147 | assert "param=value" in request_arg.full_url |
| 148 | |
| 149 | # Check body |
| 150 | assert request_arg.data == expected_body |
| 151 | |
| 152 | # Check headers |
| 153 | for key, value in expected_headers.items(): |
| 154 | # urllib.request.Request normalizes header names to Title-case |
| 155 | # We need to check the actual header values as they're stored |
| 156 | found_header = False |
| 157 | for header_name, header_value in request_arg.headers.items(): |
| 158 | if header_name.lower() == key.lower(): |
| 159 | assert header_value == value |
| 160 | found_header = True |
| 161 | break |
| 162 | assert found_header, f"Header {key} not found in request headers" |
| 163 | |
| 164 | # Verify response |
| 165 | assert response.status_code == 200 |
| 166 | assert response.content == b'{"key": "value"}' |
| 167 | assert response.headers == {"Content-Type": "application/json"} |
| 168 |
nothing calls this directly
no test coverage detected
searching dependent graphs…