package logic import ( "bytes" "context" "fmt" "image" "image/color" "image/png" "net/http" "net/http/httptest" "testing" "time" userentity "spark-server/internal/module/user/entity" pkgmedia "spark-server/internal/pkg/media" ) type memObjectStore struct { puts int } func (m *memObjectStore) Put(context.Context, string, []byte, string) error { m.puts++ return nil } func (m *memObjectStore) PutLarge(context.Context, string, []byte, string, int) error { m.puts++ return nil } func TestBindMediaAttachOnTick(t *testing.T) { img := image.NewRGBA(image.Rect(0, 0, 4, 4)) img.Set(0, 0, color.White) var buf bytes.Buffer if err := png.Encode(&buf, img); err != nil { t.Fatal(err) } imgSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write(buf.Bytes()) })) defer imgSrv.Close() rss := fmt.Sprintf(`T Hihttps://example.com/p `, imgSrv.URL) feedSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { _, _ = w.Write([]byte(rss)) })) defer feedSrv.Close() sq := &stubSquare{} store := &memObjectStore{} comp := NewMediaCompressor(pkgmedia.DefaultLimits(), 80, 28, "") comp.Client = imgSrv.Client() svc := NewService(nil, sq, stubUsers{u: &userentity.User{ID: 7, Nickname: "Bot"}}, nil, &Options{ Enabled: true, Feeds: []string{feedSrv.URL}, BotIndexes: []int{1}, TTL: time.Hour, }) svc.client = feedSrv.Client() svc.BindMedia(comp, store, true) if err := svc.Tick(t.Context()); err != nil { t.Fatal(err) } if sq.published != 1 || store.puts != 1 { t.Fatalf("published=%d puts=%d", sq.published, store.puts) } }