82 lines
2.6 KiB
C#
82 lines
2.6 KiB
C#
using LehrerApp.Sync;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Api.Tests;
|
|
|
|
public sealed class SyncProtocolVersionMiddlewareTests
|
|
{
|
|
[Theory]
|
|
[InlineData("/api/sync/push")]
|
|
[InlineData("/api/sync/plain/push")]
|
|
[InlineData("/api/sync/attachments/datei")]
|
|
[InlineData("/api/snapshot/upload")]
|
|
public async Task FehlendeVersion_BlockiertAlleSyncKanaeleVorDemEndpoint(string path)
|
|
{
|
|
var endpointReached = false;
|
|
var middleware = Middleware(() => endpointReached = true);
|
|
var context = Context(path);
|
|
|
|
await middleware.InvokeAsync(context);
|
|
|
|
Assert.False(endpointReached);
|
|
Assert.Equal(StatusCodes.Status426UpgradeRequired, context.Response.StatusCode);
|
|
Assert.Equal(SyncProtocol.CurrentVersion,
|
|
context.Response.Headers[SyncProtocol.VersionHeaderName].ToString());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task AbweichendeVersion_BlockiertRequest()
|
|
{
|
|
var endpointReached = false;
|
|
var middleware = Middleware(() => endpointReached = true);
|
|
var context = Context("/api/sync/push");
|
|
context.Request.Headers[SyncProtocol.VersionHeaderName] = "0";
|
|
|
|
await middleware.InvokeAsync(context);
|
|
|
|
Assert.False(endpointReached);
|
|
Assert.Equal(StatusCodes.Status426UpgradeRequired, context.Response.StatusCode);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task AktuelleVersion_LaesstRequestZumEndpointDurch()
|
|
{
|
|
var endpointReached = false;
|
|
var middleware = Middleware(() => endpointReached = true);
|
|
var context = Context("/api/sync/push");
|
|
context.Request.Headers[SyncProtocol.VersionHeaderName] = SyncProtocol.CurrentVersion;
|
|
|
|
await middleware.InvokeAsync(context);
|
|
|
|
Assert.True(endpointReached);
|
|
Assert.NotEqual(StatusCodes.Status426UpgradeRequired, context.Response.StatusCode);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task NichtSyncEndpoint_BrauchtKeineVersion()
|
|
{
|
|
var endpointReached = false;
|
|
var middleware = Middleware(() => endpointReached = true);
|
|
var context = Context("/api/auth/login");
|
|
|
|
await middleware.InvokeAsync(context);
|
|
|
|
Assert.True(endpointReached);
|
|
}
|
|
|
|
private static SyncProtocolVersionMiddleware Middleware(Action reached) => new(_ =>
|
|
{
|
|
reached();
|
|
return Task.CompletedTask;
|
|
});
|
|
|
|
private static DefaultHttpContext Context(string path)
|
|
{
|
|
var context = new DefaultHttpContext();
|
|
context.Request.Path = path;
|
|
context.Response.Body = new MemoryStream();
|
|
return context;
|
|
}
|
|
}
|