package sqlite import ( "context" "database/sql" "testing" "github.com/bluesky-social/indigo/atproto/auth/oauth" "github.com/bluesky-social/indigo/atproto/syntax" _ "modernc.org/sqlite" ) func testStore(t *testing.T) *Store { t.Helper() db, err := sql.Open("sqlite", ":memory:") if err != nil { t.Fatal(err) } s, err := New(db) if err != nil { t.Fatal(err) } t.Cleanup(func() { db.Close() }) return s } func TestNew(t *testing.T) { s := testStore(t) if s == nil { t.Fatal("expected non-nil store") } } func TestSessionCRUD(t *testing.T) { s := testStore(t) ctx := context.Background() did, _ := syntax.ParseDID("did:plc:test123") sess := oauth.ClientSessionData{ AccountDID: did, SessionID: "sess-1", HostURL: "https://pds.example.com", } // Save if err := s.SaveSession(ctx, sess); err != nil { t.Fatal(err) } // Get got, err := s.GetSession(ctx, did, "sess-1") if err != nil { t.Fatal(err) } if got.HostURL != "https://pds.example.com" { t.Fatalf("got HostURL %q, want %q", got.HostURL, "https://pds.example.com") } // Upsert sess.HostURL = "https://pds2.example.com" if err := s.SaveSession(ctx, sess); err != nil { t.Fatal(err) } got, _ = s.GetSession(ctx, did, "sess-1") if got.HostURL != "https://pds2.example.com" { t.Fatalf("upsert failed: got %q", got.HostURL) } // Get non-existent _, err = s.GetSession(ctx, did, "no-such") if err == nil { t.Fatal("expected error for missing session") } // Delete if err := s.DeleteSession(ctx, did, "sess-1"); err != nil { t.Fatal(err) } _, err = s.GetSession(ctx, did, "sess-1") if err == nil { t.Fatal("expected error after delete") } } func TestAuthRequestCRUD(t *testing.T) { s := testStore(t) ctx := context.Background() info := oauth.AuthRequestData{ State: "state-abc", AuthServerURL: "https://auth.example.com", PKCEVerifier: "verifier123", } if err := s.SaveAuthRequestInfo(ctx, info); err != nil { t.Fatal(err) } got, err := s.GetAuthRequestInfo(ctx, "state-abc") if err != nil { t.Fatal(err) } if got.PKCEVerifier != "verifier123" { t.Fatalf("got verifier %q", got.PKCEVerifier) } _, err = s.GetAuthRequestInfo(ctx, "no-such") if err == nil { t.Fatal("expected error for missing auth request") } if err := s.DeleteAuthRequestInfo(ctx, "state-abc"); err != nil { t.Fatal(err) } _, err = s.GetAuthRequestInfo(ctx, "state-abc") if err == nil { t.Fatal("expected error after delete") } }