1
1
using System . Net ;
2
2
using System . Text ;
3
+ using RestSharp . Extensions ;
3
4
using RestSharp . Tests . Shared . Fixtures ;
4
5
5
6
namespace RestSharp . Tests . Integrated ;
@@ -9,6 +10,7 @@ public DownloadFileTests() {
9
10
_server = HttpServerFixture . StartServer ( "Assets/Koala.jpg" , FileHandler ) ;
10
11
var options = new RestClientOptions ( _server . Url ) { ThrowOnAnyError = true } ;
11
12
_client = new RestClient ( options ) ;
13
+ _clientNoThrow = new RestClient ( _server . Url ) ;
12
14
}
13
15
14
16
public void Dispose ( ) => _server . Dispose ( ) ;
@@ -28,6 +30,7 @@ void FileHandler(HttpListenerRequest request, HttpListenerResponse response) {
28
30
29
31
readonly HttpServerFixture _server ;
30
32
readonly RestClient _client ;
33
+ readonly RestClient _clientNoThrow ;
31
34
readonly string _path = AppDomain . CurrentDomain . BaseDirectory ;
32
35
33
36
[ Fact ]
@@ -65,6 +68,52 @@ public async Task Handles_Binary_File_Download() {
65
68
Assert . Equal ( expected , response ) ;
66
69
}
67
70
71
+ [ Fact ]
72
+ public async Task Runs_ErrorHandler_On_Download_Request_Failure ( ) {
73
+ var client = new RestClient ( "http://localhost:12345" ) ;
74
+ var request = new RestRequest ( "nonexisting" ) ;
75
+ RestResponse ? errorResponse = null ;
76
+ var stream = await client . DownloadStreamAsync ( request , ( r ) => {
77
+ errorResponse = r ;
78
+ } ) ;
79
+
80
+ Assert . Null ( stream ) ;
81
+ Assert . NotNull ( errorResponse ) ;
82
+ Assert . Equal ( ResponseStatus . Error , errorResponse . ResponseStatus ) ;
83
+ }
84
+
85
+ [ Fact ]
86
+ public async Task Runs_ErrorHandler_On_Download_Response_StatusCode_Not_Successful ( ) {
87
+ var request = new RestRequest ( "Assets/Koala1.jpg" ) ;
88
+ RestResponse ? errorResponse = null ;
89
+ var stream = await _clientNoThrow . DownloadStreamAsync ( request , ( r ) => {
90
+ errorResponse = r ;
91
+ } ) ;
92
+
93
+ Assert . Null ( stream ) ;
94
+ Assert . NotNull ( errorResponse ) ;
95
+ Assert . Equal ( ResponseStatus . Completed , errorResponse . ResponseStatus ) ;
96
+ Assert . False ( errorResponse . IsSuccessStatusCode ) ;
97
+ Assert . Equal ( HttpStatusCode . NotFound , errorResponse . StatusCode ) ;
98
+ }
99
+
100
+ [ Fact ]
101
+ public async Task Doesnt_Run_ErrorHandler_On_Download_Success ( ) {
102
+ var request = new RestRequest ( "Assets/Koala.jpg" ) ;
103
+ RestResponse ? errorResponse = null ;
104
+ var stream = await _clientNoThrow . DownloadStreamAsync ( request , ( r ) => {
105
+ errorResponse = r ;
106
+ } ) ;
107
+
108
+ Assert . NotNull ( stream ) ;
109
+ Assert . Null ( errorResponse ) ;
110
+
111
+ var expected = await File . ReadAllBytesAsync ( Path . Combine ( _path , "Assets" , "Koala.jpg" ) ) ;
112
+ var bytes = await stream . ReadAsBytes ( CancellationToken . None ) ;
113
+
114
+ Assert . Equal ( expected , bytes ) ;
115
+ }
116
+
68
117
[ Fact ]
69
118
public async Task Writes_Response_To_Stream ( ) {
70
119
var tempFile = Path . GetTempFileName ( ) ;
0 commit comments