Files
tutti/services/tuttid/api/daemon_model_plans_test.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

158 lines
5.5 KiB
Go

package api
import (
"context"
"net/http"
"net/http/httptest"
"testing"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
modelplanbiz "github.com/tutti-os/tutti/services/tuttid/biz/modelplan"
modelplanservice "github.com/tutti-os/tutti/services/tuttid/service/modelplan"
)
type modelPlanServiceStub struct {
setEnabledCalls int
lastEnabled bool
references []modelplanbiz.Reference
}
func (*modelPlanServiceStub) ListPlans(context.Context, string) ([]modelplanbiz.PublicPlan, error) {
return nil, nil
}
func (*modelPlanServiceStub) GetPlan(context.Context, string, string) (modelplanbiz.PublicPlan, error) {
return modelplanbiz.PublicPlan{}, nil
}
func (*modelPlanServiceStub) CreatePlan(context.Context, modelplanservice.PutPlanInput) (modelplanbiz.PublicPlan, error) {
return modelplanbiz.PublicPlan{}, nil
}
func (*modelPlanServiceStub) UpdatePlan(context.Context, modelplanservice.PutPlanInput) (modelplanbiz.PublicPlan, error) {
return modelplanbiz.PublicPlan{}, nil
}
func (*modelPlanServiceStub) DuplicatePlan(context.Context, string, string, string) (modelplanbiz.PublicPlan, error) {
return modelplanbiz.PublicPlan{}, nil
}
func (s *modelPlanServiceStub) SetPlanEnabled(_ context.Context, _, _ string, enabled bool) (modelplanbiz.PublicPlan, error) {
s.setEnabledCalls++
s.lastEnabled = enabled
return modelplanbiz.PublicPlan{}, nil
}
func (*modelPlanServiceStub) DeletePlan(context.Context, string, string) error { return nil }
func (s *modelPlanServiceStub) PlanReferences(context.Context, string, string) ([]modelplanbiz.Reference, error) {
return s.references, nil
}
func (*modelPlanServiceStub) Detect(context.Context, modelplanservice.DetectInput) (modelplanservice.DetectResult, error) {
return modelplanservice.DetectResult{}, nil
}
func TestListModelPlanReferencesSerializesModelPolicyKind(t *testing.T) {
t.Parallel()
service := &modelPlanServiceStub{references: []modelplanbiz.Reference{
{Kind: modelplanbiz.ReferenceModelPolicy, ID: "pol-1", Name: "Careful", Role: "review"},
}}
api := DaemonAPI{ModelPlanService: service}
response, err := api.ListModelPlanReferences(context.Background(), tuttigenerated.ListModelPlanReferencesRequestObject{
WorkspaceID: "ws",
ModelPlanID: "mp-1",
})
if err != nil {
t.Fatalf("ListModelPlanReferences() error = %v", err)
}
ok200, ok := response.(tuttigenerated.ListModelPlanReferences200JSONResponse)
if !ok {
t.Fatalf("response = %T, want 200", response)
}
if len(ok200.References) != 1 {
t.Fatalf("references = %#v, want exactly one", ok200.References)
}
ref := ok200.References[0]
if ref.Kind != tuttigenerated.ModelPlanReferenceKindModelPolicy {
t.Fatalf("kind = %q, want model_policy", ref.Kind)
}
// The value must be a known member of the regenerated contract enum.
if !ref.Kind.Valid() {
t.Fatalf("kind %q is not a valid ModelPlanReferenceKind under the generated contract", ref.Kind)
}
if ref.Id != "pol-1" || ref.Name == nil || *ref.Name != "Careful" || ref.Role == nil || *ref.Role != "review" {
t.Fatalf("reference fields = %#v, want id/name/role populated", ref)
}
// The serialized 200 wire form carries kind=model_policy with role/name/id.
recorder := httptest.NewRecorder()
if err := ok200.VisitListModelPlanReferencesResponse(recorder); err != nil {
t.Fatalf("visit error = %v", err)
}
if recorder.Code != http.StatusOK {
t.Fatalf("http status = %d, want 200", recorder.Code)
}
var decoded tuttigenerated.ModelPlanReferencesResponse
decodeGeneratedRouteResponse(t, recorder, &decoded)
if len(decoded.References) != 1 {
t.Fatalf("decoded references = %#v, want one", decoded.References)
}
got := decoded.References[0]
if got.Kind != tuttigenerated.ModelPlanReferenceKindModelPolicy {
t.Fatalf("decoded kind = %q, want model_policy", got.Kind)
}
if got.Id != "pol-1" || got.Name == nil || *got.Name != "Careful" || got.Role == nil || *got.Role != "review" {
t.Fatalf("decoded reference = %#v, want id/name/role preserved", got)
}
}
func TestSetModelPlanEnabledRejectsMissingEnabled(t *testing.T) {
t.Parallel()
service := &modelPlanServiceStub{}
api := DaemonAPI{
ModelPlanService: service,
}
response, err := api.SetModelPlanEnabled(context.Background(), tuttigenerated.SetModelPlanEnabledRequestObject{
WorkspaceID: "ws",
ModelPlanID: "mp-1",
Body: &tuttigenerated.SetModelPlanEnabledRequest{},
})
if err != nil {
t.Fatalf("SetModelPlanEnabled() error = %v", err)
}
if _, ok := response.(tuttigenerated.SetModelPlanEnabled400JSONResponse); !ok {
t.Fatalf("SetModelPlanEnabled() response = %T, want 400", response)
}
if service.setEnabledCalls != 0 {
t.Fatalf("SetPlanEnabled() calls = %d, want 0", service.setEnabledCalls)
}
}
func TestSetModelPlanEnabledAcceptsExplicitFalse(t *testing.T) {
t.Parallel()
service := &modelPlanServiceStub{}
api := DaemonAPI{
ModelPlanService: service,
}
enabled := false
response, err := api.SetModelPlanEnabled(context.Background(), tuttigenerated.SetModelPlanEnabledRequestObject{
WorkspaceID: "ws",
ModelPlanID: "mp-1",
Body: &tuttigenerated.SetModelPlanEnabledRequest{Enabled: &enabled},
})
if err != nil {
t.Fatalf("SetModelPlanEnabled() error = %v", err)
}
if _, ok := response.(tuttigenerated.SetModelPlanEnabled200JSONResponse); !ok {
t.Fatalf("SetModelPlanEnabled() response = %T, want 200", response)
}
if service.setEnabledCalls != 1 || service.lastEnabled {
t.Fatalf("SetPlanEnabled() calls/enabled = %d/%v, want 1/false", service.setEnabledCalls, service.lastEnabled)
}
}