69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
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(`<?xml version="1.0"?><rss version="2.0"><channel><title>T</title>
|
|
<item><title>Hi</title><link>https://example.com/p</link>
|
|
<enclosure url="%s" type="image/png"/>
|
|
</item></channel></rss>`, 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)
|
|
}
|
|
}
|