using System.Net;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc.Testing;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using SameBeat.Infrastructure.BazaDanych;
using Xunit;
namespace SameBeat.Tests.Integration;
///
/// ETAP 8 -- regresja: GET /api/host/diagnostyka musi zostac chroniony przez KonwencjaAutoryzacjiHosta
/// tak samo jak inne kontrolery pod "api/host/*", bez potrzeby recznego dopisywania [Authorize].
/// Uruchamia CALA aplikacje przez WebApplicationFactory (TestServer, bez prawdziwej sieci), tak samo
/// jak NaglowkiBezpieczenstwaTests/StanImprezyHubAutoryzacjaTests.
///
public class HostDiagnosticsAuthorizationTests : IClassFixture>
{
private readonly WebApplicationFactory _fabryka;
public HostDiagnosticsAuthorizationTests(WebApplicationFactory fabryka)
{
_fabryka = fabryka.WithWebHostBuilder(builder =>
{
builder.UseEnvironment("Testing");
builder.ConfigureServices(services =>
{
var deskryptorKontekstu = services.SingleOrDefault(s => s.ServiceType == typeof(DbContextOptions));
if (deskryptorKontekstu is not null)
{
services.Remove(deskryptorKontekstu);
}
services.AddDbContext(opcje =>
opcje.UseInMemoryDatabase("HostDiagnosticsAuthorizationTests"));
});
});
}
[Fact]
public async Task Diagnostyka_BezCiasteczkaAuth_Zwraca401()
{
var klient = _fabryka.CreateClient();
var odpowiedz = await klient.GetAsync("/api/host/diagnostyka");
Assert.Equal(HttpStatusCode.Unauthorized, odpowiedz.StatusCode);
}
}