fix: use /api/status/ for ping instead of /api/

The /api/ endpoint returns HTML (Swagger UI), not JSON.
Changed ping to use /api/status/ which returns JSON with version info.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Barry Walker
2026-01-13 17:38:26 -05:00
parent 5230dd126a
commit dba6c453c4
3 changed files with 13 additions and 38 deletions
@@ -31,14 +31,7 @@ public class PaperlessClientTests : IDisposable
public async Task PingAsync_WhenSuccessful_ReturnsSuccess() public async Task PingAsync_WhenSuccessful_ReturnsSuccess()
{ {
// Arrange // Arrange
_factory.MockHandler _factory.SetupGet("api/status/", """{"pngx_version": "2.0.0", "server_os": "Linux"}""");
.When(HttpMethod.Get, "https://paperless.example.com/api/")
.Respond(req =>
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("X-Version", "2.0.0");
return response;
});
// Act // Act
var (success, version, error) = await _factory.Client.PingAsync(); var (success, version, error) = await _factory.Client.PingAsync();
@@ -53,7 +46,7 @@ public class PaperlessClientTests : IDisposable
public async Task PingAsync_WhenUnauthorized_ReturnsFailure() public async Task PingAsync_WhenUnauthorized_ReturnsFailure()
{ {
// Arrange // Arrange
_factory.SetupGetWithStatus("api/", HttpStatusCode.Unauthorized); _factory.SetupGetWithStatus("api/status/", HttpStatusCode.Unauthorized);
// Act // Act
var (success, version, error) = await _factory.Client.PingAsync(); var (success, version, error) = await _factory.Client.PingAsync();
+4 -24
View File
@@ -26,14 +26,7 @@ public class HealthToolsTests : IDisposable
public async Task Ping_WhenConnected_ReturnsSuccess() public async Task Ping_WhenConnected_ReturnsSuccess()
{ {
// Arrange // Arrange
_factory.MockHandler _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0", "server_os": "Linux"}""");
.When(HttpMethod.Get, "https://paperless.example.com/api/")
.Respond(req =>
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("X-Version", "2.5.0");
return response;
});
// Act // Act
var result = await HealthTools.Ping(_factory.Client); var result = await HealthTools.Ping(_factory.Client);
@@ -48,7 +41,7 @@ public class HealthToolsTests : IDisposable
public async Task Ping_WhenConnectionFails_ReturnsError() public async Task Ping_WhenConnectionFails_ReturnsError()
{ {
// Arrange // Arrange
_factory.SetupGetWithStatus("api/", HttpStatusCode.Unauthorized); _factory.SetupGetWithStatus("api/status/", HttpStatusCode.Unauthorized);
// Act // Act
var result = await HealthTools.Ping(_factory.Client); var result = await HealthTools.Ping(_factory.Client);
@@ -63,16 +56,7 @@ public class HealthToolsTests : IDisposable
public async Task GetCapabilities_ReturnsCapabilitiesInfo() public async Task GetCapabilities_ReturnsCapabilitiesInfo()
{ {
// Arrange // Arrange
_factory.MockHandler _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0", "server_os": "Linux"}""");
.When(HttpMethod.Get, "https://paperless.example.com/api/")
.Respond(req =>
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add("X-Version", "2.5.0");
return response;
});
_factory.SetupGet("api/status/", "{}");
// Act // Act
var result = await HealthTools.GetCapabilities(_factory.Client); var result = await HealthTools.GetCapabilities(_factory.Client);
@@ -91,11 +75,7 @@ public class HealthToolsTests : IDisposable
public async Task GetCapabilities_IncludesAllEndpointCategories() public async Task GetCapabilities_IncludesAllEndpointCategories()
{ {
// Arrange // Arrange
_factory.MockHandler _factory.SetupGet("api/status/", """{"pngx_version": "2.5.0"}""");
.When(HttpMethod.Get, "https://paperless.example.com/api/")
.Respond(HttpStatusCode.OK);
_factory.SetupGet("api/status/", "{}");
// Act // Act
var result = await HealthTools.GetCapabilities(_factory.Client); var result = await HealthTools.GetCapabilities(_factory.Client);
+7 -5
View File
@@ -42,19 +42,21 @@ public class PaperlessClient
#region Health & Status #region Health & Status
/// <summary> /// <summary>
/// Checks connectivity and returns API root information. /// Checks connectivity and returns API status information.
/// </summary> /// </summary>
public async Task<(bool Success, string? Version, string? Error)> PingAsync(CancellationToken cancellationToken = default) public async Task<(bool Success, string? Version, string? Error)> PingAsync(CancellationToken cancellationToken = default)
{ {
try try
{ {
var response = await _httpClient.GetAsync("api/", cancellationToken); var response = await _httpClient.GetAsync("api/status/", cancellationToken);
if (response.IsSuccessStatusCode) if (response.IsSuccessStatusCode)
{ {
// Try to extract version from response headers or body // Extract version from the status response
var version = response.Headers.TryGetValues("X-Version", out var versions) var content = await response.Content.ReadAsStringAsync(cancellationToken);
? versions.FirstOrDefault() var json = JsonSerializer.Deserialize<JsonElement>(content);
var version = json.TryGetProperty("pngx_version", out var versionProp)
? versionProp.GetString()
: null; : null;
return (true, version, null); return (true, version, null);