mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 00:37:36 +00:00
72 lines
2 KiB
Go
72 lines
2 KiB
Go
package api
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSQLiteMagicLinkStore_PersistsAcrossReopen(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
store1, err := NewSQLiteMagicLinkStore(dir)
|
|
if err != nil {
|
|
t.Fatalf("NewSQLiteMagicLinkStore: %v", err)
|
|
}
|
|
key := []byte("0123456789abcdef0123456789abcdef")
|
|
svc1 := NewMagicLinkServiceWithKey(key, store1, nil, nil)
|
|
base := time.Date(2026, 2, 10, 12, 0, 0, 0, time.UTC)
|
|
svc1.now = func() time.Time { return base }
|
|
|
|
token, err := svc1.GenerateToken("user@example.com", "org-123")
|
|
if err != nil {
|
|
t.Fatalf("GenerateToken: %v", err)
|
|
}
|
|
svc1.Stop()
|
|
|
|
store2, err := NewSQLiteMagicLinkStore(dir)
|
|
if err != nil {
|
|
t.Fatalf("NewSQLiteMagicLinkStore reopen: %v", err)
|
|
}
|
|
svc2 := NewMagicLinkServiceWithKey(key, store2, nil, nil)
|
|
svc2.now = func() time.Time { return base.Add(1 * time.Minute) }
|
|
t.Cleanup(svc2.Stop)
|
|
|
|
got, err := svc2.ValidateToken(token)
|
|
if err != nil {
|
|
t.Fatalf("ValidateToken after reopen: %v", err)
|
|
}
|
|
if got.Email != "user@example.com" || got.OrgID != "org-123" {
|
|
t.Fatalf("unexpected token record: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestSQLiteMagicLinkStore_WrongKeyCannotValidate(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
store, err := NewSQLiteMagicLinkStore(dir)
|
|
if err != nil {
|
|
t.Fatalf("NewSQLiteMagicLinkStore: %v", err)
|
|
}
|
|
rightKey := []byte("0123456789abcdef0123456789abcdef")
|
|
svc := NewMagicLinkServiceWithKey(rightKey, store, nil, nil)
|
|
t.Cleanup(svc.Stop)
|
|
|
|
token, err := svc.GenerateToken("user@example.com", "org-123")
|
|
if err != nil {
|
|
t.Fatalf("GenerateToken: %v", err)
|
|
}
|
|
|
|
otherStore, err := NewSQLiteMagicLinkStore(dir)
|
|
if err != nil {
|
|
t.Fatalf("NewSQLiteMagicLinkStore reopen: %v", err)
|
|
}
|
|
wrongKey := []byte("abcdef0123456789abcdef0123456789")
|
|
svcWrong := NewMagicLinkServiceWithKey(wrongKey, otherStore, nil, nil)
|
|
t.Cleanup(svcWrong.Stop)
|
|
|
|
_, err = svcWrong.ValidateToken(token)
|
|
if !errors.Is(err, ErrMagicLinkInvalidToken) {
|
|
t.Fatalf("ValidateToken err=%v, want %v", err, ErrMagicLinkInvalidToken)
|
|
}
|
|
}
|