Files
weichen 77b8d07cd7 fix(governance): 统一文档访问判定与上下文快照排除计数
补齐 DocumentAccessDecider HTTP 409、projectcontext 私有对话排除统计,并更新整改 gap matrix 与测试报告。
2026-09-13 02:50:23 +00:00

49 lines
1.6 KiB
Go

package projectinstance
import (
"context"
"testing"
)
func TestTerminateInstance_UpdatesProjectLifecycle(t *testing.T) {
ctx := context.Background()
store := NewMemoryStore()
_ = SeedProjectMeta(store, 300, LifecyclePlanning, "", 1, 0)
svc := NewService(store, TestResolver(), nil, &StubDocChecker{States: map[string]string{"intake": "approved"}})
_, _ = svc.SaveWorkflowPlan(ctx, 300, 1, true, SavePlanInput{
Plan: ValidTestPlan(), ExpectedPlanRevision: 0, ExpectedSelectionVersion: 1,
})
preview, _ := svc.ActivationPreview(ctx, 300, 1, true)
activated, _ := svc.Activate(ctx, 300, 1, true, ActivateInput{
ConfirmationToken: preview.ConfirmationToken, ExpectedProjectVersion: preview.ExpectedProjectVersion,
ExpectedPlanRevision: preview.ExpectedPlanRevision,
})
pv, err := svc.GetTerminationPreview(ctx, activated.Instance.ID, 300, 1, true)
if err != nil {
t.Fatalf("GetTerminationPreview: %v", err)
}
if !pv.CanTerminate {
t.Fatal("expected can terminate")
}
res, err := svc.TerminateInstance(ctx, activated.Instance.ID, 300, 1, true, TerminateInput{
Reason: "测试终止", Confirm: true, ExpectedConfigRevision: activated.Instance.ConfigRevision,
})
if err != nil {
t.Fatalf("TerminateInstance: %v", err)
}
if res.Instance.Status != "terminated" {
t.Fatalf("expected terminated, got %q", res.Instance.Status)
}
lifecycle, activeKey, _, _, err := store.GetProjectMeta(ctx, 300)
if err != nil {
t.Fatalf("GetProjectMeta: %v", err)
}
if lifecycle != LifecyclePlanning || activeKey != "" {
t.Fatalf("expected planning with empty key, got lifecycle=%q key=%q", lifecycle, activeKey)
}
}