@@ -96,6 +96,17 @@ func setupUnfinishedFilePath(t *testing.T) {
9696 })
9797}
9898
99+ func setupDownloadConfigDir (t * testing.T ) {
100+ t .Helper ()
101+
102+ orig := config .GetConfigDir
103+ dir := filepath .Join (t .TempDir (), "config" )
104+ config .GetConfigDir = func () string { return dir }
105+ t .Cleanup (func () {
106+ config .GetConfigDir = orig
107+ })
108+ }
109+
99110func waitForManagerReady (t * testing.T , dm * DownloadManager ) {
100111 t .Helper ()
101112
@@ -284,3 +295,80 @@ func TestDoDownload_CancelSendsCancelled(t *testing.T) {
284295 t .Fatalf ("expected cancellation error, got: %q" , last .Err )
285296 }
286297}
298+
299+ func TestStartDownload_PersistsSingleVideoInfoForResume (t * testing.T ) {
300+ setupUnfinishedFilePath (t )
301+ setupDownloadConfigDir (t )
302+
303+ m , p := runCollectorProgram (t )
304+ _ = m
305+ dm := NewDownloadManager ()
306+
307+ cmd := StartDownload (dm , p , types.DownloadRequest {
308+ URL : "https://www.youtube.com/watch?v=abc123" ,
309+ FormatID : "best" ,
310+ Title : "Saved Title" ,
311+ })
312+ if cmd == nil {
313+ t .Fatalf ("expected non-nil start command" )
314+ }
315+
316+ msg := cmd ()
317+ if msg != nil {
318+ t .Fatalf ("start command msg = %T, want nil" , msg )
319+ }
320+
321+ entry := GetUnfinishedByURL ("https://www.youtube.com/watch?v=abc123" )
322+ if entry == nil {
323+ t .Fatalf ("expected unfinished entry to exist" )
324+ }
325+ if len (entry .Videos ) != 1 {
326+ t .Fatalf ("entry.Videos len = %d, want 1" , len (entry .Videos ))
327+ }
328+ if entry .Videos [0 ].ID != "https://www.youtube.com/watch?v=abc123" {
329+ t .Fatalf ("entry.Videos[0].ID = %q, want URL" , entry .Videos [0 ].ID )
330+ }
331+ if entry .Videos [0 ].VideoTitle != "Saved Title" {
332+ t .Fatalf ("entry.Videos[0].VideoTitle = %q, want %q" , entry .Videos [0 ].VideoTitle , "Saved Title" )
333+ }
334+ }
335+
336+ func TestStartDownload_PersistsFullSingleVideoMetadata (t * testing.T ) {
337+ setupUnfinishedFilePath (t )
338+ setupDownloadConfigDir (t )
339+
340+ _ , p := runCollectorProgram (t )
341+ dm := NewDownloadManager ()
342+
343+ video := types.VideoItem {
344+ ID : "https://www.youtube.com/watch?v=meta123" ,
345+ VideoTitle : "Meta Title" ,
346+ Desc : "Meta Description" ,
347+ Views : 12345 ,
348+ Duration : 321 ,
349+ Channel : "Meta Channel" ,
350+ }
351+
352+ cmd := StartDownload (dm , p , types.DownloadRequest {
353+ URL : video .ID ,
354+ FormatID : "best" ,
355+ Title : video .Title (),
356+ Videos : []types.VideoItem {video },
357+ })
358+ if cmd == nil {
359+ t .Fatalf ("expected non-nil start command" )
360+ }
361+ _ = cmd ()
362+
363+ entry := GetUnfinishedByURL (video .ID )
364+ if entry == nil {
365+ t .Fatalf ("expected unfinished entry to exist" )
366+ }
367+ if len (entry .Videos ) != 1 {
368+ t .Fatalf ("entry.Videos len = %d, want 1" , len (entry .Videos ))
369+ }
370+ got := entry .Videos [0 ]
371+ if got .Desc != "Meta Description" || got .Views != 12345 || got .Duration != 321 || got .Channel != "Meta Channel" {
372+ t .Fatalf ("video metadata not preserved: %+v" , got )
373+ }
374+ }
0 commit comments