package creator import ( "errors" "fmt" "testing" "time" ) func TestUpdateListenerEventCoversPreservesNoticeAndRejectsOldGeneration(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) } at := time.Now().UTC().Add(-time.Hour).Truncate(time.Second) delivery := ListenerDelivery{Kind: "notice", DeliveryID: "original", Baseline: true, Notice: &ListenerNotice{EventKey: "notice", EventType: "like", MessageText: "original", InteractorUID: "22", WorkID: "99", WorkAuthorUID: "123", PlatformEventAt: &at}} if err = store.RecordListenerDeliveries(ctx, id, state.Generation, []ListenerDelivery{delivery}); err != nil { t.Fatal(err) } delivery.Notice.WorkCoverError = "download failed" if err = store.UpdateListenerEventCovers(ctx, id, state.Generation, []ListenerDelivery{delivery}); err != nil { t.Fatal(err) } page, err := store.ListAggregatedEventsPage(ctx, EventAggregationFilter{AccountID: id}, 1, 10) if err != nil { t.Fatal(err) } if len(page.Data) != 1 || page.Data[0].WorkCoverError != "download failed" || page.Data[0].MessageText != "original" || !page.Data[0].Baseline || !page.Data[0].PlatformEventAt.Equal(at) { t.Fatalf("event rewritten: %+v", page.Data) } delivery.Notice.WorkID = "100" delivery.Notice.WorkCoverError = "wrong work" if err = store.UpdateListenerEventCovers(ctx, id, state.Generation, []ListenerDelivery{delivery}); err != nil { t.Fatal(err) } var coverError string if err = store.db.QueryRowContext(ctx, `SELECT work_cover_error FROM creator_account_event WHERE account_id=(SELECT id FROM social_account WHERE account_id=$1) AND event_key='notice'`, id).Scan(&coverError); err != nil || coverError != "download failed" { t.Fatalf("wrong work updated: %q %v", coverError, err) } if _, err = store.SetListenerEnabled(ctx, id, false); err != nil { t.Fatal(err) } if err = store.UpdateListenerEventCovers(ctx, id, state.Generation, []ListenerDelivery{delivery}); !errors.Is(err, ErrConflict) { t.Fatalf("old generation accepted: %v", err) } }