72 lines
2.9 KiB
Go
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)
|
|
}
|
|
}
|