Files
creator-hub/internal/creator/event_aggregation_order_test.go
T

72 lines
2.9 KiB
Go

package creator
import (
"fmt"
"reflect"
"testing"
"time"
)
func TestEventAggregationOccurrenceOrderBeforePagination(t *testing.T) {
store, accounts, ctx := openCreatorIntegrationStore(t)
id := createIntegrationAccount(t, ctx, accounts, fmt.Sprint(time.Now().UnixNano()))
profile, err := store.GetAccountProfile(ctx, id)
if err != nil {
t.Fatal(err)
}
if _, err := store.RecordVerifiedLoginResult(ctx, id, profile.PlatformAccountKey); err != nil {
t.Fatal(err)
}
state, err := store.SetListenerEnabled(ctx, id, true)
if err != nil {
t.Fatal(err)
}
// Old platform times with fresh receipt times keep the receipt-time filter independent.
newest := time.Now().UTC().Add(-30 * time.Hour)
tied := newest.Add(-10 * time.Hour)
oldest := tied.Add(-10 * time.Hour)
deliveries := []ListenerDelivery{
{DeliveryID: "newest", Kind: "notice", Notice: &ListenerNotice{EventKey: "newest", EventType: "comment", PlatformEventAt: &newest}},
{DeliveryID: "missing-first", Kind: "notice", Notice: &ListenerNotice{EventKey: "missing-first", EventType: "like"}},
{DeliveryID: "oldest", Kind: "notice", Notice: &ListenerNotice{EventKey: "oldest", EventType: "like", PlatformEventAt: &oldest}},
{DeliveryID: "tie-first", Kind: "notice", Notice: &ListenerNotice{EventKey: "tie-first", EventType: "comment", PlatformEventAt: &tied}},
{DeliveryID: "tie-second", Kind: "notice", Notice: &ListenerNotice{EventKey: "tie-second", EventType: "like", PlatformEventAt: &tied}},
{DeliveryID: "missing-second", Kind: "notice", Notice: &ListenerNotice{EventKey: "missing-second", EventType: "like"}},
}
if err := store.RecordListenerDeliveries(ctx, id, state.Generation, deliveries); err != nil {
t.Fatal(err)
}
want := []string{"newest", "tie-second", "tie-first", "oldest", "missing-second", "missing-first"}
for pass := 0; pass < 2; pass++ {
var got []string
for pageNumber := 1; pageNumber <= 3; pageNumber++ {
page, err := store.ListAggregatedEventsPage(ctx, EventAggregationFilter{}, pageNumber, 2)
if err != nil {
t.Fatal(err)
}
if page.Total != len(want) || len(page.Data) != 2 || page.HasNext != (pageNumber < 3) {
t.Fatalf("page %d: %+v", pageNumber, page)
}
for _, event := range page.Data {
got = append(got, event.EventKey)
if event.EventKey == "missing-first" || event.EventKey == "missing-second" {
if event.PlatformEventAt != nil {
t.Fatalf("missing occurrence time was fabricated: %+v", event)
}
}
}
}
if !reflect.DeepEqual(got, want) {
t.Fatalf("occurrence order across pages: got %v, want %v", got, want)
}
}
filtered, err := store.ListAggregatedEventsPage(ctx, EventAggregationFilter{AccountID: id, EventType: "comment", Hours: 1}, 1, 1)
if err != nil {
t.Fatal(err)
}
if filtered.Total != 2 || len(filtered.Data) != 1 || filtered.Data[0].EventKey != "newest" || !filtered.HasNext {
t.Fatalf("receipt-time filter and order before pagination: %+v", filtered)
}
}