5af3bfaa1a
Frontend sends nested address field names for sorting; accept them alongside the existing country and state aliases. Co-authored-by: Cursor <cursoragent@cursor.com>
82 lines
2.1 KiB
Go
82 lines
2.1 KiB
Go
package mongo
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
func TestEncodeDecodePageCursor(t *testing.T) {
|
|
encoded, err := encodePageCursor("created_at", -1, int64(1700000000), "507f1f77bcf86cd799439011", "abc123", 10)
|
|
if err != nil {
|
|
t.Fatalf("encode: %v", err)
|
|
}
|
|
if strings.Contains(encoded, "+") || strings.Contains(encoded, "/") {
|
|
t.Fatalf("expected URL-safe cursor, got %q", encoded)
|
|
}
|
|
|
|
decoded, err := decodePageCursor(encoded)
|
|
if err != nil {
|
|
t.Fatalf("decode: %v", err)
|
|
}
|
|
|
|
if decoded.SortField != "created_at" || decoded.SortOrder != -1 {
|
|
t.Fatalf("unexpected sort: %+v", decoded)
|
|
}
|
|
if decoded.FiltersHash != "abc123" || decoded.PageOffset != 10 {
|
|
t.Fatalf("unexpected metadata: %+v", decoded)
|
|
}
|
|
}
|
|
|
|
func TestBuildListPaginationCursorAndOffsetConflict(t *testing.T) {
|
|
_, err := BuildListPagination(10, 5, "cursor-token", "created_at", "desc", bson.M{}, ListPaginationOptions{})
|
|
if err == nil {
|
|
t.Fatal("expected error when cursor and offset are both set")
|
|
}
|
|
}
|
|
|
|
func TestBuildListPaginationOffsetMode(t *testing.T) {
|
|
p, err := BuildListPagination(10, 20, "", "created_at", "desc", bson.M{"status": "active"}, ListPaginationOptions{})
|
|
if err != nil {
|
|
t.Fatalf("build: %v", err)
|
|
}
|
|
if p.Skip != 20 || p.Limit != 10 || p.Cursor != "" {
|
|
t.Fatalf("unexpected pagination: %+v", p)
|
|
}
|
|
}
|
|
|
|
func TestHashFilterStable(t *testing.T) {
|
|
a := HashFilter(bson.M{"status": "active"})
|
|
b := HashFilter(bson.M{"status": "active"})
|
|
if a == "" || a != b {
|
|
t.Fatalf("expected stable non-empty hash, got %q and %q", a, b)
|
|
}
|
|
}
|
|
|
|
func TestDocumentSortValueNestedField(t *testing.T) {
|
|
doc := bson.M{
|
|
"_id": bson.NewObjectID(),
|
|
"address": bson.M{
|
|
"country": "US",
|
|
"state": "NY",
|
|
},
|
|
}
|
|
|
|
country, err := documentSortValue(doc, "address.country")
|
|
if err != nil {
|
|
t.Fatalf("address.country: %v", err)
|
|
}
|
|
if country != "US" {
|
|
t.Fatalf("expected US, got %v", country)
|
|
}
|
|
|
|
state, err := documentSortValue(doc, "address.state")
|
|
if err != nil {
|
|
t.Fatalf("address.state: %v", err)
|
|
}
|
|
if state != "NY" {
|
|
t.Fatalf("expected NY, got %v", state)
|
|
}
|
|
}
|