package cli //nolint:testpackage // sets the unexported rootFlags directly import ( "bytes" "errors" "io" "os" "path/filepath" "strings" "testing" "sneak.berlin/go/vaultik/internal/database" "sneak.berlin/go/vaultik/internal/vaultik" ) // TestDatabaseDeleteDeclinedIsError checks that answering anything but // "yes" keeps the database and returns ErrNotConfirmed, so the command // exits non-zero. // //nolint:paralleltest // mutates the process-global rootFlags func TestDatabaseDeleteDeclinedIsError(t *testing.T) { dir := t.TempDir() dbPath, cfgPath := seedDatabaseDeleteConfig(t, dir) setRootFlags(t, RootFlags{ConfigPath: cfgPath}) var out bytes.Buffer cmd := newDatabaseDeleteCommand() cmd.SetOut(&out) cmd.SetErr(io.Discard) cmd.SetIn(strings.NewReader("no\n")) cmd.SetArgs(nil) err := cmd.Execute() if !errors.Is(err, vaultik.ErrNotConfirmed) { t.Errorf("declined database delete returned %v, want %v", err, vaultik.ErrNotConfirmed) } _, err = os.Stat(dbPath) if err != nil { t.Errorf("declined database delete removed the file: %v", err) } if !strings.Contains(out.String(), "Aborted.") { t.Errorf("declined database delete printed %q, want Aborted.", out.String()) } } // TestDatabaseDeleteRemovesSideFiles checks that the side files SQLite // keeps beside the database file are deleted with it. // //nolint:paralleltest // mutates the process-global rootFlags func TestDatabaseDeleteRemovesSideFiles(t *testing.T) { dir := t.TempDir() dbPath, cfgPath := seedDatabaseDeleteConfig(t, dir) indexFiles := database.IndexFiles(dbPath) for _, indexFile := range indexFiles { seedFile(t, dir, filepath.Base(indexFile), "data") } setRootFlags(t, RootFlags{ConfigPath: cfgPath}) mustExecute(t, newDatabaseDeleteCommand(), "--force") for _, indexFile := range indexFiles { _, err := os.Stat(indexFile) if !os.IsNotExist(err) { t.Errorf("database delete left %s: stat err = %v", indexFile, err) } } }