package store
import (
"path/filepath"
"testing"
"time"
)
func TestPasswordHashRequiresExistingUser(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "gitfed.db"))
if err != nil {
t.Fatalf("open: %v", err)
}
defer s.Close()
if err := s.SetPasswordHash("nobody", "hash"); err != ErrNotFound {
t.Fatalf("SetPasswordHash for nonexistent user: got %v, want ErrNotFound", err)
}
if err := s.CreateUser(User{Username: "alice"}); err != nil {
t.Fatalf("create user: %v", err)
}
if err := s.SetPasswordHash("alice", "hash123"); err != nil {
t.Fatalf("SetPasswordHash: %v", err)
}
got, err := s.GetPasswordHash("alice")
if err != nil {
t.Fatalf("GetPasswordHash: %v", err)
}
if got != "hash123" {
t.Fatalf("got hash %q, want %q", got, "hash123")
}
}
func TestSessionLifecycle(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "gitfed.db"))
if err != nil {
t.Fatalf("open: %v", err)
}
defer s.Close()
token, err := s.CreateSession("alice@local.test", "alice", true, time.Hour)
if err != nil {
t.Fatalf("CreateSession: %v", err)
}
if token == "" {
t.Fatal("expected a non-empty token")
}
sess, err := s.GetSession(token)
if err != nil {
t.Fatalf("GetSession: %v", err)
}
if sess.Principal != "alice@local.test" || !sess.IsAdmin {
t.Fatalf("unexpected session: %+v", sess)
}
if err := s.DeleteSession(token); err != nil {
t.Fatalf("DeleteSession: %v", err)
}
if _, err := s.GetSession(token); err != ErrNotFound {
t.Fatalf("GetSession after delete: got %v, want ErrNotFound", err)
}
}
func TestSessionExpiry(t *testing.T) {
s, err := Open(filepath.Join(t.TempDir(), "gitfed.db"))
if err != nil {
t.Fatalf("open: %v", err)
}
defer s.Close()
token, err := s.CreateSession("alice@local.test", "alice", false, -time.Second)
if err != nil {
t.Fatalf("CreateSession: %v", err)
}
if _, err := s.GetSession(token); err != ErrNotFound {
t.Fatalf("GetSession on expired token: got %v, want ErrNotFound", err)
}
}