fix(api): 素材同步 - 增加 ID 长度边界校验

This commit is contained in:
ddCat committed 2026-08-15 17:00:30 +08:00
1 parent f5bb9ed4f9
commit fdb31832e5
2 files changed
+55 -1

No files matched your search

@@ -2,9 +2,55 @@ package service
import (
"encoding/json"
"strings"
"testing"
"infinite-canvas/backend/internal/model"
)
func TestAssetFromJSONAcceptsDeterministicGenerationID(t *testing.T) {
id := "generation_" + strings.Repeat("a", 64)
raw, err := json.Marshal(map[string]any{"id": id, "kind": "image", "title": "生成图片"})
if err != nil {
t.Fatalf("marshal asset: %v", err)
}
asset, err := assetFromJSON("user-1", raw)
if err != nil {
t.Fatalf("assetFromJSON: %v", err)
}
if asset.ID != id {
t.Fatalf("asset ID = %q, want %q", asset.ID, id)
}
if len([]rune(asset.ID)) > model.AssetIDMaxLength {
t.Fatalf("generation asset ID length = %d, limit %d", len([]rune(asset.ID)), model.AssetIDMaxLength)
}
}
func TestAssetFromJSONRejectsIDOverLimit(t *testing.T) {
raw, err := json.Marshal(map[string]any{"id": strings.Repeat("a", model.AssetIDMaxLength+1), "kind": "image"})
if err != nil {
t.Fatalf("marshal asset: %v", err)
}
_, err = assetFromJSON("user-1", raw)
if err == nil || !strings.Contains(err.Error(), "素材 ID 不能超过 80 个字符") {
t.Fatalf("assetFromJSON error = %v", err)
}
}
func TestAssetFromJSONRejectsPrimaryVersionIDOverLimit(t *testing.T) {
raw, err := json.Marshal(map[string]any{"id": "asset-1", "primaryVersionId": strings.Repeat("v", 37)})
if err != nil {
t.Fatalf("marshal asset: %v", err)
}
_, err = assetFromJSON("user-1", raw)
if err == nil || !strings.Contains(err.Error(), "素材主版本 ID 不能超过 36 个字符") {
t.Fatalf("assetFromJSON error = %v", err)
}
}
func TestValidateSyncedPayloadAllowsDataURLMentionInErrorMessage(t *testing.T) {
raw, err := json.Marshal(map[string]interface{}{
"nodes": []interface{}{