Expand test coverage to match specs
This commit is contained in:
@@ -91,7 +91,7 @@ internal static class EndpointHelpers
|
||||
|| path.EndsWith(".gif") || path.EndsWith(".webp") || path.EndsWith(".avif");
|
||||
}
|
||||
|
||||
public static async Task<bool> IsReachableImageAsync(string? url, IHttpClientFactory httpFactory, CancellationToken ct = default)
|
||||
public static async Task<bool> IsReachableImageAsync(string? url, IHttpClientFactory httpFactory, HttpMessageHandler? handler = null, CancellationToken ct = default)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(url)) return true;
|
||||
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri)) return false;
|
||||
@@ -101,11 +101,9 @@ internal static class EndpointHelpers
|
||||
using var cts = CancellationTokenSource.CreateLinkedTokenSource(ct);
|
||||
cts.CancelAfter(TimeSpan.FromSeconds(3));
|
||||
|
||||
var handler = new HttpClientHandler
|
||||
{
|
||||
AllowAutoRedirect = false
|
||||
};
|
||||
var client = new HttpClient(handler);
|
||||
var client = handler is null
|
||||
? httpFactory.CreateClient("imageValidation")
|
||||
: new HttpClient(handler, disposeHandler: false);
|
||||
|
||||
try
|
||||
{
|
||||
@@ -113,10 +111,10 @@ internal static class EndpointHelpers
|
||||
var headResp = await client.SendAsync(head, HttpCompletionOption.ResponseHeadersRead, cts.Token);
|
||||
if (headResp.IsSuccessStatusCode && headResp.StatusCode is not System.Net.HttpStatusCode.Redirect)
|
||||
{
|
||||
if (headResp.Content.Headers.ContentLength is long headLen && headLen > MaxImageBytes) return false;
|
||||
var ctHeader = headResp.Content.Headers.ContentType?.MediaType;
|
||||
if (!string.IsNullOrWhiteSpace(ctHeader) && ctHeader.StartsWith("image/", StringComparison.OrdinalIgnoreCase))
|
||||
return true;
|
||||
if (headResp.Content.Headers.ContentLength is long len && len > MaxImageBytes) return false;
|
||||
}
|
||||
}
|
||||
catch { /* fallback */ }
|
||||
|
||||
Reference in New Issue
Block a user