feat: add a --save option to avoid the interactive prompt on mire record for save
This commit is contained in:
@@ -5,9 +5,13 @@ import (
|
||||
"os"
|
||||
)
|
||||
|
||||
type RecordOptions struct {
|
||||
Save bool
|
||||
}
|
||||
|
||||
// Record creates the requested scenario path under the resolved test directory
|
||||
// and records an interactive shell session into in/out fixtures when saved.
|
||||
func Record(path string) (string, error) {
|
||||
func Record(path string, opts RecordOptions) (string, error) {
|
||||
root, err := currentProjectRoot()
|
||||
if err != nil {
|
||||
return "", err
|
||||
@@ -46,7 +50,7 @@ func Record(path string) (string, error) {
|
||||
in: os.Stdin,
|
||||
out: os.Stdout,
|
||||
err: os.Stderr,
|
||||
}, cfg.Sandbox, cfg.Mounts, cfg.Paths, setupScripts); err != nil {
|
||||
}, cfg.Sandbox, cfg.Mounts, cfg.Paths, setupScripts, opts.Save); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ type recordIO struct {
|
||||
err io.Writer
|
||||
}
|
||||
|
||||
func recordScenario(target, shellPath string, rio recordIO, sandboxConfig map[string]string, mounts, paths, setupScripts []string) error {
|
||||
func recordScenario(target, shellPath string, rio recordIO, sandboxConfig map[string]string, mounts, paths, setupScripts []string, save bool) error {
|
||||
rawIn, rawOut, cleanup, err := newRecordFiles()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -45,12 +45,14 @@ func recordScenario(target, shellPath string, rio recordIO, sandboxConfig map[st
|
||||
// as an error
|
||||
runRecordSession(target, rawIn, rawOut, shellPath, sandbox, rio, sandboxConfig, mounts, paths, setupScripts)
|
||||
|
||||
save, err := confirmRecordSave(rio)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !save {
|
||||
return ErrRecordingDiscarded
|
||||
save, err = confirmRecordSave(rio)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !save {
|
||||
return ErrRecordingDiscarded
|
||||
}
|
||||
}
|
||||
|
||||
recordedIn, recordedOut, err := loadRecordedFixtures(rawIn, rawOut)
|
||||
|
||||
@@ -22,7 +22,7 @@ func TestRecordCreatesRelativePath(t *testing.T) {
|
||||
var got string
|
||||
testutil.WithWorkingDir(t, root, func() struct{} {
|
||||
testutil.CapturePromptedOutput(t, "exit\n", "Save recording?", "y\n", func() {
|
||||
path, err := Record(filepath.Join("a", "b", "c") + string(os.PathSeparator))
|
||||
path, err := Record(filepath.Join("a", "b", "c")+string(os.PathSeparator), RecordOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("Record() error = %v", err)
|
||||
}
|
||||
@@ -61,7 +61,7 @@ func TestRecordReturnsDiscardedErrorWhenSaveDeclined(t *testing.T) {
|
||||
target := filepath.Join(testDir, "a", "b", "c")
|
||||
testutil.MustMkdirAll(t, target)
|
||||
return withRecordStreams(t, "exit\nn\n", func(rio recordIO) error {
|
||||
return recordScenario(target, recordShellPath(testDir), rio, defaultSandboxConfig(), nil, nil, nil)
|
||||
return recordScenario(target, recordShellPath(testDir), rio, defaultSandboxConfig(), nil, nil, nil, false)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -88,7 +88,7 @@ func TestRecordReturnsDiscardedErrorWhenOverwriteDeclined(t *testing.T) {
|
||||
|
||||
err := testutil.WithWorkingDir(t, root, func() error {
|
||||
return withRecordStreams(t, "n\n", func(rio recordIO) error {
|
||||
return recordScenario(target, recordShellPath(testDir), rio, defaultSandboxConfig(), nil, nil, nil)
|
||||
return recordScenario(target, recordShellPath(testDir), rio, defaultSandboxConfig(), nil, nil, nil, false)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -281,7 +281,7 @@ func TestRecordScenarioUsesDeterministicSandbox(t *testing.T) {
|
||||
"y\n",
|
||||
func(rio recordIO) error {
|
||||
rio.out = ioDiscard{}
|
||||
return recordScenario(target, recordShellPath(testDir), rio, sandboxConfig, nil, nil, nil)
|
||||
return recordScenario(target, recordShellPath(testDir), rio, sandboxConfig, nil, nil, nil, false)
|
||||
},
|
||||
)
|
||||
})
|
||||
@@ -377,7 +377,7 @@ func TestRecordScenarioStripsInterruptsFromSavedFixtures(t *testing.T) {
|
||||
in: reader,
|
||||
out: ioDiscard{},
|
||||
err: errWriter,
|
||||
}, defaultSandboxConfig(), nil, nil, nil)
|
||||
}, defaultSandboxConfig(), nil, nil, nil, false)
|
||||
if writeErr := <-writeDone; writeErr != nil {
|
||||
t.Fatalf("write record input: %v", writeErr)
|
||||
}
|
||||
@@ -412,7 +412,7 @@ func TestRecordFailsWhenRecorderShellMissing(t *testing.T) {
|
||||
|
||||
target := filepath.Join(testDir, "suite", "spec")
|
||||
err := testutil.WithWorkingDir(t, root, func() error {
|
||||
_, err := Record(filepath.Join("suite", "spec"))
|
||||
_, err := Record(filepath.Join("suite", "spec"), RecordOptions{})
|
||||
return err
|
||||
})
|
||||
if err == nil {
|
||||
|
||||
Reference in New Issue
Block a user