@@ -12,12 +12,12 @@ namespace NzbDrone.Integration.Test.Client
1212{
1313 public class ClientBase
1414 {
15- protected readonly IRestClient _restClient ;
15+ protected readonly RestClient _restClient ;
1616 protected readonly string _resource ;
1717 protected readonly string _apiKey ;
1818 protected readonly Logger _logger ;
1919
20- public ClientBase ( IRestClient restClient , string apiKey , string resource )
20+ public ClientBase ( RestClient restClient , string apiKey , string resource )
2121 {
2222 _restClient = restClient ;
2323 _resource = resource ;
@@ -28,25 +28,24 @@ public ClientBase(IRestClient restClient, string apiKey, string resource)
2828
2929 public RestRequest BuildRequest ( string command = "" )
3030 {
31- var request = new RestRequest ( _resource + "/" + command . Trim ( '/' ) )
32- {
33- RequestFormat = DataFormat . Json ,
34- } ;
31+ var request = new RestRequest ( _resource + "/" + command . Trim ( '/' ) ) ;
3532
3633 request . AddHeader ( "Authorization" , _apiKey ) ;
3734 request . AddHeader ( "X-Api-Key" , _apiKey ) ;
3835
3936 return request ;
4037 }
4138
42- public string Execute ( IRestRequest request , HttpStatusCode statusCode )
39+ public string Execute ( RestRequest request , HttpStatusCode statusCode )
4340 {
4441 _logger . Info ( "{0}: {1}" , request . Method , _restClient . BuildUri ( request ) ) ;
4542
4643 var response = _restClient . Execute ( request ) ;
4744 _logger . Info ( "Response: {0}" , response . Content ) ;
4845
49- if ( response . ErrorException != null )
46+ // In RestSharp v107+, ErrorException is set for HTTP error status codes too.
47+ // Only throw for transport/network errors, not HTTP status code errors.
48+ if ( response . ErrorException != null && response . ErrorException is not System . Net . Http . HttpRequestException )
5049 {
5150 throw response . ErrorException ;
5251 }
@@ -60,29 +59,32 @@ public string Execute(IRestRequest request, HttpStatusCode statusCode)
6059 return response . Content ;
6160 }
6261
63- public T Execute < T > ( IRestRequest request , HttpStatusCode statusCode )
62+ public T Execute < T > ( RestRequest request , HttpStatusCode statusCode )
6463 where T : class , new ( )
6564 {
6665 var content = Execute ( request , statusCode ) ;
6766
6867 return Json . Deserialize < T > ( content ) ;
6968 }
7069
71- private static void AssertDisableCache ( IRestResponse response )
70+ private static void AssertDisableCache ( RestResponse response )
7271 {
7372 // cache control header gets reordered on net core
74- var headers = response . Headers ;
75- ( ( string ) headers . SingleOrDefault ( c => c . Name == "Cache-Control" ) ? . Value ?? string . Empty ) . Split ( ',' ) . Select ( x => x . Trim ( ) )
73+ // In RestSharp v107+, headers are split between Headers (response) and ContentHeaders (content)
74+ var allHeaders = ( response . Headers ?? Enumerable . Empty < HeaderParameter > ( ) )
75+ . Concat ( response . ContentHeaders ?? Enumerable . Empty < HeaderParameter > ( ) )
76+ . ToList ( ) ;
77+ ( ( string ) allHeaders . SingleOrDefault ( c => c . Name == "Cache-Control" ) ? . Value ?? string . Empty ) . Split ( ',' ) . Select ( x => x . Trim ( ) )
7678 . Should ( ) . BeEquivalentTo ( "no-store, no-cache" . Split ( ',' ) . Select ( x => x . Trim ( ) ) ) ;
77- headers . Single ( c => c . Name == "Pragma" ) . Value . Should ( ) . Be ( "no-cache" ) ;
78- headers . Single ( c => c . Name == "Expires" ) . Value . Should ( ) . Be ( "-1" ) ;
79+ allHeaders . Single ( c => c . Name == "Pragma" ) . Value . Should ( ) . Be ( "no-cache" ) ;
80+ allHeaders . Single ( c => c . Name == "Expires" ) . Value . Should ( ) . Be ( "-1" ) ;
7981 }
8082 }
8183
8284 public class ClientBase < TResource > : ClientBase
8385 where TResource : RestResource , new ( )
8486 {
85- public ClientBase ( IRestClient restClient , string apiKey , string resource = null )
87+ public ClientBase ( RestClient restClient , string apiKey , string resource = null )
8688 : base ( restClient , apiKey , resource ?? new TResource ( ) . ResourceName )
8789 {
8890 }
@@ -95,7 +97,7 @@ public List<TResource> All(Dictionary<string, object> queryParams = null)
9597 {
9698 foreach ( var param in queryParams )
9799 {
98- request . AddParameter ( param . Key , param . Value ) ;
100+ request . AddQueryParameter ( param . Key , param . Value . ToString ( ) ) ;
99101 }
100102 }
101103
@@ -105,14 +107,14 @@ public List<TResource> All(Dictionary<string, object> queryParams = null)
105107 public PagingResource < TResource > GetPaged ( int pageNumber , int pageSize , string sortKey , string sortDir , string filterKey = null , object filterValue = null )
106108 {
107109 var request = BuildRequest ( ) ;
108- request . AddParameter ( "page" , pageNumber ) ;
109- request . AddParameter ( "pageSize" , pageSize ) ;
110- request . AddParameter ( "sortKey" , sortKey ) ;
111- request . AddParameter ( "sortDir" , sortDir ) ;
110+ request . AddQueryParameter ( "page" , pageNumber . ToString ( ) ) ;
111+ request . AddQueryParameter ( "pageSize" , pageSize . ToString ( ) ) ;
112+ request . AddQueryParameter ( "sortKey" , sortKey ) ;
113+ request . AddQueryParameter ( "sortDir" , sortDir ) ;
112114
113115 if ( filterKey != null && filterValue != null )
114116 {
115- request . AddParameter ( filterKey , filterValue ) ;
117+ request . AddQueryParameter ( filterKey , filterValue . ToString ( ) ) ;
116118 }
117119
118120 return Get < PagingResource < TResource > > ( request ) ;
@@ -170,30 +172,30 @@ public object InvalidPut(TResource body, HttpStatusCode statusCode = HttpStatusC
170172 return Put < object > ( request , statusCode ) ;
171173 }
172174
173- public T Get < T > ( IRestRequest request , HttpStatusCode statusCode = HttpStatusCode . OK )
175+ public T Get < T > ( RestRequest request , HttpStatusCode statusCode = HttpStatusCode . OK )
174176 where T : class , new ( )
175177 {
176- request . Method = Method . GET ;
178+ request . Method = Method . Get ;
177179 return Execute < T > ( request , statusCode ) ;
178180 }
179181
180- public T Post < T > ( IRestRequest request , HttpStatusCode statusCode = HttpStatusCode . Created )
182+ public T Post < T > ( RestRequest request , HttpStatusCode statusCode = HttpStatusCode . Created )
181183 where T : class , new ( )
182184 {
183- request . Method = Method . POST ;
185+ request . Method = Method . Post ;
184186 return Execute < T > ( request , statusCode ) ;
185187 }
186188
187- public T Put < T > ( IRestRequest request , HttpStatusCode statusCode = HttpStatusCode . Accepted )
189+ public T Put < T > ( RestRequest request , HttpStatusCode statusCode = HttpStatusCode . Accepted )
188190 where T : class , new ( )
189191 {
190- request . Method = Method . PUT ;
192+ request . Method = Method . Put ;
191193 return Execute < T > ( request , statusCode ) ;
192194 }
193195
194- public void Delete ( IRestRequest request , HttpStatusCode statusCode = HttpStatusCode . OK )
196+ public void Delete ( RestRequest request , HttpStatusCode statusCode = HttpStatusCode . OK )
195197 {
196- request . Method = Method . DELETE ;
198+ request . Method = Method . Delete ;
197199 Execute < object > ( request , statusCode ) ;
198200 }
199201 }
0 commit comments