48 lines
1.2 KiB
Go
48 lines
1.2 KiB
Go
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)
|
|
}
|
|
}
|