douyin-release-gate / verify (push) Failing after 18m54s
Add Douyin notification polling, event details, and manual multi-account private messaging. Refine environment memory settings, account operations, login collection recovery, and message UI; update tests and documentation.
74 lines
2.9 KiB
Go
74 lines
2.9 KiB
Go
package creator
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestNotificationHistoryBackfillAcrossEnableGenerations(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)
|
|
}
|
|
first, err := store.SetListenerEnabled(ctx, id, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
now := time.Now().UTC().Truncate(time.Microsecond)
|
|
old := now.Add(-48 * time.Hour)
|
|
history := ListenerDelivery{DeliveryID: "old-delivery", Kind: "notice", Baseline: true, Notice: &ListenerNotice{EventKey: "101", EventType: "comment", PlatformEventAt: &old, MessageText: "历史评论"}}
|
|
if err = store.RecordListenerDeliveries(ctx, id, first.Generation, []ListenerDelivery{history}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err = store.SetListenerEnabled(ctx, id, false); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
during := now.Add(-time.Hour)
|
|
missing := ListenerDelivery{DeliveryID: "disabled-delivery", Kind: "notice", Baseline: true, Notice: &ListenerNotice{EventKey: "102", EventType: "follow", PlatformEventAt: &during}}
|
|
if err = store.RecordListenerDeliveries(ctx, id, first.Generation, []ListenerDelivery{missing}); !errors.Is(err, ErrConflict) {
|
|
t.Fatalf("disabled account accepted delivery: %v", err)
|
|
}
|
|
hidden, err := store.ListAggregatedEventsPage(ctx, EventAggregationFilter{AccountID: id}, 1, 25)
|
|
if err != nil || hidden.Total != 0 {
|
|
t.Fatalf("disabled history visible: %+v %v", hidden, err)
|
|
}
|
|
next, err := store.SetListenerEnabled(ctx, id, true)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkpoint := ListenerDelivery{DeliveryID: "history-complete", Kind: "checkpoint", BoundaryAt: &now, CheckedAt: &now, Checkpoints: map[string]string{"700": "102"}}
|
|
deliveries := []ListenerDelivery{{DeliveryID: "baseline", Kind: "baseline", BoundaryAt: &now}, history, missing, checkpoint}
|
|
for i := 0; i < 2; i++ {
|
|
if err = store.RecordListenerDeliveries(ctx, id, next.Generation, deliveries); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
result, err := store.ListAggregatedEventsPage(ctx, EventAggregationFilter{AccountID: id}, 1, 25)
|
|
if err != nil || result.Total != 2 {
|
|
t.Fatalf("history missing or duplicated: %+v %v", result, err)
|
|
}
|
|
seen := map[string]bool{}
|
|
for _, event := range result.Data {
|
|
if !event.Baseline || event.PlatformEventAt == nil {
|
|
t.Fatalf("historical time/label lost: %+v", event)
|
|
}
|
|
seen[event.EventKey] = true
|
|
if event.EventKey == "101" && !event.PlatformEventAt.Equal(old) {
|
|
t.Fatalf("historical timestamp overwritten: %+v", event)
|
|
}
|
|
if event.EventKey == "102" && !event.PlatformEventAt.Equal(during) {
|
|
t.Fatalf("disabled-period timestamp overwritten: %+v", event)
|
|
}
|
|
}
|
|
if !seen["101"] || !seen["102"] {
|
|
t.Fatalf("history incomplete: %+v", seen)
|
|
}
|
|
}
|