Files
creator-hub/internal/creator/notice_history_test.go
T
rogee e50bed9ad8
douyin-release-gate / verify (push) Failing after 18m54s
feat: add account events and private message management
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.
2026-10-07 10:23:05 +08:00

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)
}
}