68 lines
2.6 KiB
C#
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);
|
|
}
|
|
}
|