@@ -257,9 +257,7 @@ impl AggregatorHTTPClient {
257
257
258
258
Err ( self . handle_api_error ( response. headers ( ) ) . await )
259
259
}
260
- StatusCode :: NOT_FOUND => Err ( AggregatorClientError :: RemoteServerLogical ( anyhow ! (
261
- "Url='{url}' not found"
262
- ) ) ) ,
260
+ StatusCode :: NOT_FOUND => Err ( Self :: not_found_error ( url) ) ,
263
261
status_code if status_code. is_client_error ( ) => {
264
262
Err ( Self :: remote_logical_error ( response) . await )
265
263
}
@@ -301,9 +299,7 @@ impl AggregatorHTTPClient {
301
299
302
300
Err ( self . handle_api_error ( response. headers ( ) ) . await )
303
301
}
304
- StatusCode :: NOT_FOUND => Err ( AggregatorClientError :: RemoteServerLogical ( anyhow ! (
305
- "Url='{url} not found"
306
- ) ) ) ,
302
+ StatusCode :: NOT_FOUND => Err ( Self :: not_found_error ( url) ) ,
307
303
status_code if status_code. is_client_error ( ) => {
308
304
Err ( Self :: remote_logical_error ( response) . await )
309
305
}
@@ -339,6 +335,10 @@ impl AggregatorHTTPClient {
339
335
}
340
336
}
341
337
338
+ fn not_found_error ( url : Url ) -> AggregatorClientError {
339
+ AggregatorClientError :: RemoteServerLogical ( anyhow ! ( "Url='{url}' not found" ) )
340
+ }
341
+
342
342
async fn remote_logical_error ( response : Response ) -> AggregatorClientError {
343
343
let status_code = response. status ( ) ;
344
344
let client_error = response
@@ -570,6 +570,38 @@ mod tests {
570
570
assert_error_eq ! ( post_content_error, expected_error) ;
571
571
}
572
572
573
+ #[ tokio:: test]
574
+ async fn test_client_handle_404_not_found_error ( ) {
575
+ let client_error = ClientError :: new ( "label" , "message" ) ;
576
+
577
+ let ( aggregator, client) = setup_server_and_client ( ) ;
578
+ aggregator. mock ( |_when, then| {
579
+ then. status ( StatusCode :: NOT_FOUND . as_u16 ( ) )
580
+ . json_body_obj ( & client_error) ;
581
+ } ) ;
582
+
583
+ let expected_error = AggregatorHTTPClient :: not_found_error (
584
+ Url :: parse ( & format ! (
585
+ "{}/{}" ,
586
+ aggregator. base_url( ) ,
587
+ AggregatorRequest :: ListCertificates . route( )
588
+ ) )
589
+ . unwrap ( ) ,
590
+ ) ;
591
+
592
+ let get_content_error = client
593
+ . get_content ( AggregatorRequest :: ListCertificates )
594
+ . await
595
+ . unwrap_err ( ) ;
596
+ assert_error_eq ! ( get_content_error, expected_error) ;
597
+
598
+ let post_content_error = client
599
+ . post_content ( AggregatorRequest :: ListCertificates )
600
+ . await
601
+ . unwrap_err ( ) ;
602
+ assert_error_eq ! ( post_content_error, expected_error) ;
603
+ }
604
+
573
605
#[ tokio:: test]
574
606
async fn test_client_handle_5xx_errors ( ) {
575
607
let server_error = ServerError :: new ( "message" ) ;
0 commit comments