Skip to content

Commit 378d9e7

Browse files
committed
Bump NLog 6.1.1→6.1.2, migrate RestSharp 106→114
NLog patch bump across all projects. RestSharp 114 migration (integration tests only): - IRestClient/IRestRequest/IRestResponse → concrete types - Method.GET/POST/PUT/DELETE → Method.Get/Post/Put/Delete - AddParameter → AddQueryParameter for query strings - RequestFormat/DataFormat removed - RestClient constructor now uses RestClientOptions - ResponseStatus.Completed → IsSuccessful Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0d0b56b commit 378d9e7

26 files changed

Lines changed: 92 additions & 82 deletions

src/Gamarr.Api.V3/Gamarr.Api.V3.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<ItemGroup>
66
<PackageReference Include="FluentValidation" Version="12.1.1" />
77
<PackageReference Include="Ical.Net" Version="5.2.1" />
8-
<PackageReference Include="NLog" Version="6.1.1" />
8+
<PackageReference Include="NLog" Version="6.1.2" />
99
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="8.1.4" />
1010
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="8.1.4" />
1111
</ItemGroup>

src/Gamarr.Http/Gamarr.Http.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<ItemGroup>
66
<PackageReference Include="FluentValidation" Version="12.1.1" />
77
<PackageReference Include="ImpromptuInterface" Version="8.0.6" />
8-
<PackageReference Include="NLog" Version="6.1.1" />
8+
<PackageReference Include="NLog" Version="6.1.2" />
99
</ItemGroup>
1010
<ItemGroup>
1111
<ProjectReference Include="..\NzbDrone.Core\Gamarr.Core.csproj" />

src/NzbDrone.Common/Gamarr.Common.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.5" />
1010
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="10.0.5" />
1111
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
12-
<PackageReference Include="NLog" Version="6.1.1" />
12+
<PackageReference Include="NLog" Version="6.1.2" />
1313
<PackageReference Include="NLog.Layouts.ClefJsonLayout" Version="1.0.5" />
1414
<PackageReference Include="NLog.Extensions.Logging" Version="6.1.2" />
1515
<PackageReference Include="Npgsql" Version="10.0.2" />

src/NzbDrone.Core/Gamarr.Core.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<PackageReference Include="FluentValidation" Version="12.1.1" />
2424
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.12" />
2525
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
26-
<PackageReference Include="NLog" Version="6.1.1" />
26+
<PackageReference Include="NLog" Version="6.1.2" />
2727
<PackageReference Include="MonoTorrent" Version="3.0.2" />
2828
</ItemGroup>
2929
<ItemGroup>

src/NzbDrone.Integration.Test/ApiTests/CalendarFixture.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using NUnit.Framework;
66
using NzbDrone.Integration.Test.Client;
77
using Gamarr.Api.V3.Games;
8+
using RestSharp;
89

910
namespace NzbDrone.Integration.Test.ApiTests
1011
{
@@ -26,8 +27,8 @@ public void should_be_able_to_get_games()
2627
var game = EnsureGame(620, "Portal 2", true);
2728

2829
var request = Calendar.BuildRequest();
29-
request.AddParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
30-
request.AddParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
30+
request.AddQueryParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
31+
request.AddQueryParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
3132
var items = Calendar.Get<List<GameResource>>(request);
3233

3334
items = items.Where(v => v.Id == game.Id).ToList();
@@ -42,9 +43,9 @@ public void should_not_be_able_to_get_unmonitored_games()
4243
var game = EnsureGame(620, "Portal 2", false);
4344

4445
var request = Calendar.BuildRequest();
45-
request.AddParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
46-
request.AddParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
47-
request.AddParameter("unmonitored", "false");
46+
request.AddQueryParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
47+
request.AddQueryParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
48+
request.AddQueryParameter("unmonitored", "false");
4849
var items = Calendar.Get<List<GameResource>>(request);
4950

5051
items = items.Where(v => v.Id == game.Id).ToList();
@@ -58,9 +59,9 @@ public void should_be_able_to_get_unmonitored_games()
5859
var game = EnsureGame(620, "Portal 2", false);
5960

6061
var request = Calendar.BuildRequest();
61-
request.AddParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
62-
request.AddParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
63-
request.AddParameter("unmonitored", "true");
62+
request.AddQueryParameter("start", new DateTime(2011, 4, 1).ToString("s") + "Z");
63+
request.AddQueryParameter("end", new DateTime(2011, 5, 1).ToString("s") + "Z");
64+
request.AddQueryParameter("unmonitored", "true");
6465
var items = Calendar.Get<List<GameResource>>(request);
6566

6667
items = items.Where(v => v.Id == game.Id).ToList();

src/NzbDrone.Integration.Test/ApiTests/FileSystemFixture.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void SetUp()
3838
public void get_filesystem_content_excluding_files()
3939
{
4040
var request = FileSystem.BuildRequest();
41-
request.Method = Method.GET;
41+
request.Method = Method.Get;
4242
request.AddQueryParameter("path", _folder);
4343

4444
var result = FileSystem.Execute<FileSystemResult>(request, HttpStatusCode.OK);
@@ -52,7 +52,7 @@ public void get_filesystem_content_excluding_files()
5252
public void get_filesystem_content_including_files()
5353
{
5454
var request = FileSystem.BuildRequest();
55-
request.Method = Method.GET;
55+
request.Method = Method.Get;
5656
request.AddQueryParameter("path", _folder);
5757
request.AddQueryParameter("includeFiles", "true");
5858

@@ -69,7 +69,7 @@ public void get_filesystem_content_including_files()
6969
public void get_entity_type_should_return_file()
7070
{
7171
var request = FileSystem.BuildRequest("type");
72-
request.Method = Method.GET;
72+
request.Method = Method.Get;
7373
request.AddQueryParameter("path", _file);
7474

7575
var result = FileSystem.Execute<FileSystemModel>(request, HttpStatusCode.OK);
@@ -81,7 +81,7 @@ public void get_entity_type_should_return_file()
8181
public void get_entity_type_should_return_folder()
8282
{
8383
var request = FileSystem.BuildRequest("type");
84-
request.Method = Method.GET;
84+
request.Method = Method.Get;
8585
request.AddQueryParameter("path", _folder);
8686

8787
var result = FileSystem.Execute<FileSystemModel>(request, HttpStatusCode.OK);
@@ -93,7 +93,7 @@ public void get_entity_type_should_return_folder()
9393
public void get_entity_type_should_return_folder_for_unknown()
9494
{
9595
var request = FileSystem.BuildRequest("type");
96-
request.Method = Method.GET;
96+
request.Method = Method.Get;
9797
request.AddQueryParameter("path", _file + ".unknown");
9898

9999
var result = FileSystem.Execute<FileSystemModel>(request, HttpStatusCode.OK);
@@ -108,7 +108,7 @@ public void get_all_mediafiles()
108108
File.WriteAllText(Path.Combine(tempDir, "somegame.iso"), "game");
109109

110110
var request = FileSystem.BuildRequest("mediafiles");
111-
request.Method = Method.GET;
111+
request.Method = Method.Get;
112112
request.AddQueryParameter("path", tempDir);
113113

114114
var result = FileSystem.Execute<List<Dictionary<string, string>>>(request, HttpStatusCode.OK);

src/NzbDrone.Integration.Test/ApiTests/GoldenFlowFixture.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using NzbDrone.Core.Games.Commands;
77
using NzbDrone.Core.IndexerSearch;
88
using Gamarr.Api.V3.RootFolders;
9+
using RestSharp;
910

1011
namespace NzbDrone.Integration.Test.ApiTests
1112
{
@@ -156,7 +157,7 @@ public void step7_verify_queue_accessible()
156157

157158
// Get queue - should be accessible even if empty
158159
var request = Queue.BuildRequest();
159-
request.AddParameter("includeUnknownGameItems", true);
160+
request.AddQueryParameter("includeUnknownGameItems", "true");
160161

161162
var queue = Queue.Get<Gamarr.Http.PagingResource<Gamarr.Api.V3.Queue.QueueResource>>(request);
162163

src/NzbDrone.Integration.Test/ApiTests/GoldenFlowMockFixture.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using NzbDrone.Core.Games.Commands;
77
using NzbDrone.Core.IndexerSearch;
88
using Gamarr.Api.V3.RootFolders;
9+
using RestSharp;
910

1011
namespace NzbDrone.Integration.Test.ApiTests
1112
{
@@ -160,7 +161,7 @@ public void mock_step7_verify_queue_accessible()
160161

161162
// Get queue - should be accessible even if empty
162163
var request = Queue.BuildRequest();
163-
request.AddParameter("includeUnknownGameItems", true);
164+
request.AddQueryParameter("includeUnknownGameItems", "true");
164165

165166
var queue = Queue.Get<Gamarr.Http.PagingResource<Gamarr.Api.V3.Queue.QueueResource>>(request);
166167

src/NzbDrone.Integration.Test/ApiTests/QueueFixture.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using NzbDrone.Integration.Test.Client;
99
using Gamarr.Api.V3.Queue;
1010
using Gamarr.Http;
11+
using RestSharp;
1112

1213
namespace NzbDrone.Integration.Test.ApiTests
1314
{
@@ -17,7 +18,7 @@ public class QueueFixture : IntegrationTest
1718
private PagingResource<QueueResource> GetFirstPage()
1819
{
1920
var request = Queue.BuildRequest();
20-
request.AddParameter("includeUnknownGameItems", true);
21+
request.AddQueryParameter("includeUnknownGameItems", "true");
2122

2223
return Queue.Get<PagingResource<QueueResource>>(request);
2324
}

src/NzbDrone.Integration.Test/Client/ClientBase.cs

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)