|
1 | | -from unittest.mock import Mock, patch |
2 | | - |
3 | 1 | import pytest # type: ignore |
4 | 2 | from requests.exceptions import RequestException |
5 | 3 |
|
6 | 4 | from src.weather_service import WeatherServiceError, get_weather |
7 | 5 |
|
8 | 6 |
|
9 | | -@patch("src.weather_service.requests.get") |
10 | | -def test_get_weather_success(mock_get): |
| 7 | +def test_get_weather_success(mocker): |
11 | 8 | """ |
12 | 9 | Test that get_weather returns the correct temperature when the API call succeeds. |
13 | 10 | """ |
14 | | - mock_response = Mock() |
15 | | - mock_response.status_code = 200 |
16 | | - mock_response.json.return_value = {"temperature": 22} |
17 | | - mock_get.return_value = mock_response |
| 11 | + mocker.patch( |
| 12 | + "requests.get", |
| 13 | + return_value=mocker.MagicMock( |
| 14 | + status_code=200, json=lambda: {"temperature": 22} |
| 15 | + ), |
| 16 | + ) |
18 | 17 |
|
19 | 18 | result = get_weather("New York", api_key="test_api_key") |
20 | 19 | assert result == 22 |
21 | 20 |
|
22 | 21 |
|
23 | | -@patch("src.weather_service.requests.get") |
24 | | -def test_get_weather_none_temperature(mock_get): |
| 22 | +def test_get_weather_none_temperature(mocker): |
25 | 23 | """ |
26 | 24 | Test that get_weather raises WeatherServiceError if the temperature is None. |
27 | 25 | """ |
28 | | - mock_response = Mock() |
29 | | - mock_response.status_code = 200 |
30 | | - mock_response.json.return_value = {"temperature": None} |
31 | | - mock_get.return_value = mock_response |
| 26 | + mocker.patch( |
| 27 | + "requests.get", |
| 28 | + return_value=mocker.MagicMock( |
| 29 | + status_code=200, json=lambda: {"temperature": None} |
| 30 | + ), |
| 31 | + ) |
32 | 32 |
|
33 | 33 | with pytest.raises( |
34 | 34 | WeatherServiceError, match="Temperature data is missing in the response" |
35 | 35 | ): |
36 | 36 | get_weather("New York", api_key="test_api_key") |
37 | 37 |
|
38 | 38 |
|
39 | | -@patch("src.weather_service.requests.get") |
40 | | -def test_get_weather_failure(mock_get): |
| 39 | +def test_get_weather_failure(mocker): |
41 | 40 | """ |
42 | 41 | Test that get_weather raises WeatherServiceError when the API call fails. |
43 | 42 | """ |
44 | | - mock_response = Mock() |
45 | | - mock_response.status_code = 404 |
46 | | - mock_get.return_value = mock_response |
| 43 | + |
| 44 | + mocker.patch( |
| 45 | + "requests.get", |
| 46 | + return_value=mocker.MagicMock( |
| 47 | + status_code=404, json=lambda: {"temperature": None} |
| 48 | + ), |
| 49 | + ) |
47 | 50 |
|
48 | 51 | with pytest.raises( |
49 | 52 | WeatherServiceError, match="Failed to fetch weather data for NonExistentCity" |
50 | 53 | ): |
51 | 54 | get_weather("NonExistentCity", api_key="test_api_key") |
52 | 55 |
|
53 | 56 |
|
54 | | -@patch("src.weather_service.requests.get") |
55 | | -def test_get_weather_missing_temperature(mock_get): |
| 57 | +def test_get_weather_missing_temperature(mocker): |
56 | 58 | """ |
57 | 59 | Test that get_weather raises WeatherServiceError if temperature is missing in the response. |
58 | 60 | """ |
59 | | - mock_response = Mock() |
60 | | - mock_response.status_code = 200 |
61 | | - mock_response.json.return_value = {} |
62 | | - mock_get.return_value = mock_response |
63 | 61 |
|
| 62 | + mocker.patch( |
| 63 | + "requests.get", |
| 64 | + return_value=mocker.MagicMock(status_code=200, json=lambda: {}), |
| 65 | + ) |
64 | 66 | with pytest.raises( |
65 | 67 | WeatherServiceError, match="Temperature data is missing in the response" |
66 | 68 | ): |
67 | 69 | get_weather("New York", api_key="test_api_key") |
68 | 70 |
|
69 | 71 |
|
70 | | -@patch("src.weather_service.requests.get") |
71 | | -def test_get_weather_json_parsing_error(mock_get): |
| 72 | +def test_get_weather_json_parsing_error(mocker): |
72 | 73 | """ |
73 | 74 | Test that get_weather raises WeatherServiceError if JSON parsing fails. |
74 | 75 | """ |
75 | | - mock_response = Mock() |
76 | | - mock_response.status_code = 200 |
77 | | - mock_response.json.side_effect = ValueError |
78 | | - mock_get.return_value = mock_response |
| 76 | + mocker.patch( |
| 77 | + "requests.get", |
| 78 | + return_value=mocker.MagicMock(status_code=200, json=lambda: "Invalid Json"), |
| 79 | + ) |
79 | 80 |
|
80 | 81 | with pytest.raises(WeatherServiceError, match="Failed to parse weather data"): |
81 | 82 | get_weather("New York", api_key="test_api_key") |
82 | 83 |
|
83 | 84 |
|
84 | | -@patch("src.weather_service.requests.get") |
85 | | -def test_get_weather_request_exception(mock_get): |
| 85 | +def test_get_weather_request_exception(mocker): |
86 | 86 | """ |
87 | 87 | Test that get_weather raises WeatherServiceError if a request exception occurs. |
88 | 88 | """ |
| 89 | + mock_get = mocker.patch("requests.get") |
89 | 90 | mock_get.side_effect = RequestException("Network error") |
90 | 91 |
|
91 | 92 | with pytest.raises( |
|
0 commit comments