42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
"time"
|
|
|
|
"infinite-canvas/backend/internal/model"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestClaimTaskProviderCancellationOnlySucceedsOnce(t *testing.T) {
|
|
db, err := gorm.Open(sqlite.Open("file:provider-cancel-claim?mode=memory&cache=shared"), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := db.AutoMigrate(&model.Task{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
task := model.Task{ID: "task-1", UserID: "user-1", Status: model.TaskStatusCancelled}
|
|
if err := db.Create(&task).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
repo := New(db)
|
|
if err := repo.ClaimTaskProviderCancellation(task.UserID, task.ID, time.Now()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := repo.ClaimTaskProviderCancellation(task.UserID, task.ID, time.Now()); !errors.Is(err, ErrTaskProviderCancellationConflict) {
|
|
t.Fatalf("expected cancellation claim conflict, got %v", err)
|
|
}
|
|
stored, err := repo.Task(task.ID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if stored.ProviderCancelStatus != model.ProviderCancelStatusRequested || stored.ProviderCancelAttempts != 1 {
|
|
t.Fatalf("unexpected cancellation state: status=%s attempts=%d", stored.ProviderCancelStatus, stored.ProviderCancelAttempts)
|
|
}
|
|
}
|