Files

68 lines
2.6 KiB
C#

using System.Net;
using System.Net.Http.Json;
using ItWorx.KnowledgeHub.Contracts.Setup;
using ItWorx.KnowledgeHub.IntegrationTests.Infrastructure;
namespace ItWorx.KnowledgeHub.IntegrationTests.Setup;
[Collection(PostgresTestGroup.Name)]
public sealed class FirstRunSetupTests(PostgresContainerFixture postgres) : IAsyncLifetime, IDisposable
{
private readonly KnowledgeHubIntegrationFactory _factory = new(postgres);
public Task InitializeAsync() => ((IAsyncLifetime)_factory).InitializeAsync();
public Task DisposeAsync() => ((IAsyncLifetime)_factory).DisposeAsync();
public void Dispose() => _factory.Dispose();
[Fact]
public async Task Status_reports_setup_required_before_first_run()
{
using var client = _factory.CreateClient();
var status = await client.GetFromJsonAsync<SetupStatusResponse>("/api/v1/setup/status");
Assert.NotNull(status);
Assert.True(status.SetupRequired);
}
[Fact]
public async Task Complete_creates_the_owner_and_permanently_disables_further_setup()
{
using var client = _factory.CreateClient();
var first = await SetupHelper.CompleteFirstRunSetupAsync(
client, "ItWorx Kennisbank", "Eerste Eigenaar", "eigenaar@itworx.test", "correct-horse-battery-staple");
Assert.Equal(HttpStatusCode.OK, first.StatusCode);
var payload = await first.Content.ReadFromJsonAsync<CompleteSetupResponse>();
Assert.NotNull(payload);
Assert.NotEqual(Guid.Empty, payload.WorkspaceId);
Assert.NotEqual(Guid.Empty, payload.UserId);
var statusAfter = await client.GetFromJsonAsync<SetupStatusResponse>("/api/v1/setup/status");
Assert.NotNull(statusAfter);
Assert.False(statusAfter.SetupRequired);
// A second attempt with different owner details must never succeed. This is the
// "single-use" M1-A01
// acceptance criterion, not just "the UI hides the form afterward".
var second = await SetupHelper.CompleteFirstRunSetupAsync(
client, "Andere Werkruimte", "Tweede Poging", "indringer@itworx.test", "another-strong-password");
Assert.Equal(HttpStatusCode.Conflict, second.StatusCode);
}
[Fact]
public async Task Complete_rejects_a_password_below_the_minimum_length()
{
using var client = _factory.CreateClient();
var response = await SetupHelper.CompleteFirstRunSetupAsync(
client, "ItWorx Kennisbank", "Iemand", "iemand@itworx.test", "kort");
Assert.Equal(HttpStatusCode.UnprocessableEntity, response.StatusCode);
}
}