47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package ws
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"everypublish/server/internal/config"
|
|
"everypublish/server/internal/models"
|
|
"everypublish/server/internal/task"
|
|
|
|
gormsqlite "gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestDispatcherLocalMock(t *testing.T) {
|
|
db, err := gorm.Open(gormsqlite.Open("file:dispatcher_mock?mode=memory&cache=shared"), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err = db.AutoMigrate(&models.Task{}, &models.TaskEvent{}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
row := models.Task{WorkspaceID: 1, Title: "web-only", Status: task.Queued, AccountIDs: "[]", MaterialIDs: "[]"}
|
|
if err = db.Create(&row).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
d := NewDispatcher(db, NewHub(), &config.Config{ExecutorMode: "mock"})
|
|
if !d.TryDispatch(row.ID) {
|
|
t.Fatal("mock dispatch should accept queued task")
|
|
}
|
|
deadline := time.Now().Add(2 * time.Second)
|
|
for time.Now().Before(deadline) {
|
|
var got models.Task
|
|
if err = db.First(&got, row.ID).Error; err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.Status == task.Success {
|
|
if got.PublishedURLs == "" || got.Receipts == "" {
|
|
t.Fatal("mock success must include URL and receipt")
|
|
}
|
|
return
|
|
}
|
|
time.Sleep(20 * time.Millisecond)
|
|
}
|
|
t.Fatal("mock task did not reach success")
|
|
}
|