Files
ttstd-infinite-canvas/backend/internal/canvas/user_asset_client_payload_test.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"])
}
}