Files
Assistant/modules/work/domain/task_evaluation_graph_test.go
m 863a379048
CI / test (push) Successful in 57s
CI / test (pull_request) Successful in 1m2s
feat(work): link task evaluation worker execution
2026-08-23 12:56:01 +03:00

53 lines
2.7 KiB
Go

package domain
import (
"testing"
"git.cin.su/m/Assistant/contracts/capability"
"git.cin.su/m/Assistant/contracts/work"
)
func evaluationGraphRequest(stage capability.TaskEvaluationProfileStage) work.TaskEvaluationGraphRequest {
profile := capability.TaskEvaluationProfile{ID: "profile-1", Revision: 1, CapabilityID: "capability-1", Stage: stage, BenchmarkVersion: "general-v1", RequiredCaseIDs: []string{"case-a", "case-b"}, QualityWeightMillis: 600, ReliabilityWeightMillis: 300, LatencyWeightMillis: 100}
request := work.TaskEvaluationGraphRequest{GraphID: "graph-1", Profile: profile, BindingIDs: []capability.CapabilityBindingID{"binding-a", "binding-b"}, DispatchIDs: []string{"dispatch-a", "dispatch-b"}, IdempotencyPrefix: "task-eval", Budget: work.GraphBudget{MaxParallel: 2, MaxAttempts: 2}, Cases: []capability.TaskEvaluationCase{{CaseID: "case-a", Prompt: "short answer", EvidenceArtifactRef: "artifact-a"}, {CaseID: "case-b", Prompt: "long answer", EvidenceArtifactRef: "artifact-b"}}}
if stage == capability.TaskEvaluationAdditional {
request.Profile.ParentProfileID = "profile-general"
request.Profile.TriggerEvidenceRef = "artifact:unresolved-1"
request.Profile.Stage = capability.TaskEvaluationAdditional
request.ParentGraphID, request.ParentGraphRevision, request.ParentGraphState, request.TriggerEvidenceRef = "graph-general", 2, work.GraphPartial, "artifact:unresolved-1"
}
return request
}
func TestBuildTaskEvaluationGraphFansOutOneNodePerBinding(t *testing.T) {
graph, err := BuildTaskEvaluationGraph(evaluationGraphRequest(capability.TaskEvaluationGeneral))
if err != nil {
t.Fatal(err)
}
if len(graph.Nodes) != 2 || graph.Nodes[0].Purpose != work.GraphNodePurposeTaskEvaluation || graph.Nodes[0].TaskProfileID != "profile-1" || len(graph.Nodes[0].CaseIDs) != 2 {
t.Fatalf("unexpected task graph nodes: %+v", graph.Nodes)
}
if graph.ParentGraphID != "" || graph.TriggerEvidenceRef != "" {
t.Fatalf("general graph unexpectedly has expansion lineage: %+v", graph)
}
}
func TestBuildTaskEvaluationGraphRequiresCompletedOrPartialGeneralParent(t *testing.T) {
request := evaluationGraphRequest(capability.TaskEvaluationAdditional)
request.ParentGraphState = work.GraphRunning
if _, err := BuildTaskEvaluationGraph(request); err == nil {
t.Fatal("expected additional graph to require a finished parent graph")
}
}
func TestBuildTaskEvaluationGraphRejectsGeneralReplacement(t *testing.T) {
request := evaluationGraphRequest(capability.TaskEvaluationGeneral)
request.ParentGraphID = "old-graph"
request.ParentGraphRevision = 2
request.ParentGraphState = work.GraphPartial
request.TriggerEvidenceRef = "artifact:unresolved"
if _, err := BuildTaskEvaluationGraph(request); err == nil {
t.Fatal("expected general graph replacement to be rejected")
}
}