1. 增加重复顺序校验

2. 增加测试用例
This commit is contained in:
2025-09-13 21:14:22 +08:00
parent 287c27a5ab
commit 9fc9cda08e
4 changed files with 414 additions and 28 deletions

View File

@@ -0,0 +1,103 @@
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)
}
})
}
}