package tapc
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"slices"
"testing"
"github.com/bluesky-social/indigo/atproto/syntax"
)
func TestAddReposBatchesLargeLists(t *testing.T) {
var batches [][]syntax.DID
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var body struct {
DIDs []syntax.DID `json:"dids"`
}
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
t.Errorf("decode body: %v", err)
}
// same failure real tap gives once sqlite runs out of variables
if len(body.DIDs) > addReposBatchSize {
w.WriteHeader(http.StatusInternalServerError)
return
}
batches = append(batches, body.DIDs)
}))
defer srv.Close()
dids := make([]syntax.DID, 2*addReposBatchSize+500)
for i := range dids {
dids[i] = syntax.DID(fmt.Sprintf("did:plc:%024d", i))
}
c := NewClient(srv.URL, "pw")
if err := c.AddRepos(context.Background(), dids); err != nil {
t.Fatalf("AddRepos: %v", err)
}
if len(batches) != 3 {
t.Fatalf("got %d batches, want 3", len(batches))
}
var sent []syntax.DID
for _, b := range batches {
sent = append(sent, b...)
}
if !slices.Equal(sent, dids) {
t.Fatalf("sent %d dids, want all %d in order", len(sent), len(dids))
}
}
func TestAddReposEmptySendsNothing(t *testing.T) {
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
t.Errorf("unexpected request to %s", r.URL.Path)
}))
defer srv.Close()
c := NewClient(srv.URL, "pw")
if err := c.AddRepos(context.Background(), nil); err != nil {
t.Fatalf("AddRepos: %v", err)
}
}