Files
crawlab/core/controllers/test/spider_test.go
2024-06-14 15:42:50 +08:00

184 lines
4.1 KiB
Go

package test
import (
"github.com/crawlab-team/crawlab/core/entity"
"github.com/crawlab-team/crawlab/core/interfaces"
"github.com/crawlab-team/crawlab/core/models/delegate"
"github.com/crawlab-team/crawlab/core/models/models"
"github.com/crawlab-team/crawlab/core/models/service"
"github.com/stretchr/testify/require"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"net/http"
"testing"
)
func TestSpiderController_Delete(t *testing.T) {
T.Setup(t)
e := T.NewExpect(t)
s := models.Spider{
Name: "test spider",
Description: "this is a test spider",
ColName: "test col name",
}
// add spider
res := T.WithAuth(e.POST("/spiders")).
WithJSON(s).
Expect().Status(http.StatusOK).
JSON().Object()
res.Path("$.data._id").NotNull()
id := res.Path("$.data._id").String().Raw()
oid, err := primitive.ObjectIDFromHex(id)
require.Nil(t, err)
require.False(t, oid.IsZero())
// add tasks
var taskIds []primitive.ObjectID
tasks := []models.Task{
{
Id: primitive.NewObjectID(),
SpiderId: oid,
},
{
Id: primitive.NewObjectID(),
SpiderId: oid,
},
}
for _, task := range tasks {
// add task
err := delegate.NewModelDelegate(&task).Add()
require.Nil(t, err)
// add task stat
err = delegate.NewModelDelegate(&models.TaskStat{
Id: task.Id,
}).Add()
require.Nil(t, err)
taskIds = append(taskIds, task.Id)
}
// delete
T.WithAuth(e.DELETE("/spiders/" + id)).
Expect().Status(http.StatusOK)
// get
T.WithAuth(e.GET("/spiders/" + id)).
Expect().Status(http.StatusNotFound)
// get tasks
for _, task := range tasks {
T.WithAuth(e.GET("/tasks/" + task.Id.Hex())).
Expect().Status(http.StatusNotFound)
}
// spider stat
modelSpiderStatSvc := service.NewBaseService(interfaces.ModelIdSpiderStat)
spiderStatCount, err := modelSpiderStatSvc.Count(bson.M{
"_id": oid,
})
require.Nil(t, err)
require.Zero(t, spiderStatCount)
// task stats
modelTaskStatSvc := service.NewBaseService(interfaces.ModelIdTaskStat)
taskStatCount, err := modelTaskStatSvc.Count(bson.M{
"_id": bson.M{
"$in": taskIds,
},
})
require.Nil(t, err)
require.Zero(t, taskStatCount)
}
func TestSpiderController_DeleteList(t *testing.T) {
T.Setup(t)
e := T.NewExpect(t)
spiders := []models.Spider{
{
Id: primitive.NewObjectID(),
Name: "test spider 1",
Description: "this is a test spider 1",
ColName: "test col name 1",
},
{
Id: primitive.NewObjectID(),
Name: "test spider 2",
Description: "this is a test spider 2",
ColName: "test col name 2",
},
}
// add spiders
for _, spider := range spiders {
T.WithAuth(e.POST("/spiders")).
WithJSON(spider).
Expect().Status(http.StatusOK)
}
var spiderIds []primitive.ObjectID
var taskIds []primitive.ObjectID
for _, spider := range spiders {
// task id
taskId := primitive.NewObjectID()
// add task
err := delegate.NewModelDelegate(&models.Task{
Id: taskId,
SpiderId: spider.Id,
}).Add()
require.Nil(t, err)
// add task stats
err = delegate.NewModelDelegate(&models.TaskStat{
Id: taskId,
}).Add()
require.Nil(t, err)
spiderIds = append(spiderIds, spider.Id)
taskIds = append(taskIds, taskId)
}
// delete spiders
T.WithAuth(e.DELETE("/spiders")).
WithJSON(entity.BatchRequestPayload{
Ids: spiderIds,
}).Expect().Status(http.StatusOK)
// get spiders
for _, spider := range spiders {
// get
T.WithAuth(e.GET("/spiders/" + spider.Id.Hex())).
Expect().Status(http.StatusNotFound)
}
// get tasks
for _, taskId := range taskIds {
T.WithAuth(e.GET("/tasks/" + taskId.Hex())).
Expect().Status(http.StatusNotFound)
}
// spider stat
modelSpiderStatSvc := service.NewBaseService(interfaces.ModelIdSpiderStat)
spiderStatCount, err := modelSpiderStatSvc.Count(bson.M{
"_id": bson.M{
"$in": spiderIds,
},
})
require.Nil(t, err)
require.Zero(t, spiderStatCount)
// task stats
modelTaskStatSvc := service.NewBaseService(interfaces.ModelIdTaskStat)
taskStatCount, err := modelTaskStatSvc.Count(bson.M{
"_id": bson.M{
"$in": taskIds,
},
})
require.Nil(t, err)
require.Zero(t, taskStatCount)
}