add tests

This commit is contained in:
m
2026-09-13 19:24:58 +02:00
parent c054b90c92
commit 5578e4a354
19 changed files with 1599 additions and 1 deletions
+87
View File
@@ -0,0 +1,87 @@
package service
import (
"errors"
"testing"
"github.com/vaultdrop/backend/pkg/passwd"
"github.com/vaultdrop/backend/repository"
)
func TestEnsureAdminCreatesFirstAdmin(t *testing.T) {
s := newServiceStore(t)
repo := s.Repository
if err := EnsureAdmin(repo, " Admin ", "admin-secret-123"); err != nil {
t.Fatalf("EnsureAdmin: %v", err)
}
user, err := repo.Users.GetByUsernameNormalized("admin")
if err != nil {
t.Fatalf("admin non trouvé: %v", err)
}
if !user.IsAdmin {
t.Error("le compte créé doit être admin")
}
if user.UsernameNormalized != "admin" || user.Username != "admin" {
t.Errorf("identité anormale: %+v", user)
}
if err := passwd.Verify("admin-secret-123", user.PasswordHash); err != nil {
t.Errorf("le mot de passe doit vérifier: %v", err)
}
}
func TestNormalizeUsername(t *testing.T) {
cases := map[string]string{
" admin ": "admin",
" Alice": "alice",
"A B C": "a b c",
"": "",
" ": "",
}
for in, want := range cases {
if got := NormalizeUsername(in); got != want {
t.Errorf("NormalizeUsername(%q) = %q, attendu %q", in, got, want)
}
}
}
func TestEnsureAdminRefusesOnEmptyDBWithoutEnv(t *testing.T) {
s := newServiceStore(t)
err := EnsureAdmin(s.Repository, "", "")
if !errors.Is(err, ErrAdminRequired) {
t.Errorf("env absent : attendu ErrAdminRequired, got %v", err)
}
err = EnsureAdmin(s.Repository, " ", "some-password")
if !errors.Is(err, ErrAdminRequired) {
t.Errorf("username blanc : attendu ErrAdminRequired, got %v", err)
}
}
func TestEnsureAdminNeverOverwritesExistingAccounts(t *testing.T) {
s := newServiceStore(t)
repo := s.Repository
// La base n'est PAS vide → l'env ne doit rien créer, même avec des valeurs.
if _, err := repo.Users.Create("alice", "alice", "existing-hash", false); err != nil {
t.Fatalf("seed user: %v", err)
}
if err := EnsureAdmin(repo, "ADMIN", "would-be-admin-secret"); err != nil {
t.Fatalf("EnsureAdmin sur base non vide : %v", err)
}
// Aucun admin n'a été ajouté, l'existant est intact.
if _, err := repo.Users.GetByUsernameNormalized("admin"); !errors.Is(err, repository.ErrNotFound) {
t.Errorf("admin ne doit pas exister sur base non vide (err=%v)", err)
}
alice, err := repo.Users.GetByUsernameNormalized("alice")
if err != nil {
t.Fatalf("alice doit être intacte: %v", err)
}
if alice.PasswordHash != "existing-hash" || alice.IsAdmin {
t.Errorf("l'existant doit être préservé: %+v", alice)
}
}