@@ -442,6 +442,156 @@ func TestTaskServiceImpl_UpdateTask(t *testing.T) {
442442 })
443443 assert .EqualError (t , err , "finish fail" )
444444 })
445+
446+ t .Run ("running to pending removes cache and skips finish" , func (t * testing.T ) {
447+ t .Parallel ()
448+ ctrl := gomock .NewController (t )
449+ defer ctrl .Finish ()
450+
451+ repoMock := repomocks .NewMockITaskRepo (ctrl )
452+ taskDO := & entity.ObservabilityTask {
453+ ID : 1 ,
454+ WorkspaceID : 2 ,
455+ TaskType : entity .TaskTypeAutoEval ,
456+ TaskStatus : entity .TaskStatusRunning ,
457+ Sampler : & entity.Sampler {},
458+ EffectiveTime : & entity.EffectiveTime {
459+ StartAt : time .Now ().Add (- time .Minute ).UnixMilli (),
460+ EndAt : time .Now ().Add (time .Minute ).UnixMilli (),
461+ },
462+ TaskRuns : []* entity.TaskRun {{RunStatus : entity .TaskRunStatusRunning }},
463+ }
464+
465+ repoMock .EXPECT ().GetTask (gomock .Any (), int64 (1 ), gomock .Any (), gomock .Nil ()).Return (taskDO , nil )
466+ repoMock .EXPECT ().RemoveNonFinalTask (gomock .Any (), "2" , int64 (1 )).Return (nil )
467+ repoMock .EXPECT ().UpdateTask (gomock .Any (), taskDO ).Return (nil )
468+
469+ procMock := & fakeProcessor {onTaskRunFinishedErr : errors .New ("finish fail" )}
470+ tp := processor .NewTaskProcessor ()
471+ tp .Register (entity .TaskTypeAutoEval , procMock )
472+ svc := & TaskServiceImpl {TaskRepo : repoMock , taskProcessor : * tp }
473+
474+ err := svc .UpdateTask (session .WithCtxUser (context .Background (), & session.User {ID : "user" }), & UpdateTaskReq {
475+ TaskID : 1 ,
476+ WorkspaceID : 2 ,
477+ TaskStatus : gptr .Of (entity .TaskStatusPending ),
478+ UserID : "user" ,
479+ })
480+ assert .NoError (t , err )
481+ assert .Equal (t , entity .TaskStatusPending , taskDO .TaskStatus )
482+ })
483+
484+ t .Run ("running to pending remove cache error" , func (t * testing.T ) {
485+ t .Parallel ()
486+ ctrl := gomock .NewController (t )
487+ defer ctrl .Finish ()
488+
489+ repoMock := repomocks .NewMockITaskRepo (ctrl )
490+ taskDO := & entity.ObservabilityTask {
491+ ID : 1 ,
492+ WorkspaceID : 2 ,
493+ TaskType : entity .TaskTypeAutoEval ,
494+ TaskStatus : entity .TaskStatusRunning ,
495+ Sampler : & entity.Sampler {},
496+ EffectiveTime : & entity.EffectiveTime {
497+ StartAt : time .Now ().Add (- time .Minute ).UnixMilli (),
498+ EndAt : time .Now ().Add (time .Minute ).UnixMilli (),
499+ },
500+ TaskRuns : []* entity.TaskRun {{RunStatus : entity .TaskRunStatusRunning }},
501+ }
502+
503+ repoMock .EXPECT ().GetTask (gomock .Any (), int64 (1 ), gomock .Any (), gomock .Nil ()).Return (taskDO , nil )
504+ repoMock .EXPECT ().RemoveNonFinalTask (gomock .Any (), "2" , int64 (1 )).Return (errors .New ("remove cache fail" ))
505+ repoMock .EXPECT ().UpdateTask (gomock .Any (), taskDO ).Return (nil )
506+
507+ procMock := & fakeProcessor {}
508+ tp := processor .NewTaskProcessor ()
509+ tp .Register (entity .TaskTypeAutoEval , procMock )
510+ svc := & TaskServiceImpl {TaskRepo : repoMock , taskProcessor : * tp }
511+
512+ err := svc .UpdateTask (session .WithCtxUser (context .Background (), & session.User {ID : "user" }), & UpdateTaskReq {
513+ TaskID : 1 ,
514+ WorkspaceID : 2 ,
515+ TaskStatus : gptr .Of (entity .TaskStatusPending ),
516+ UserID : "user" ,
517+ })
518+ assert .NoError (t , err )
519+ assert .Equal (t , entity .TaskStatusPending , taskDO .TaskStatus )
520+ })
521+
522+ t .Run ("pending to running adds cache" , func (t * testing.T ) {
523+ t .Parallel ()
524+ ctrl := gomock .NewController (t )
525+ defer ctrl .Finish ()
526+
527+ repoMock := repomocks .NewMockITaskRepo (ctrl )
528+ taskDO := & entity.ObservabilityTask {
529+ ID : 1 ,
530+ WorkspaceID : 2 ,
531+ TaskType : entity .TaskTypeAutoEval ,
532+ TaskStatus : entity .TaskStatusPending ,
533+ Sampler : & entity.Sampler {},
534+ EffectiveTime : & entity.EffectiveTime {
535+ StartAt : time .Now ().Add (- time .Minute ).UnixMilli (),
536+ EndAt : time .Now ().Add (time .Minute ).UnixMilli (),
537+ },
538+ }
539+
540+ repoMock .EXPECT ().GetTask (gomock .Any (), int64 (1 ), gomock .Any (), gomock .Nil ()).Return (taskDO , nil )
541+ repoMock .EXPECT ().AddNonFinalTask (gomock .Any (), "2" , int64 (1 )).Return (nil )
542+ repoMock .EXPECT ().UpdateTask (gomock .Any (), taskDO ).Return (nil )
543+
544+ procMock := & fakeProcessor {}
545+ tp := processor .NewTaskProcessor ()
546+ tp .Register (entity .TaskTypeAutoEval , procMock )
547+ svc := & TaskServiceImpl {TaskRepo : repoMock , taskProcessor : * tp }
548+
549+ err := svc .UpdateTask (session .WithCtxUser (context .Background (), & session.User {ID : "user" }), & UpdateTaskReq {
550+ TaskID : 1 ,
551+ WorkspaceID : 2 ,
552+ TaskStatus : gptr .Of (entity .TaskStatusRunning ),
553+ UserID : "user" ,
554+ })
555+ assert .NoError (t , err )
556+ assert .Equal (t , entity .TaskStatusRunning , taskDO .TaskStatus )
557+ })
558+
559+ t .Run ("pending to running add cache error" , func (t * testing.T ) {
560+ t .Parallel ()
561+ ctrl := gomock .NewController (t )
562+ defer ctrl .Finish ()
563+
564+ repoMock := repomocks .NewMockITaskRepo (ctrl )
565+ taskDO := & entity.ObservabilityTask {
566+ ID : 1 ,
567+ WorkspaceID : 2 ,
568+ TaskType : entity .TaskTypeAutoEval ,
569+ TaskStatus : entity .TaskStatusPending ,
570+ Sampler : & entity.Sampler {},
571+ EffectiveTime : & entity.EffectiveTime {
572+ StartAt : time .Now ().Add (- time .Minute ).UnixMilli (),
573+ EndAt : time .Now ().Add (time .Minute ).UnixMilli (),
574+ },
575+ }
576+
577+ repoMock .EXPECT ().GetTask (gomock .Any (), int64 (1 ), gomock .Any (), gomock .Nil ()).Return (taskDO , nil )
578+ repoMock .EXPECT ().AddNonFinalTask (gomock .Any (), "2" , int64 (1 )).Return (errors .New ("add cache fail" ))
579+ repoMock .EXPECT ().UpdateTask (gomock .Any (), taskDO ).Return (nil )
580+
581+ procMock := & fakeProcessor {}
582+ tp := processor .NewTaskProcessor ()
583+ tp .Register (entity .TaskTypeAutoEval , procMock )
584+ svc := & TaskServiceImpl {TaskRepo : repoMock , taskProcessor : * tp }
585+
586+ err := svc .UpdateTask (session .WithCtxUser (context .Background (), & session.User {ID : "user" }), & UpdateTaskReq {
587+ TaskID : 1 ,
588+ WorkspaceID : 2 ,
589+ TaskStatus : gptr .Of (entity .TaskStatusRunning ),
590+ UserID : "user" ,
591+ })
592+ assert .NoError (t , err )
593+ assert .Equal (t , entity .TaskStatusRunning , taskDO .TaskStatus )
594+ })
445595}
446596
447597func TestTaskServiceImpl_ListTasks (t * testing.T ) {
0 commit comments