62 lines
1.7 KiB
Go
62 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|