Files
kandev/apps/backend/internal/agent/runtime/lifecycle/secret_recovery_test.go
T
2026-09-09 07:50:57 +01:00

41 lines
1.5 KiB
Go

package lifecycle
import (
"context"
"errors"
"strings"
"testing"
runtimeenv "github.com/kandev/kandev/internal/agent/runtime/environment"
settingsmodels "github.com/kandev/kandev/internal/agent/settings/models"
"github.com/kandev/kandev/internal/secrets"
)
// @covers AC-WORKSPACES-REPOSITORY-SECRETS-001.10
func TestSecretRecoveryNamesAgentProfile(t *testing.T) {
mgr := newTestManager(t)
mgr.secretStore = newInMemorySecretStore()
// A same-named replacement must not repair a reference to the deleted ID.
if err := mgr.secretStore.Create(context.Background(), &secrets.SecretWithValue{
Secret: secrets.Secret{ID: "replacement-id", Name: "MY_TOKEN"}, Value: "private-value",
}); err != nil {
t.Fatal(err)
}
profile := &AgentProfileInfo{ProfileName: "Claude review", EnvVars: []settingsmodels.ProfileEnvVar{{Key: "MY_TOKEN", SecretID: "deleted-id"}}}
env, err := mgr.buildEnvForExecution(context.Background(), "exec-1", &LaunchRequest{EnvironmentResolutionRequired: true}, nil, profile)
var secretErr *runtimeenv.SecretError
if env != nil || !errors.As(err, &secretErr) {
t.Fatalf("resolution = %v, %v", env, err)
}
for _, want := range []string{"Claude review", "MY_TOKEN", "Re-select", "agent profile"} {
if !strings.Contains(err.Error(), want) {
t.Errorf("error %q lacks %q", err, want)
}
}
for _, private := range []string{"deleted-id", "replacement-id", "private-value"} {
if strings.Contains(err.Error(), private) {
t.Errorf("error leaked %q: %v", private, err)
}
}
}