- Add Print method to CLI Instance that uses cmd.OutOrStdout() - Update GetSecretWithVersion to use cli.Print instead of cmd.Print - Add test to verify secret values go to stdout, not stderr - Store command reference in Instance for proper output handling
67 lines
1.6 KiB
Go
67 lines
1.6 KiB
Go
// Package cli implements the command-line interface for the secret application.
|
|
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"git.eeqj.de/sneak/secret/internal/secret"
|
|
"github.com/spf13/afero"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
// Instance encapsulates all CLI functionality and state
|
|
type Instance struct {
|
|
fs afero.Fs
|
|
stateDir string
|
|
cmd *cobra.Command
|
|
}
|
|
|
|
// NewCLIInstance creates a new CLI instance with the real filesystem
|
|
func NewCLIInstance() *Instance {
|
|
fs := afero.NewOsFs()
|
|
stateDir := secret.DetermineStateDir("")
|
|
|
|
return &Instance{
|
|
fs: fs,
|
|
stateDir: stateDir,
|
|
}
|
|
}
|
|
|
|
// NewCLIInstanceWithFs creates a new CLI instance with the given filesystem (for testing)
|
|
func NewCLIInstanceWithFs(fs afero.Fs) *Instance {
|
|
stateDir := secret.DetermineStateDir("")
|
|
|
|
return &Instance{
|
|
fs: fs,
|
|
stateDir: stateDir,
|
|
}
|
|
}
|
|
|
|
// NewCLIInstanceWithStateDir creates a new CLI instance with custom state directory (for testing)
|
|
func NewCLIInstanceWithStateDir(fs afero.Fs, stateDir string) *Instance {
|
|
return &Instance{
|
|
fs: fs,
|
|
stateDir: stateDir,
|
|
}
|
|
}
|
|
|
|
// SetFilesystem sets the filesystem for this CLI instance (for testing)
|
|
func (cli *Instance) SetFilesystem(fs afero.Fs) {
|
|
cli.fs = fs
|
|
}
|
|
|
|
// SetStateDir sets the state directory for this CLI instance (for testing)
|
|
func (cli *Instance) SetStateDir(stateDir string) {
|
|
cli.stateDir = stateDir
|
|
}
|
|
|
|
// GetStateDir returns the state directory for this CLI instance
|
|
func (cli *Instance) GetStateDir() string {
|
|
return cli.stateDir
|
|
}
|
|
|
|
// Print outputs to the command's configured output writer
|
|
func (cli *Instance) Print(a ...interface{}) (n int, err error) {
|
|
return fmt.Fprint(cli.cmd.OutOrStdout(), a...)
|
|
}
|