Files
dingtalk-workspace-cli/internal/app/auth_migrate_coverage_test.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)
}