This commit is contained in:
Eric 1549169735@qq.com
2026-09-13 20:08:13 +08:00
parent 7cc06976ab
commit da3f16e6db
65 changed files with 3855 additions and 2153 deletions

View File

@@ -13,46 +13,26 @@ func TestPetDoctorSOPPassesPublishValidation(t *testing.T) {
fields := petFieldModels()
nodes := petNodeModels(petNodes())
edges := petEdgeModels(petEdges())
if len(fields) != 13 || len(nodes) != 5 || len(edges) != 4 {
if len(fields) != 11 || len(nodes) != 6 || len(edges) != 5 {
t.Fatalf("unexpected definition size: fields=%d nodes=%d edges=%d", len(fields), len(nodes), len(edges))
}
problems := sop.ValidateForPublish("start", nodes, edges, sop.ValidationContext{
Fields: fields,
KnowledgeItems: []model.KnowledgeItem{
{Base: model.Base{ID: 1}, ItemKey: "consultation_boundary", Type: "guidance", Status: "active"},
{Base: model.Base{ID: 2}, ItemKey: "emergency_guidance", Type: "guidance", Status: "active"},
{Base: model.Base{ID: 3}, ItemKey: "medication_safety", Type: "guidance", Status: "active"},
{Base: model.Base{ID: 4}, ItemKey: "safety_net", Type: "guidance", Status: "active"},
{Base: model.Base{ID: 5}, ItemKey: "soft_stool", Type: "symptom", Status: "active"},
{Base: model.Base{ID: 6}, ItemKey: "poor_appetite", Type: "symptom", Status: "active"},
{Base: model.Base{ID: 7}, ItemKey: "ask_stool", Type: "copy", Status: "active"},
{Base: model.Base{ID: 8}, ItemKey: "gi_discomfort", Type: "disease", Status: "active"},
{Base: model.Base{ID: 9}, ItemKey: "gut_plan", Type: "plan", Status: "active"},
{Base: model.Base{ID: 10}, ItemKey: "gut_product", Type: "product", Status: "active"},
},
KnowledgeRelations: []model.KnowledgeRelation{
{FromKnowledgeID: 5, ToKnowledgeID: 7, RelationType: "recommended_copy"},
{FromKnowledgeID: 5, ToKnowledgeID: 8, RelationType: "possible_disease"},
{FromKnowledgeID: 5, ToKnowledgeID: 9, RelationType: "recommended_plan"},
{FromKnowledgeID: 8, ToKnowledgeID: 7, RelationType: "recommended_copy"},
{FromKnowledgeID: 8, ToKnowledgeID: 9, RelationType: "recommended_plan"},
{FromKnowledgeID: 8, ToKnowledgeID: 10, RelationType: "recommended_product"},
},
Fields: fields,
StageKeys: []string{"opening", "symptom", "diagnosis", "recommend"},
})
if len(problems) > 0 {
t.Fatalf("pet doctor SOP should be publishable, got: %v", problems)
}
}
func TestPetDoctorSOPIsFiveStepLinearFlow(t *testing.T) {
wantNodes := []string{"start", "pet_info", "symptom", "recommend_product", "finish"}
func TestPetDoctorSOPIsSixStepLinearFlow(t *testing.T) {
wantNodes := []string{"start", "opening", "symptom", "diagnosis", "recommend", "finish"}
for index, node := range petNodes() {
if node.Key != wantNodes[index] {
t.Fatalf("node %d = %s, want %s", index, node.Key, wantNodes[index])
}
}
wantEdges := [][2]string{{"start", "pet_info"}, {"pet_info", "symptom"}, {"symptom", "recommend_product"}, {"recommend_product", "finish"}}
wantEdges := [][2]string{{"start", "opening"}, {"opening", "symptom"}, {"symptom", "diagnosis"}, {"diagnosis", "recommend"}, {"recommend", "finish"}}
for index, edge := range petEdges() {
if edge.Source != wantEdges[index][0] || edge.Target != wantEdges[index][1] {
t.Fatalf("edge %d = %s -> %s", index, edge.Source, edge.Target)
@@ -60,15 +40,6 @@ func TestPetDoctorSOPIsFiveStepLinearFlow(t *testing.T) {
}
}
func TestPetKnowledgeKeyIsStableAndTypeScoped(t *testing.T) {
if petKnowledgeKey("symptom", "腹泻") != petKnowledgeKey("symptom", " 腹泻 ") {
t.Fatal("key should ignore surrounding whitespace")
}
if petKnowledgeKey("symptom", "腹泻") == petKnowledgeKey("disease", "腹泻") {
t.Fatal("key should include knowledge type")
}
}
func petFieldModels() []model.ScenarioField {
definitions := petFieldDefinitions()
fields := make([]model.ScenarioField, 0, len(definitions))