更新客户端适配性问题
build-winui / winui (push) Has been cancelled
build-winui / winui (push) Has been cancelled
This commit is contained in:
@@ -168,6 +168,12 @@ public sealed class FeedbackServiceTests
|
||||
Assert.AreEqual(signature, FeedbackSubmissionService.Sign("1760000000", "abc123", new string('a', 64), "{\"ok\":true}"));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FeedbackSubmissionUsesUnifiedManagementEndpoint()
|
||||
{
|
||||
Assert.AreEqual("https://update.ymhut.cn/", FeedbackSubmissionService.Endpoint);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void FeedbackStatusResponseParsesExtendedServerFields()
|
||||
{
|
||||
|
||||
@@ -109,6 +109,7 @@ public sealed class RemoteMediaCatalogTests
|
||||
Assert.AreEqual("data.cover", source.ResolvedKey);
|
||||
Assert.AreEqual("image", source.MediaType);
|
||||
Assert.AreEqual(source.ResolvedUrl, source.EffectiveApiUrl);
|
||||
Assert.AreEqual(source.ApiUrl, source.RefreshApiUrl);
|
||||
Assert.IsTrue(source.IsAvailable);
|
||||
}
|
||||
|
||||
|
||||
@@ -121,6 +121,29 @@ public sealed class RemoteMediaResolverTests
|
||||
Assert.AreEqual(".mp3", result.SuggestedExtension);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public async Task CacheBustsEachRefreshAndDisablesHttpCaches()
|
||||
{
|
||||
var observed = new List<ObservedRequest>();
|
||||
var resolver = CreateResolver(request =>
|
||||
{
|
||||
observed.Add(ObservedRequest.From(request));
|
||||
return Text(HttpStatusCode.OK, string.Empty, "image/jpeg");
|
||||
});
|
||||
|
||||
await resolver.ResolveMediaAsync("https://example.test/random", RemoteMediaKind.Image);
|
||||
await resolver.ResolveMediaAsync("https://example.test/random", RemoteMediaKind.Image);
|
||||
|
||||
var randomRequests = observed.Where(item => item.Uri.AbsolutePath == "/random").ToArray();
|
||||
Assert.IsTrue(randomRequests.Length >= 4);
|
||||
Assert.AreNotEqual(randomRequests[0].Uri.Query, randomRequests[2].Uri.Query);
|
||||
Assert.IsTrue(randomRequests.All(item => item.NoCache));
|
||||
Assert.IsTrue(randomRequests.All(item => item.NoStore));
|
||||
Assert.IsTrue(randomRequests.All(item => item.MaxAge == TimeSpan.Zero));
|
||||
Assert.IsTrue(randomRequests.All(item => item.PragmaNoCache));
|
||||
Assert.IsTrue(randomRequests.All(item => item.IfModifiedSince == DateTimeOffset.UnixEpoch));
|
||||
}
|
||||
|
||||
private static RemoteMediaResolver CreateResolver(Func<HttpRequestMessage, HttpResponseMessage> responseFactory)
|
||||
{
|
||||
return new RemoteMediaResolver(() => new StubHttpHandler(responseFactory));
|
||||
@@ -150,4 +173,22 @@ public sealed class RemoteMediaResolverTests
|
||||
return Task.FromResult(response);
|
||||
}
|
||||
}
|
||||
|
||||
private sealed record ObservedRequest(
|
||||
Uri Uri,
|
||||
bool NoCache,
|
||||
bool NoStore,
|
||||
TimeSpan? MaxAge,
|
||||
bool PragmaNoCache,
|
||||
DateTimeOffset? IfModifiedSince)
|
||||
{
|
||||
public static ObservedRequest From(HttpRequestMessage request)
|
||||
=> new(
|
||||
request.RequestUri!,
|
||||
request.Headers.CacheControl?.NoCache == true,
|
||||
request.Headers.CacheControl?.NoStore == true,
|
||||
request.Headers.CacheControl?.MaxAge,
|
||||
request.Headers.Pragma.Any(value => string.Equals(value.Name, "no-cache", StringComparison.OrdinalIgnoreCase)),
|
||||
request.Headers.IfModifiedSince);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user