package service import ( "context" "testing" "time" "infinite-canvas/backend/internal/model" "infinite-canvas/backend/internal/repository" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func TestCancelTaskRejectsRunningTask(t *testing.T) { db, err := gorm.Open(sqlite.Open("file:"+newID()+"?mode=memory&cache=shared"), &gorm.Config{}) if err != nil { t.Fatal(err) } if err := db.AutoMigrate(&model.Task{}); err != nil { t.Fatal(err) } startedAt := time.Now() task := model.Task{ ID: "running-task", UserID: "user-1", Status: model.TaskStatusRunning, Stage: "调用生成模型", StartedAt: &startedAt, } if err := db.Create(&task).Error; err != nil { t.Fatal(err) } svc := &Service{repo: repository.New(db)} if _, err := svc.CancelTask(context.Background(), task.UserID, task.ID); err == nil || err.Error() != "任务已开始生成,无法取消" { t.Fatalf("CancelTask() error = %v", err) } stored, err := svc.repo.TaskForUser(task.UserID, task.ID) if err != nil { t.Fatal(err) } if stored.Status != model.TaskStatusRunning || stored.CompletedAt != nil { t.Fatalf("running task changed after cancellation attempt: status=%s completedAt=%v", stored.Status, stored.CompletedAt) } }