| package sql_test |
|
|
| import ( |
| "context" |
| "testing" |
| "time" |
| ) |
|
|
| func TestAdminSession_CreateAndGet(t *testing.T) { |
| t.Parallel() |
|
|
| store := newTestStore(t, "sessions.db") |
|
|
| ctx := context.Background() |
| token := "test-session-token-12345" |
| expiresAt := time.Now().Add(24 * time.Hour) |
|
|
| |
| if err := store.CreateAdminSession(ctx, token, expiresAt); err != nil { |
| t.Fatalf("create admin session: %v", err) |
| } |
|
|
| |
| gotExpires, exists, err := store.GetAdminSession(ctx, token) |
| if err != nil { |
| t.Fatalf("get admin session: %v", err) |
| } |
| if !exists { |
| t.Error("expected session to exist") |
| } |
| |
| if gotExpires.Sub(expiresAt).Abs() > time.Second { |
| t.Errorf("expires at: got %v, want ~%v", gotExpires, expiresAt) |
| } |
|
|
| |
| _, exists, err = store.GetAdminSession(ctx, "non-existent-token") |
| if err != nil { |
| t.Fatalf("get non-existent session: %v", err) |
| } |
| if exists { |
| t.Error("expected session to not exist") |
| } |
| } |
|
|
| func TestAdminSession_Delete(t *testing.T) { |
| t.Parallel() |
|
|
| store := newTestStore(t, "delete.db") |
|
|
| ctx := context.Background() |
| token := "token-to-delete" |
| expiresAt := time.Now().Add(1 * time.Hour) |
|
|
| |
| if err := store.CreateAdminSession(ctx, token, expiresAt); err != nil { |
| t.Fatalf("create admin session: %v", err) |
| } |
|
|
| |
| _, exists, err := store.GetAdminSession(ctx, token) |
| if err != nil { |
| t.Fatalf("get admin session: %v", err) |
| } |
| if !exists { |
| t.Error("expected session to exist before delete") |
| } |
|
|
| |
| if err := store.DeleteAdminSession(ctx, token); err != nil { |
| t.Fatalf("delete admin session: %v", err) |
| } |
|
|
| |
| _, exists, err = store.GetAdminSession(ctx, token) |
| if err != nil { |
| t.Fatalf("get admin session after delete: %v", err) |
| } |
| if exists { |
| t.Error("expected session to be deleted") |
| } |
| } |
|
|
| func TestAdminSession_CleanExpired(t *testing.T) { |
| t.Parallel() |
|
|
| store := newTestStore(t, "clean.db") |
|
|
| ctx := context.Background() |
|
|
| |
| expiredToken := "expired-token" |
| if err := store.CreateAdminSession(ctx, expiredToken, time.Now().Add(-1*time.Hour)); err != nil { |
| t.Fatalf("create expired session: %v", err) |
| } |
|
|
| |
| validToken := "valid-token" |
| if err := store.CreateAdminSession(ctx, validToken, time.Now().Add(1*time.Hour)); err != nil { |
| t.Fatalf("create valid session: %v", err) |
| } |
|
|
| |
| if err := store.CleanExpiredSessions(ctx); err != nil { |
| t.Fatalf("clean expired sessions: %v", err) |
| } |
|
|
| |
| _, exists, err := store.GetAdminSession(ctx, expiredToken) |
| if err != nil { |
| t.Fatalf("get expired session: %v", err) |
| } |
| if exists { |
| t.Error("expected expired session to be cleaned") |
| } |
|
|
| |
| _, exists, err = store.GetAdminSession(ctx, validToken) |
| if err != nil { |
| t.Fatalf("get valid session: %v", err) |
| } |
| if !exists { |
| t.Error("expected valid session to still exist") |
| } |
| } |
|
|
| func TestAdminSession_LoadAll(t *testing.T) { |
| t.Parallel() |
|
|
| store := newTestStore(t, "load_all.db") |
|
|
| ctx := context.Background() |
|
|
| |
| for i := 0; i < 3; i++ { |
| token := "session-token-" + string(rune('A'+i)) |
| expiresAt := time.Now().Add(time.Duration(i+1) * time.Hour) |
| if err := store.CreateAdminSession(ctx, token, expiresAt); err != nil { |
| t.Fatalf("create session %d: %v", i, err) |
| } |
| } |
|
|
| |
| if err := store.CreateAdminSession(ctx, "expired", time.Now().Add(-1*time.Hour)); err != nil { |
| t.Fatalf("create expired session: %v", err) |
| } |
|
|
| |
| sessions, err := store.LoadAllSessions(ctx) |
| if err != nil { |
| t.Fatalf("load all sessions: %v", err) |
| } |
|
|
| |
| if len(sessions) != 3 { |
| t.Errorf("expected 3 sessions, got %d", len(sessions)) |
| } |
| } |
|
|