create-user lehnt einen bereits existierenden Nutzernamen ab und UserStore hatte keinen Weg, ein Passwort nachträglich zu ändern - einzige Alternative wäre manuelles Editieren der LiteDB-Binärdatei gewesen. Neuer Befehl set-password <benutzername> [--password <pw>] nach demselben Muster wie create-user (Cli.ParsePassword extrahiert, von beiden Befehlen geteilt). docker/README.md ergänzt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
86 lines
2.5 KiB
C#
86 lines
2.5 KiB
C#
using Xunit;
|
|
|
|
namespace LehrerApp.Api.Tests;
|
|
|
|
public sealed class UserStoreTests
|
|
{
|
|
[Fact]
|
|
public void CreateUser_NeuerNutzername_GibtTrueZurueckUndKannSichAnmelden()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
|
|
var created = temp.Store.CreateUser("sebastian", "einSicheresPasswort");
|
|
|
|
Assert.True(created);
|
|
Assert.True(temp.Store.VerifyPassword("sebastian", "einSicheresPasswort"));
|
|
}
|
|
|
|
[Fact]
|
|
public void CreateUser_BereitsVorhandenerNutzername_GibtFalseZurueck()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
temp.Store.CreateUser("sebastian", "einSicheresPasswort");
|
|
|
|
var created = temp.Store.CreateUser("sebastian", "einAnderesPasswort");
|
|
|
|
Assert.False(created);
|
|
}
|
|
|
|
[Fact]
|
|
public void VerifyPassword_FalschesPasswort_GibtFalseZurueck()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
temp.Store.CreateUser("sebastian", "einSicheresPasswort");
|
|
|
|
Assert.False(temp.Store.VerifyPassword("sebastian", "falschesPasswort"));
|
|
}
|
|
|
|
[Fact]
|
|
public void VerifyPassword_UnbekannterNutzer_GibtFalseZurueck()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
|
|
Assert.False(temp.Store.VerifyPassword("unbekannt", "irgendwas"));
|
|
}
|
|
|
|
[Fact]
|
|
public void SetPassword_VorhandenerNutzer_AktualisiertPasswortUndAltesFunktioniertNichtMehr()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
temp.Store.CreateUser("sebastian", "altesPasswort123");
|
|
|
|
var updated = temp.Store.SetPassword("sebastian", "neuesPasswort123");
|
|
|
|
Assert.True(updated);
|
|
Assert.True(temp.Store.VerifyPassword("sebastian", "neuesPasswort123"));
|
|
Assert.False(temp.Store.VerifyPassword("sebastian", "altesPasswort123"));
|
|
}
|
|
|
|
[Fact]
|
|
public void SetPassword_UnbekannterNutzer_GibtFalseZurueck()
|
|
{
|
|
using var temp = new TempUserStore();
|
|
|
|
Assert.False(temp.Store.SetPassword("unbekannt", "irgendeinPasswort"));
|
|
}
|
|
|
|
private sealed class TempUserStore : IDisposable
|
|
{
|
|
private readonly string _directory = Path.Combine(
|
|
Path.GetTempPath(), $"lehrerapp-api-tests-{Guid.NewGuid():N}");
|
|
public UserStore Store { get; }
|
|
|
|
public TempUserStore()
|
|
{
|
|
Directory.CreateDirectory(_directory);
|
|
Store = new UserStore(_directory);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Store.Dispose();
|
|
if (Directory.Exists(_directory)) Directory.Delete(_directory, recursive: true);
|
|
}
|
|
}
|
|
}
|