@@ -328,3 +328,77 @@ func TestLinkModel(t *testing.T) {
328328 assert .Equal (t , link .RenderedHTMLContent , retrieved .RenderedHTMLContent )
329329 assert .Equal (t , link .RenderStatus , retrieved .RenderStatus )
330330}
331+
332+ func TestResetStuckRenderingTasks (t * testing.T ) {
333+ setupTestDB (t )
334+ defer teardownTestDB (t )
335+
336+ // Create test data with various render statuses
337+ testLinks := []Link {
338+ {
339+ ShortCode : "STUCK1" ,
340+ OriginalURL : "https://stuck1.com" ,
341+ RenderStatus : RenderStatusRendering , // This should be reset
342+ },
343+ {
344+ ShortCode : "STUCK2" ,
345+ OriginalURL : "https://stuck2.com" ,
346+ RenderStatus : RenderStatusRendering , // This should be reset
347+ },
348+ {
349+ ShortCode : "COMPLETE1" ,
350+ OriginalURL : "https://complete1.com" ,
351+ RenderStatus : RenderStatusCompleted , // This should not be affected
352+ },
353+ {
354+ ShortCode : "PENDING1" ,
355+ OriginalURL : "https://pending1.com" ,
356+ RenderStatus : RenderStatusPending , // This should not be affected
357+ },
358+ {
359+ ShortCode : "FAILED1" ,
360+ OriginalURL : "https://failed1.com" ,
361+ RenderStatus : RenderStatusFailed , // This should not be affected
362+ },
363+ }
364+
365+ // Insert test data
366+ for _ , link := range testLinks {
367+ err := CreateLink (& link )
368+ require .NoError (t , err )
369+ }
370+
371+ // Test resetting stuck tasks
372+ affected , err := ResetStuckRenderingTasks ()
373+ require .NoError (t , err )
374+ assert .Equal (t , int64 (2 ), affected , "Should have reset exactly 2 stuck tasks" )
375+
376+ // Verify the results
377+ for _ , link := range testLinks {
378+ updatedLink , err := GetLinkByShortCode (link .ShortCode )
379+ require .NoError (t , err )
380+
381+ switch link .ShortCode {
382+ case "STUCK1" , "STUCK2" :
383+ // These should have been reset to pending
384+ assert .Equal (t , RenderStatusPending , updatedLink .RenderStatus ,
385+ "Stuck task %s should have been reset to pending" , link .ShortCode )
386+ default :
387+ // These should remain unchanged
388+ assert .Equal (t , link .RenderStatus , updatedLink .RenderStatus ,
389+ "Non-stuck task %s should have remained unchanged" , link .ShortCode )
390+ }
391+ }
392+
393+ // Test resetting when no stuck tasks exist
394+ affected , err = ResetStuckRenderingTasks ()
395+ require .NoError (t , err )
396+ assert .Equal (t , int64 (0 ), affected , "Should have found no stuck tasks to reset" )
397+
398+ // Test with empty database
399+ teardownTestDB (t )
400+ setupTestDB (t )
401+ affected , err = ResetStuckRenderingTasks ()
402+ require .NoError (t , err )
403+ assert .Equal (t , int64 (0 ), affected , "Should handle empty database gracefully" )
404+ }
0 commit comments