71 lines
2.5 KiB
Go
71 lines
2.5 KiB
Go
package app
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/DingTalk-Real-AI/dingtalk-workspace-cli/internal/keychain"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func TestAuthMigrateKeychainRemainingBranches(t *testing.T) {
|
|
originalMigrate, originalTarget := migrateKeychainToFileDEK, authMigrateTarget
|
|
t.Cleanup(func() {
|
|
migrateKeychainToFileDEK, authMigrateTarget = originalMigrate, originalTarget
|
|
})
|
|
newRoot := func(format string) (*cobra.Command, *bytes.Buffer) {
|
|
root := &cobra.Command{Use: "dws"}
|
|
root.PersistentFlags().Bool("dry-run", false, "")
|
|
root.PersistentFlags().Bool("yes", false, "")
|
|
root.PersistentFlags().String("format", format, "")
|
|
root.AddCommand(newAuthMigrateKeychainCommand())
|
|
var output bytes.Buffer
|
|
root.SetOut(&output)
|
|
root.SetErr(&output)
|
|
return root, &output
|
|
}
|
|
t.Setenv(keychain.DisableKeychainEnv, "")
|
|
|
|
authMigrateTarget = func(*cobra.Command) (string, error) { return "", errors.New("flag") }
|
|
root, _ := newRoot("text")
|
|
root.SetArgs([]string{"migrate-keychain", "--dry-run"})
|
|
if err := root.Execute(); err == nil || !strings.Contains(err.Error(), "--to") {
|
|
t.Fatalf("target flag error = %v", err)
|
|
}
|
|
authMigrateTarget = originalTarget
|
|
root, _ = newRoot("text")
|
|
root.SetArgs([]string{"migrate-keychain", "--to", "other", "--dry-run"})
|
|
if err := root.Execute(); err == nil || !strings.Contains(err.Error(), "file-dek") {
|
|
t.Fatalf("unsupported target error = %v", err)
|
|
}
|
|
|
|
migrateKeychainToFileDEK = func(string, bool) (int, error) { return 0, errors.New("backend") }
|
|
root, _ = newRoot("text")
|
|
root.SetArgs([]string{"migrate-keychain", "--dry-run"})
|
|
if err := root.Execute(); err == nil || !strings.Contains(err.Error(), "backend") {
|
|
t.Fatalf("migration backend error = %v", err)
|
|
}
|
|
migrateKeychainToFileDEK = func(string, bool) (int, error) { return 3, nil }
|
|
for _, test := range []struct {
|
|
args []string
|
|
want string
|
|
}{
|
|
{[]string{"migrate-keychain", "--dry-run"}, "预检通过"},
|
|
{[]string{"migrate-keychain", "--yes"}, "迁移完成"},
|
|
} {
|
|
root, output := newRoot("text")
|
|
root.SetArgs(test.args)
|
|
if err := root.Execute(); err != nil || !strings.Contains(output.String(), test.want) {
|
|
t.Fatalf("migrate %v = %v, %q", test.args, err, output.String())
|
|
}
|
|
}
|
|
}
|
|
|
|
// Keep the original test name for the focused macOS auth workflow while also
|
|
// opting the coverage fixture into the native platform coverage gate.
|
|
func TestCrossPlatformCoverageAuthMigrateKeychainRemainingBranches(t *testing.T) {
|
|
TestAuthMigrateKeychainRemainingBranches(t)
|
|
}
|