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.3 KiB
Go
74 lines
2.3 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
creator "git.ipao.vip/rogee/creator-hub/internal/creator"
|
|
)
|
|
|
|
type eventCoverFilesStub struct {
|
|
files map[string]bool
|
|
readErr, saveErr error
|
|
}
|
|
|
|
func (s *eventCoverFilesStub) GetPlatformWorkCover(uid, key string) (string, error) {
|
|
if s.readErr != nil {
|
|
return "", s.readErr
|
|
}
|
|
if s.files[uid+"/"+key] {
|
|
return "cached", nil
|
|
}
|
|
return "", creator.ErrNotFound
|
|
}
|
|
func (s *eventCoverFilesStub) SavePlatformWorkCover(uid, key, mime string, data []byte) error {
|
|
if s.saveErr != nil {
|
|
return s.saveErr
|
|
}
|
|
s.files[uid+"/"+key] = true
|
|
return nil
|
|
}
|
|
func coverNotice() creator.ListenerDelivery {
|
|
return creator.ListenerDelivery{Kind: "notice", Notice: &creator.ListenerNotice{EventKey: "1", WorkID: "2", WorkAuthorUID: "3", WorkCoverURL: "https://p3.douyinpic.com/a.jpg", MessageText: "原内容", WorkCoverError: "old failure"}}
|
|
}
|
|
func TestListenerWorkCoversReuseSharedFilesAndExposeFailures(t *testing.T) {
|
|
files := &eventCoverFilesStub{files: map[string]bool{}}
|
|
calls := 0
|
|
fetch := func(context.Context, string) (string, []byte, error) {
|
|
calls++
|
|
return "image/jpeg", []byte("image"), nil
|
|
}
|
|
items := []creator.ListenerDelivery{coverNotice(), coverNotice(), {Kind: "checkpoint"}}
|
|
cacheListenerWorkCovers(context.Background(), files, fetch, items)
|
|
if calls != 1 || items[0].Notice.WorkCoverError != "" || items[1].Notice.WorkCoverError != "" {
|
|
t.Fatalf("duplicate fetch/old errors: %d %+v", calls, items)
|
|
}
|
|
for _, failure := range []string{"read", "download", "save"} {
|
|
files := &eventCoverFilesStub{files: map[string]bool{}}
|
|
failed := errors.New(failure + " failed")
|
|
called := false
|
|
fetch := func(context.Context, string) (string, []byte, error) {
|
|
called = true
|
|
if failure == "download" {
|
|
return "", nil, failed
|
|
}
|
|
return "image/jpeg", []byte("image"), nil
|
|
}
|
|
if failure == "read" {
|
|
files.readErr = failed
|
|
}
|
|
if failure == "save" {
|
|
files.saveErr = failed
|
|
}
|
|
items := []creator.ListenerDelivery{coverNotice()}
|
|
cacheListenerWorkCovers(context.Background(), files, fetch, items)
|
|
if items[0].Notice.WorkCoverError != failed.Error() || items[0].Notice.MessageText != "原内容" {
|
|
t.Fatalf("failure hidden: %+v", items)
|
|
}
|
|
if failure == "read" && called {
|
|
t.Fatal("filesystem failure concealed by download")
|
|
}
|
|
}
|
|
}
|