Files
pig-farm-controller/internal/infra/models/plan_test.go
huang 9fc9cda08e 1. 增加重复顺序校验
2. 增加测试用例
2025-09-13 21:14:22 +08:00

104 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package models_test
import (
"fmt"
"testing"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
"github.com/stretchr/testify/assert"
)
func TestPlan_ValidateExecutionOrder(t *testing.T) {
tests := []struct {
name string
plan models.Plan
expectedError string // 期望的错误信息如果为nil则表示不期望错误
}{
{
name: "任务类型-无重复执行顺序",
plan: models.Plan{
ContentType: models.PlanContentTypeTasks,
Tasks: []models.Task{
{ExecutionOrder: 1},
{ExecutionOrder: 2},
{ExecutionOrder: 3},
},
},
expectedError: "",
},
{
name: "任务类型-重复执行顺序",
plan: models.Plan{
ContentType: models.PlanContentTypeTasks,
Tasks: []models.Task{
{ExecutionOrder: 1},
{ExecutionOrder: 2},
{ExecutionOrder: 1}, // 重复
},
},
expectedError: fmt.Sprintf("任务执行顺序重复: %d", 1),
},
{
name: "任务类型-空任务列表",
plan: models.Plan{
ContentType: models.PlanContentTypeTasks,
Tasks: []models.Task{},
},
expectedError: "",
},
{
name: "子计划类型-无重复执行顺序",
plan: models.Plan{
ContentType: models.PlanContentTypeSubPlans,
SubPlans: []models.SubPlan{
{ExecutionOrder: 1},
{ExecutionOrder: 2},
{ExecutionOrder: 3},
},
},
expectedError: "",
},
{
name: "子计划类型-重复执行顺序",
plan: models.Plan{
ContentType: models.PlanContentTypeSubPlans,
SubPlans: []models.SubPlan{
{ExecutionOrder: 1},
{ExecutionOrder: 2},
{ExecutionOrder: 1}, // 重复
},
},
expectedError: fmt.Sprintf("子计划执行顺序重复: %d", 1),
},
{
name: "子计划类型-空子计划列表",
plan: models.Plan{
ContentType: models.PlanContentTypeSubPlans,
SubPlans: []models.SubPlan{},
},
expectedError: "",
},
{
name: "未知内容类型",
plan: models.Plan{
ContentType: "UNKNOWN_TYPE", // 未知类型
Tasks: []models.Task{{ExecutionOrder: 1}},
},
expectedError: "", // 对于未知类型ValidateExecutionOrder 不会返回错误,因为它只处理已知类型
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := tt.plan.ValidateExecutionOrder()
if tt.expectedError != "" {
assert.Error(t, err)
assert.Contains(t, err.Error(), tt.expectedError)
} else {
assert.NoError(t, err)
}
})
}
}