@@ -109,6 +109,40 @@ def test_connection_error(self, mock_urlopen):
109109 assert result ["score" ] == 0.0
110110 assert "Connection error" in result ["reason" ]
111111
112+ @patch ("app_health.urlopen" )
113+ def test_non_2xx_expected_status (self , mock_urlopen ):
114+ """Non-2xx expected_status should match against HTTPError code."""
115+ mock_urlopen .side_effect = HTTPError (
116+ url = "" , code = 404 , msg = "Not Found" , hdrs = {}, fp = None
117+ )
118+
119+ result = app_health .grade ({
120+ "params" : {
121+ "endpoints" : [
122+ {"url" : "https://example.com/deleted" , "expected_status" : 404 },
123+ ],
124+ "retries" : 1 ,
125+ }
126+ })
127+ assert result ["score" ] == 1.0
128+
129+ @patch ("app_health.urlopen" )
130+ def test_non_2xx_unexpected_status (self , mock_urlopen ):
131+ """HTTPError with wrong code should fail."""
132+ mock_urlopen .side_effect = HTTPError (
133+ url = "" , code = 500 , msg = "Server Error" , hdrs = {}, fp = None
134+ )
135+
136+ result = app_health .grade ({
137+ "params" : {
138+ "endpoints" : [
139+ {"url" : "https://example.com/fail" , "expected_status" : 200 },
140+ ],
141+ "retries" : 1 ,
142+ }
143+ })
144+ assert result ["score" ] == 0.0
145+
112146 def test_empty_url_fails (self ):
113147 result = app_health .grade ({
114148 "params" : {
@@ -131,7 +165,7 @@ def test_missing_params_returns_zero(self):
131165 assert result ["score" ] == 0.0
132166 assert "Missing" in result ["reason" ]
133167
134- @patch ("cleanup_validator .get_access_token" )
168+ @patch ("azure_auth .get_access_token" )
135169 @patch ("cleanup_validator.urlopen" )
136170 def test_resource_group_deleted (self , mock_urlopen , mock_token ):
137171 mock_token .return_value = "fake-token"
@@ -148,7 +182,7 @@ def test_resource_group_deleted(self, mock_urlopen, mock_token):
148182 assert result ["score" ] == 1.0
149183 assert "successfully deleted" in result ["reason" ]
150184
151- @patch ("cleanup_validator .get_access_token" )
185+ @patch ("azure_auth .get_access_token" )
152186 @patch ("cleanup_validator.urlopen" )
153187 def test_resource_group_still_exists (self , mock_urlopen , mock_token ):
154188 mock_token .return_value = "fake-token"
@@ -174,7 +208,7 @@ def test_resource_group_still_exists(self, mock_urlopen, mock_token):
174208 assert result ["score" ] == 0.0
175209 assert "still exists" in result ["reason" ]
176210
177- @patch ("cleanup_validator .get_access_token" )
211+ @patch ("azure_auth .get_access_token" )
178212 @patch ("cleanup_validator.urlopen" )
179213 def test_resource_group_deleting (self , mock_urlopen , mock_token ):
180214 mock_token .return_value = "fake-token"
@@ -207,7 +241,7 @@ def test_missing_params_returns_zero(self):
207241 assert result ["score" ] == 0.0
208242 assert "Missing" in result ["reason" ]
209243
210- @patch ("infra_validator .get_access_token" )
244+ @patch ("azure_auth .get_access_token" )
211245 @patch ("infra_validator.urlopen" )
212246 def test_resource_group_not_found (self , mock_urlopen , mock_token ):
213247 mock_token .return_value = "fake-token"
@@ -224,7 +258,7 @@ def test_resource_group_not_found(self, mock_urlopen, mock_token):
224258 assert result ["score" ] == 0.0
225259 assert "does not exist" in result ["reason" ]
226260
227- @patch ("infra_validator .get_access_token" )
261+ @patch ("azure_auth .get_access_token" )
228262 @patch ("infra_validator.urlopen" )
229263 def test_all_expected_resources_found (self , mock_urlopen , mock_token ):
230264 mock_token .return_value = "fake-token"
@@ -255,7 +289,7 @@ def test_all_expected_resources_found(self, mock_urlopen, mock_token):
255289 assert result ["score" ] == 1.0
256290 assert "All expected resources found" in result ["reason" ]
257291
258- @patch ("infra_validator .get_access_token" )
292+ @patch ("azure_auth .get_access_token" )
259293 @patch ("infra_validator.urlopen" )
260294 def test_missing_expected_resources (self , mock_urlopen , mock_token ):
261295 mock_token .return_value = "fake-token"
@@ -283,7 +317,7 @@ def test_missing_expected_resources(self, mock_urlopen, mock_token):
283317 assert result ["score" ] == 0.5
284318 assert "Missing resources" in result ["reason" ]
285319
286- @patch ("infra_validator .get_access_token" )
320+ @patch ("azure_auth .get_access_token" )
287321 @patch ("infra_validator.urlopen" )
288322 def test_rg_exists_no_expected_resources (self , mock_urlopen , mock_token ):
289323 mock_token .return_value = "fake-token"
0 commit comments