using System.Net; using System.Net.Http.Json; using Flaro.Api.Endpoints; namespace Flaro.Api.Tests; public class ManagementTests { [Test] public async Task Ein_Administrator_legt_Benutzer_an() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); var client = server.AlsAngemeldeter(admin.Token); var angelegt = await client.PostAsJsonAsync("/api/v1/users", new CreateUserRequest("mitbewohner", "auch-ein-langes-passwort", false)); Assert.That(angelegt.StatusCode, Is.EqualTo(HttpStatusCode.Created)); var alle = await client.GetFromJsonAsync>("/api/v1/users"); Assert.That(alle!.Select(u => u.UserName), Is.EquivalentTo(new[] { "guido", "mitbewohner" })); } /// Wer kein Administrator ist, verwaltet auch nichts. [Test] public async Task Ein_gewoehnlicher_Benutzer_darf_keine_Benutzer_anlegen() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); await server.AlsAngemeldeter(admin.Token).PostAsJsonAsync("/api/v1/users", new CreateUserRequest("mitbewohner", "auch-ein-langes-passwort", false)); var gast = await server.SignIn("mitbewohner", "auch-ein-langes-passwort", "iPad", "geraet-9"); var versuch = await server.AlsAngemeldeter(gast.Token).PostAsJsonAsync("/api/v1/users", new CreateUserRequest("noch-einer", "noch-ein-langes-passwort", true)); Assert.That(versuch.StatusCode, Is.EqualTo(HttpStatusCode.Forbidden)); } [Test] public async Task Derselbe_Benutzername_zweimal_wird_abgelehnt() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); var client = server.AlsAngemeldeter(admin.Token); var nochmal = await client.PostAsJsonAsync("/api/v1/users", new CreateUserRequest("guido", "wieder-ein-langes-passwort", false)); Assert.That(nochmal.StatusCode, Is.EqualTo(HttpStatusCode.Conflict)); } /// Ein Tippfehler im Pfad fällt sofort auf, nicht erst beim Scan. /// /// /// Die häufigste Verwechslung beim Einrichten im Container: der Pfad auf /// dem Wirt statt der im Container. Ohne diese Prüfung bliebe die /// Bibliothek dauerhaft leer, und der Grund stünde allenfalls im Protokoll. /// [Test] public async Task Eine_Bibliothek_auf_einem_Pfad_den_es_nicht_gibt_wird_abgelehnt() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); var versuch = await server.AlsAngemeldeter(admin.Token).PostAsJsonAsync("/api/v1/libraries", new CreateLibraryRequest("Filme", "Movies", "/gibt/es/nicht")); Assert.That(versuch.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); Assert.That(await versuch.Content.ReadAsStringAsync(), Does.Contain("eingeh")); } [Test] public async Task Eine_Bibliothek_auf_einem_vorhandenen_Pfad_wird_angelegt() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); var client = server.AlsAngemeldeter(admin.Token); var pfad = Path.GetTempPath(); var angelegt = await client.PostAsJsonAsync("/api/v1/libraries", new CreateLibraryRequest("Filme", "movies", pfad)); Assert.That(angelegt.StatusCode, Is.EqualTo(HttpStatusCode.Created)); var alle = await client.GetFromJsonAsync>("/api/v1/libraries"); Assert.That(alle!.Single().Kind, Is.EqualTo("Movies")); } [Test] public async Task Eine_unbekannte_Art_wird_abgelehnt() { using var server = new FlaroServer(); var admin = await server.SetUpAndSignIn(); var versuch = await server.AlsAngemeldeter(admin.Token).PostAsJsonAsync("/api/v1/libraries", new CreateLibraryRequest("Musik", "Music", Path.GetTempPath())); Assert.That(versuch.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest)); } }