@@ -189,72 +189,74 @@ func TestGenerateVideoRequiresPrompt(t *testing.T) {
189189 }
190190}
191191
192- func TestGenerateVideoRejectsTooManyImages (t * testing.T ) {
193- server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
194- t .Fatal ("server should not receive request when image count is invalid" )
195- }))
196- defer server .Close ()
197-
198- var stdout , stderr bytes.Buffer
199- root := newTestRootCommand (t , & stdout , & stderr , server .URL )
200- args := []string {"generate-video" , "--prompt" , "x" }
201- for _ , path := range mediaPaths ("image" , ".jpg" , 10 ) {
202- args = append (args , "--image" , path )
203- }
204- root .SetArgs (args )
205-
206- err := root .Execute ()
207- if err == nil {
208- t .Fatal ("Execute() error = nil, want image count validation" )
209- }
210- if ! strings .Contains (err .Error (), "参考图片最多支持 9 个,当前传入 10 个" ) {
211- t .Fatalf ("error = %q, want image count validation" , err )
212- }
213- }
214-
215- func TestGenerateVideoRejectsTooManyVideos (t * testing.T ) {
216- server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
217- t .Fatal ("server should not receive request when video count is invalid" )
218- }))
219- defer server .Close ()
220-
221- var stdout , stderr bytes.Buffer
222- root := newTestRootCommand (t , & stdout , & stderr , server .URL )
192+ func TestGenerateVideoAcceptsReferencesBeyondFormerLimits (t * testing.T ) {
193+ cwd := chdirTemp (t )
223194 args := []string {"generate-video" , "--prompt" , "x" }
224- for _ , path := range mediaPaths ("video" , ".mp4" , 4 ) {
225- args = append (args , "--video" , path )
226- }
227- root .SetArgs (args )
228-
229- err := root .Execute ()
230- if err == nil {
231- t .Fatal ("Execute() error = nil, want video count validation" )
232- }
233- if ! strings .Contains (err .Error (), "参考视频最多支持 3 个,当前传入 4 个" ) {
234- t .Fatalf ("error = %q, want video count validation" , err )
195+ var assetIDs []string
196+ for _ , media := range []struct {
197+ flag string
198+ ext string
199+ count int
200+ }{
201+ {"image" , ".jpg" , 10 },
202+ {"video" , ".mp4" , 4 },
203+ {"audio" , ".mp3" , 4 },
204+ } {
205+ for _ , name := range mediaPaths (media .flag , media .ext , media .count ) {
206+ path := filepath .Join (cwd , name )
207+ if err := os .WriteFile (path , []byte ("media-data" ), 0o644 ); err != nil {
208+ t .Fatalf ("WriteFile(%s): %v" , path , err )
209+ }
210+ args = append (args , "--" + media .flag , path )
211+ assetIDs = append (assetIDs , name )
212+ }
235213 }
236- }
237214
238- func TestGenerateVideoRejectsTooManyAudios (t * testing.T ) {
215+ uploadIndex := 0
216+ submitted := false
239217 server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
240- t .Fatal ("server should not receive request when audio count is invalid" )
218+ switch r .URL .Path {
219+ case "/api/biz/v1/skill/upload_file" :
220+ if uploadIndex >= len (assetIDs ) {
221+ t .Fatalf ("unexpected upload %d" , uploadIndex )
222+ }
223+ _ , _ = w .Write ([]byte (`{"ret":"0","data":{"pippit_asset_id":"` + assetIDs [uploadIndex ] + `"}}` ))
224+ uploadIndex ++
225+ case "/api/biz/v1/skill/submit_run" :
226+ if uploadIndex != len (assetIDs ) {
227+ t .Fatalf ("uploaded %d references, want %d" , uploadIndex , len (assetIDs ))
228+ }
229+ data , err := io .ReadAll (r .Body )
230+ if err != nil {
231+ t .Fatalf ("read body: %v" , err )
232+ }
233+ var body map [string ]any
234+ if err := sonic .Unmarshal (data , & body ); err != nil {
235+ t .Fatalf ("decode body: %v" , err )
236+ }
237+ param , ok := body ["video_part_tool_param" ].(map [string ]any )
238+ if ! ok {
239+ t .Fatalf ("video_part_tool_param = %#v, want object" , body ["video_part_tool_param" ])
240+ }
241+ assertAssetRefs (t , param ["images" ], assetIDs [:10 ])
242+ assertAssetRefs (t , param ["videos" ], assetIDs [10 :14 ])
243+ assertAssetRefs (t , param ["audios" ], assetIDs [14 :])
244+ submitted = true
245+ _ , _ = w .Write ([]byte (`{"ret":"0","data":{"run":{"thread_id":"thread_123","run_id":"run_456"}}}` ))
246+ default :
247+ t .Fatalf ("unexpected path %s" , r .URL .Path )
248+ }
241249 }))
242250 defer server .Close ()
243251
244252 var stdout , stderr bytes.Buffer
245253 root := newTestRootCommand (t , & stdout , & stderr , server .URL )
246- args := []string {"generate-video" , "--prompt" , "x" }
247- for _ , path := range mediaPaths ("audio" , ".mp3" , 4 ) {
248- args = append (args , "--audio" , path )
249- }
250254 root .SetArgs (args )
251-
252- err := root .Execute ()
253- if err == nil {
254- t .Fatal ("Execute() error = nil, want audio count validation" )
255+ if err := root .Execute (); err != nil {
256+ t .Fatalf ("Execute() error = %v, stderr = %s" , err , stderr .String ())
255257 }
256- if ! strings . Contains ( err . Error (), "参考音频最多支持 3 个,当前传入 4 个" ) {
257- t .Fatalf ( "error = %q, want audio count validation" , err )
258+ if ! submitted {
259+ t .Fatal ( "generate-video did not submit references" )
258260 }
259261}
260262
0 commit comments