package main import ( "strings" "testing" ) func TestValidateScopeOverlapRejectsAllowedForbiddenConflict(t *testing.T) { err := validateScopeOverlap([]string{"cmd/creator-web/server.go"}, []string{"cmd/creator-web/**"}) if err == nil || !strings.Contains(err.Error(), "overlaps forbidden") { t.Fatalf("overlap error = %v", err) } } func TestValidateRequiredTestsRejectsIncompleteEvidence(t *testing.T) { err := validateRequiredTests([]string{"go test ./..."}) if err == nil || !strings.Contains(err.Error(), "missing required governance evidence") { t.Fatalf("required test error = %v", err) } } func TestValidateDeltaRejectsUnknownOrMissingFields(t *testing.T) { err := validateDelta(map[string]int{"new_privileges": 0}) if err == nil || !strings.Contains(err.Error(), "exactly") { t.Fatalf("delta error = %v", err) } } func TestValidateGenerationTaskRequiresGen2BaseAndArchitecture(t *testing.T) { tests := []struct { name string task TaskPacket want string }{ { name: "architecture task requires integration base", task: TaskPacket{TaskID: "ARCH-GEN2-000", BaseRepoRevision: "origin/main", ArchitectureRevision: "ADR-0019"}, want: "gen2-integration", }, { name: "implementation task requires accepted architecture root", task: TaskPacket{TaskID: "GEN2-001", BaseRepoRevision: "gen2-integration", ArchitectureRevision: "ADR-0019"}, want: "ARCH-GEN2-000", }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { err := validateGenerationTask(tc.task) if err == nil || !strings.Contains(err.Error(), tc.want) { t.Fatalf("generation validation error = %v, want %q", err, tc.want) } }) } } func TestValidateGenerationTaskAcceptsExecutionRoots(t *testing.T) { for _, task := range []TaskPacket{ {TaskID: "PRE-GEN2-000", BaseRepoRevision: "origin/main", ArchitectureRevision: "ADR-0019"}, {TaskID: "ARCH-GEN2-000", BaseRepoRevision: "gen2-integration", ArchitectureRevision: "ADR-0019"}, {TaskID: "GEN2-001", BaseRepoRevision: "gen2-integration", ArchitectureRevision: "ARCH-GEN2-000"}, } { if err := validateGenerationTask(task); err != nil { t.Fatalf("validateGenerationTask(%+v) = %v", task, err) } } }