12
12
Authentication ,
13
13
BoxSDKError ,
14
14
BoxClient ,
15
+ ResponseFormat ,
15
16
)
16
17
from box_sdk_gen .networking .box_network_client import (
17
18
BoxNetworkClient ,
@@ -467,7 +468,7 @@ def test_fetch_get_json_format_response_success(
467
468
method = "get" ,
468
469
url = "https://example.com" ,
469
470
network_session = network_session_mock ,
470
- response_format = "json" ,
471
+ response_format = ResponseFormat . JSON ,
471
472
)
472
473
)
473
474
@@ -488,7 +489,7 @@ def test_fetch_get_binary_format_response_success(
488
489
method = "get" ,
489
490
url = "https://example.com" ,
490
491
network_session = network_session_mock ,
491
- response_format = "binary" ,
492
+ response_format = ResponseFormat . BINARY ,
492
493
)
493
494
)
494
495
@@ -526,6 +527,37 @@ def test_retryable_status_codes(
526
527
assert mock_requests_session .request .call_count == 3
527
528
528
529
530
+ @pytest .mark .parametrize ("retryable_status_code" , [429 , 500 , 503 ])
531
+ def test_retryable_status_codes_with_invalid__response_body (
532
+ network_client ,
533
+ mock_requests_session ,
534
+ network_session_mock ,
535
+ response_200 ,
536
+ retryable_status_code ,
537
+ response_failure_no_status ,
538
+ ):
539
+ response_failure_no_status .status_code = retryable_status_code
540
+ response_failure_no_status .text = 'Invalid JSON'
541
+ response_200 .text = '{"id": "123456"}'
542
+ mock_requests_session .request .side_effect = [
543
+ response_failure_no_status ,
544
+ response_failure_no_status ,
545
+ response_200 ,
546
+ ]
547
+
548
+ fetch_response = network_client .fetch (
549
+ FetchOptions (
550
+ method = "get" ,
551
+ url = "https://example.com" ,
552
+ network_session = network_session_mock ,
553
+ response_format = ResponseFormat .JSON ,
554
+ )
555
+ )
556
+ assert fetch_response .status == 200
557
+ assert fetch_response .data == {"id" : "123456" }
558
+ assert mock_requests_session .request .call_count == 3
559
+
560
+
529
561
def test_status_code_202_with_no_retry_after_header (
530
562
network_client , mock_requests_session , network_session_mock , response_202
531
563
):
@@ -539,7 +571,7 @@ def test_status_code_202_with_no_retry_after_header(
539
571
)
540
572
)
541
573
assert fetch_response .status == 202
542
- assert fetch_response .data == None
574
+ assert fetch_response .data == {}
543
575
544
576
545
577
def test_retryable_status_code_202 (
@@ -590,7 +622,7 @@ def test_202_should_be_returned_if_retry_limit_is_reached(
590
622
)
591
623
592
624
assert fetch_response .status == 202
593
- assert fetch_response .data == None
625
+ assert fetch_response .data == {}
594
626
595
627
596
628
@pytest .mark .parametrize ("not_retryable_status_code" , [404 , 403 , 400 ])
@@ -871,15 +903,13 @@ def test_raising_api_error_with_valid_json_body(network_client):
871
903
assert e .name == "BoxAPIError"
872
904
873
905
874
- def test_raising_api_error_without_valid_json_body (network_client ):
906
+ @pytest .mark .parametrize ('response_body' , ['' , 'Invalid json' , 123 ])
907
+ def test_raising_api_error_without_valid_json_body (network_client , response_body ):
875
908
client_error_response = Mock (Response )
876
909
client_error_response .status_code = 400
877
910
client_error_response .ok = False
878
911
client_error_response .headers = {}
879
- client_error_response .text = ""
880
- client_error_response .json .side_effect = json .JSONDecodeError (
881
- "Expecting value: line 1 column 1 (char 0)" , "" , 0
882
- )
912
+ client_error_response .text = response_body
883
913
884
914
request = APIRequest (
885
915
method = "POST" ,
@@ -960,6 +990,19 @@ def test_proxy_config():
960
990
assert requests_session .
proxies [
"https" ]
== "http://user:[email protected] :3128/"
961
991
962
992
993
+ @pytest .mark .parametrize (
994
+ "response_body, expected_json" ,
995
+ [
996
+ ('' , {}),
997
+ ('Invalid json' , {}),
998
+ (123 , {}),
999
+ ('{"name": "John"}' , {'name' : 'John' }),
1000
+ ],
1001
+ )
1002
+ def test_read_json_body (response_body , expected_json ):
1003
+ assert BoxNetworkClient ._read_json_body (response_body ) == expected_json
1004
+
1005
+
963
1006
def test_get_options_stream_position (network_client , mock_byte_stream ):
964
1007
mock_byte_stream .seek (1 )
965
1008
options = FetchOptions (
0 commit comments