using System.Net; using System.Net.Http.Json; using Halo.Api.Endpoints; namespace Halo.Api.Tests; public class SetupTests { [Test] public async Task Ein_frischer_Server_verlangt_Einrichtung() { using var server = new HaloServer(); var info = await server.Client.GetFromJsonAsync("/api/v1/system/info"); Assert.That(info!.NeedsSetup, Is.True); } [Test] public async Task Die_Einrichtung_legt_einen_Administrator_an() { using var server = new HaloServer(); var antwort = await server.Client.PostAsJsonAsync("/api/v1/system/setup", new SetupRequest("guido", "ein-langes-passwort")); Assert.That(antwort.StatusCode, Is.EqualTo(HttpStatusCode.OK)); var benutzer = await antwort.Content.ReadFromJsonAsync(); Assert.That(benutzer!.UserName, Is.EqualTo("guido")); Assert.That(benutzer.IsAdministrator, Is.True); var info = await server.Client.GetFromJsonAsync("/api/v1/system/info"); Assert.That(info!.NeedsSetup, Is.False); } /// Sonst stünde ein laufender Server dem ersten Fremden offen. /// /// /// Der Endpunkt muss ohne Anmeldung erreichbar sein — beim ersten Start /// gibt es ja noch niemanden, der sich anmelden könnte. Genau deshalb muss /// er sich danach selbst verschliessen. /// [Test] public async Task Ein_zweites_Mal_Einrichten_wird_abgelehnt() { using var server = new HaloServer(); await server.SetUpAndSignIn(); var zweiterVersuch = await server.Client.PostAsJsonAsync("/api/v1/system/setup", new SetupRequest("eindringling", "auch-ein-langes-passwort")); Assert.That(zweiterVersuch.StatusCode, Is.EqualTo(HttpStatusCode.Conflict)); } [Test] public async Task Ein_zu_kurzes_Passwort_wird_abgelehnt() { using var server = new HaloServer(); var antwort = await server.Client.PostAsJsonAsync("/api/v1/system/setup", new SetupRequest("guido", "kurz")); Assert.That(antwort.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); var info = await server.Client.GetFromJsonAsync("/api/v1/system/info"); Assert.That(info!.NeedsSetup, Is.True, "Ein abgelehnter Versuch darf nichts angelegt haben"); } [Test] public async Task Die_Gesundheitsfrage_braucht_keine_Anmeldung() { using var server = new HaloServer(); var antwort = await server.Client.GetAsync("/health"); Assert.That(antwort.StatusCode, Is.EqualTo(HttpStatusCode.OK)); } }