Checkpoint sql work.

This commit is contained in:
2025-11-16 21:54:28 -08:00
parent c8a6830a80
commit e36acfbde2
7 changed files with 401 additions and 1 deletions

61
data/store_test.go Normal file
View File

@@ -0,0 +1,61 @@
package data
import (
"context"
"testing"
)
func TestStoreUserCRUDAndRoles(t *testing.T) {
ctx := context.Background()
s, err := Open(ctx, ":memory:")
if err != nil {
t.Fatalf("open store: %v", err)
}
t.Cleanup(func() { _ = s.Close() })
u := &User{Username: "alice", Type: AccountHuman}
if err := u.SetPassword("correct horse battery staple"); err != nil {
t.Fatalf("set password: %v", err)
}
u.TOTPSecret = "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ"
if err := s.CreateUser(ctx, u); err != nil {
t.Fatalf("create user: %v", err)
}
if u.ID == "" {
t.Fatal("expected ID to be set")
}
if err := s.AssignRole(ctx, u.ID, "admin"); err != nil {
t.Fatalf("assign role: %v", err)
}
got, err := s.GetUserByUsername(ctx, "alice")
if err != nil {
t.Fatalf("get user: %v", err)
}
if got.ID != u.ID || got.Username != "alice" || got.Type != AccountHuman {
t.Fatalf("unexpected user: %+v", got)
}
if !got.CheckPassword("correct horse battery staple") {
t.Fatal("password check failed after round-trip")
}
if len(got.Roles) != 1 || got.Roles[0] != "admin" {
t.Fatalf("expected role admin, got %#v", got.Roles)
}
// Update username and password
got.Username = "alice2"
if err := got.SetPassword("newpass"); err != nil {
t.Fatalf("set new password: %v", err)
}
if err := s.UpdateUser(ctx, got); err != nil {
t.Fatalf("update user: %v", err)
}
got2, err := s.GetUserByUsername(ctx, "alice2")
if err != nil {
t.Fatalf("get user 2: %v", err)
}
if !got2.CheckPassword("newpass") {
t.Fatal("new password check failed")
}
}