popiart-server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

114 lines
2.8 KiB

package server
import (
"encoding/json"
"net/http"
"net/http/httptest"
"path/filepath"
"strings"
"testing"
)
func TestExecuteImageToImageJobUsesGenerationsPathForMiniMax(t *testing.T) {
var gotPath string
var gotBody map[string]any
var apiSrv *httptest.Server
apiSrv = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/reference.png":
w.Header().Set("Content-Type", "image/png")
_, _ = w.Write(tinyPNG(t))
case "/v1/images/generations":
gotPath = r.URL.Path
if err := json.NewDecoder(r.Body).Decode(&gotBody); err != nil {
t.Fatalf("decode request body: %v", err)
}
w.Header().Set("Content-Type", "application/json")
_, _ = w.Write([]byte(`{
"created": 1711234567,
"data": [{"url":"` + strings.TrimRight(apiSrv.URL, "/") + `/generated.png"}]
}`))
case "/generated.png":
w.Header().Set("Content-Type", "image/png")
_, _ = w.Write(tinyPNG(t))
default:
http.NotFound(w, r)
}
}))
defer apiSrv.Close()
cfg := Config{
NewAPIBaseURL: apiSrv.URL,
SQLitePath: filepath.Join(t.TempDir(), "popiart.db"),
SkillhubDir: makeEmptySkillhub(t),
SessionSecret: "test-secret",
PublicBaseURL: "http://127.0.0.1:8080",
}
server, err := NewWithConfig(cfg)
if err != nil {
t.Fatalf("NewWithConfig: %v", err)
}
server.newapi.httpClient = apiSrv.Client()
sessionToken, _, ok, err := server.store.createSession("sk-test-upstream")
if err != nil {
t.Fatalf("createSession: %v", err)
}
if !ok {
t.Fatal("expected session creation to succeed")
}
current, exists, err := server.store.session(sessionToken)
if err != nil {
t.Fatalf("load session: %v", err)
}
if !exists {
t.Fatal("expected stored session")
}
record, _, err := server.store.createJob(
"",
"image.img2img",
"image-01",
"sync_result",
map[string]any{
"prompt": "turn this into a poster",
"image": apiSrv.URL + "/reference.png",
"aspect_ratio": "3:4",
"response_format": "url",
},
"",
"normal",
"",
current,
)
if err != nil {
t.Fatalf("createJob: %v", err)
}
server.executeImageToImageJob(record)
if gotPath != "/v1/images/generations" {
t.Fatalf("expected minimax img2img to use /v1/images/generations, got %q", gotPath)
}
if gotBody["model"] != "image-01" {
t.Fatalf("unexpected model payload: %#v", gotBody["model"])
}
if gotBody["image"] != apiSrv.URL+"/reference.png" {
t.Fatalf("expected generations payload image field, got %#v", gotBody["image"])
}
done, exists, err := server.store.getJob(current.User.ID, record.JobID)
if err != nil {
t.Fatalf("getJob: %v", err)
}
if !exists {
t.Fatal("expected stored job")
}
if done.Status != "done" {
t.Fatalf("expected job done, got %#v", done.Status)
}
if len(done.ArtifactIDs) != 1 {
t.Fatalf("expected one artifact id, got %#v", done.ArtifactIDs)
}
}