84 lines
3.0 KiB
Go
84 lines
3.0 KiB
Go
package canvas
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
"time"
|
|
|
|
"yingce/backend/internal/model"
|
|
)
|
|
|
|
func TestClientAssetPayloadRepairsWorkflowAssetDocument(t *testing.T) {
|
|
createdAt := time.Date(2026, 9, 9, 12, 0, 0, 0, time.UTC)
|
|
asset := model.Asset{
|
|
ID: "workflow-asset-test",
|
|
PayloadJSON: `{
|
|
"id":"workflow-asset-test",
|
|
"kind":"video",
|
|
"title":"镜头01 · 视频",
|
|
"category":"material",
|
|
"status":"confirmed",
|
|
"tags":[],
|
|
"data":{"url":"/api/resources/res-1/file","storageKey":"resource:res-1","width":0,"height":0,"bytes":1,"mimeType":"video/mp4"}
|
|
}`,
|
|
CreatedAt: createdAt,
|
|
UpdatedAt: createdAt,
|
|
}
|
|
|
|
raw := ClientAssetPayload(asset)
|
|
var payload map[string]any
|
|
if err := json.Unmarshal(raw, &payload); err != nil {
|
|
t.Fatalf("unmarshal payload: %v", err)
|
|
}
|
|
if payload["coverUrl"] != "/api/resources/res-1/file" {
|
|
t.Fatalf("coverUrl = %#v", payload["coverUrl"])
|
|
}
|
|
if payload["createdAt"] == nil || payload["updatedAt"] == nil {
|
|
t.Fatalf("timestamps missing: %#v", payload)
|
|
}
|
|
data := payload["data"].(map[string]any)
|
|
if data["width"].(float64) != 1 || data["height"].(float64) != 1 {
|
|
t.Fatalf("dimensions = %#v", data)
|
|
}
|
|
}
|
|
|
|
func TestClientAssetPayloadPreservesCompleteDocument(t *testing.T) {
|
|
rawInput := `{"id":"asset-1","kind":"image","title":"完整","coverUrl":"https://example.com/a.png","tags":["角色"],"createdAt":"2026-08-29T00:00:00.000Z","updatedAt":"2026-08-29T00:00:00.000Z","data":{"dataUrl":"https://example.com/a.png","width":2,"height":3,"bytes":1,"mimeType":"image/png"}}`
|
|
asset := model.Asset{PayloadJSON: rawInput}
|
|
raw := ClientAssetPayload(asset)
|
|
var before map[string]any
|
|
var after map[string]any
|
|
if err := json.Unmarshal([]byte(rawInput), &before); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := json.Unmarshal(raw, &after); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
beforeJSON, _ := json.Marshal(before)
|
|
afterJSON, _ := json.Marshal(after)
|
|
if string(beforeJSON) != string(afterJSON) {
|
|
t.Fatalf("payload changed: %s", raw)
|
|
}
|
|
}
|
|
|
|
func TestClientAssetListPayloadDropsVerboseMetadata(t *testing.T) {
|
|
asset := model.Asset{PayloadJSON: `{"id":"asset-1","kind":"image","title":"列表","coverUrl":"https://example.com/a.png","tags":[],"data":{"dataUrl":"https://example.com/a.png","width":2,"height":3,"bytes":1,"mimeType":"image/png"},"metadata":{"prompt":"很长的生成提示词","nodeId":"node-1","projectIds":["project-1"]}}`}
|
|
var payload map[string]any
|
|
if err := json.Unmarshal(ClientAssetListPayload(asset), &payload); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
metadata := payload["metadata"].(map[string]any)
|
|
if _, found := metadata["prompt"]; found {
|
|
t.Fatalf("list payload still contains prompt: %#v", metadata)
|
|
}
|
|
if _, found := metadata["nodeId"]; found {
|
|
t.Fatalf("list payload still contains node metadata: %#v", metadata)
|
|
}
|
|
if metadata["projectIds"].([]any)[0] != "project-1" {
|
|
t.Fatalf("list payload dropped useful metadata: %#v", metadata)
|
|
}
|
|
if payload["coverUrl"] != "" {
|
|
t.Fatalf("duplicate cover URL was not removed: %#v", payload["coverUrl"])
|
|
}
|
|
}
|