email-mcp/internal/cli/wire_test.go
2026-04-14 15:54:17 +02:00

112 lines
3.2 KiB
Go

package cli
import (
"fmt"
"testing"
frameworkmanifest "gitea.lclr.dev/AI/mcp-framework/manifest"
frameworksecretstore "gitea.lclr.dev/AI/mcp-framework/secretstore"
)
func TestBuildAppReturnsConfiguredApp(t *testing.T) {
app := BuildApp("dev")
if app == nil {
t.Fatal("expected app instance")
}
if app.prompter == nil {
t.Fatal("expected config prompter to be configured")
}
if app.configStore == nil {
t.Fatal("expected config store to be configured")
}
if app.openSecretStore == nil {
t.Fatal("expected secret store opener to be configured")
}
if app.newMailService == nil {
t.Fatal("expected mail service factory to be configured")
}
if app.newRunner == nil {
t.Fatal("expected runner factory to be configured")
}
if app.loadManifest == nil {
t.Fatal("expected manifest loader to be configured")
}
}
func TestResolveSecretStorePolicyUsesManifestValue(t *testing.T) {
policy, err := resolveSecretStorePolicy(
func(string) (frameworkmanifest.File, string, error) {
return frameworkmanifest.File{
SecretStore: frameworkmanifest.SecretStore{
BackendPolicy: "env-only",
},
}, "/tmp/mcp.toml", nil
},
func() (string, error) { return "/tmp/bin/email-mcp", nil },
)
if err != nil {
t.Fatalf("resolveSecretStorePolicy returned error: %v", err)
}
if policy != frameworksecretstore.BackendEnvOnly {
t.Fatalf("policy = %q, want %q", policy, frameworksecretstore.BackendEnvOnly)
}
}
func TestResolveSecretStorePolicyReturnsErrorOnInvalidManifestValue(t *testing.T) {
_, err := resolveSecretStorePolicy(
func(string) (frameworkmanifest.File, string, error) {
return frameworkmanifest.File{
SecretStore: frameworkmanifest.SecretStore{
BackendPolicy: "invalid-policy",
},
}, "/tmp/mcp.toml", nil
},
func() (string, error) { return "/tmp/bin/email-mcp", nil },
)
if err == nil {
t.Fatal("expected invalid secret store policy error")
}
}
func TestResolveSecretStorePolicyFallsBackToAutoWhenManifestMissing(t *testing.T) {
policy, err := resolveSecretStorePolicy(
func(string) (frameworkmanifest.File, string, error) {
return frameworkmanifest.File{}, "", fmt.Errorf("manifest missing")
},
func() (string, error) { return "/tmp/bin/email-mcp", nil },
)
if err != nil {
t.Fatalf("resolveSecretStorePolicy returned error: %v", err)
}
if policy != frameworksecretstore.BackendAuto {
t.Fatalf("policy = %q, want %q", policy, frameworksecretstore.BackendAuto)
}
}
func TestBuildAppOpenSecretStoreMapsProfilePasswordToEnvironment(t *testing.T) {
t.Setenv(passwordEnv, "env-secret")
app := buildApp(nil, nil, nil, "dev", runtimeFactories{
loadManifest: func(string) (frameworkmanifest.File, string, error) {
return frameworkmanifest.File{
SecretStore: frameworkmanifest.SecretStore{
BackendPolicy: "env-only",
},
}, "/tmp/mcp.toml", nil
},
resolveExecutable: func() (string, error) { return "/tmp/bin/email-mcp", nil },
})
store, err := app.openSecretStore()
if err != nil {
t.Fatalf("openSecretStore returned error: %v", err)
}
value, err := store.GetSecret("imap-password/work")
if err != nil {
t.Fatalf("GetSecret returned error: %v", err)
}
if value != "env-secret" {
t.Fatalf("GetSecret = %q, want %q", value, "env-secret")
}
}