mirror of
https://github.com/larksuite/cli.git
synced 2026-07-05 15:47:54 +08:00
* feat(mail): bot+mailbox=me validation and dynamic --as help tests Add validateBotMailboxNotMe helper to shortcuts/mail/helpers.go and wire it as a Validate callback into +message, +messages, +thread and +triage, so bot identity combined with the default --mailbox me is rejected early with a clear fixup hint instead of a late opaque API error. The --as help text was already dynamic via AddShortcutIdentityFlag; add TC-10/TC-11 tests in internal/cmdutil/identity_flag_test.go to pin that behaviour, and TC-1 through TC-9 in shortcuts/mail/mail_shortcut_validation_test.go to cover the new Validate callbacks. +watch is excluded: its AuthTypes is ["user"], so bot is never valid. sprint: S2 * test(cmdutil): add Hidden and DefValue assertions to identity flag tests * fix(mail): add bot+mailbox=me validation to +template-create and +template-update * fix(mail): add bot+mailbox=me validation to +template-update * fix(mail): gofmt mail_template_create.go * fix(mail): gofmt mail_template_update.go * fix(mail): skip bot+mailbox=me check for print-patch-template local path
116 lines
3.3 KiB
Go
116 lines
3.3 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package cmdutil
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/larksuite/cli/internal/core"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func TestAddAPIIdentityFlag_NonStrictMode(t *testing.T) {
|
|
f, _, _, _ := TestFactory(t, &core.CliConfig{AppID: "a", AppSecret: "s"})
|
|
cmd := &cobra.Command{Use: "test"}
|
|
|
|
AddAPIIdentityFlag(context.Background(), cmd, f, nil)
|
|
|
|
flag := cmd.Flags().Lookup("as")
|
|
if flag == nil {
|
|
t.Fatal("expected --as flag to be registered")
|
|
}
|
|
if flag.Hidden {
|
|
t.Fatal("expected --as flag to be visible outside strict mode")
|
|
}
|
|
if got := flag.DefValue; got != "" {
|
|
t.Fatalf("default value = %q, want empty string", got)
|
|
}
|
|
}
|
|
|
|
func TestAddAPIIdentityFlag_StrictModeHidesFlagAndLocksDefault(t *testing.T) {
|
|
f, _, _, _ := TestFactory(t, &core.CliConfig{
|
|
AppID: "a", AppSecret: "s", SupportedIdentities: 2,
|
|
})
|
|
cmd := &cobra.Command{Use: "test"}
|
|
|
|
AddAPIIdentityFlag(context.Background(), cmd, f, nil)
|
|
|
|
flag := cmd.Flags().Lookup("as")
|
|
if flag == nil {
|
|
t.Fatal("expected --as flag to be registered")
|
|
}
|
|
if !flag.Hidden {
|
|
t.Fatal("expected --as flag to be hidden in strict mode")
|
|
}
|
|
if got := flag.DefValue; got != "bot" {
|
|
t.Fatalf("default value = %q, want %q", got, "bot")
|
|
}
|
|
}
|
|
|
|
func TestAddShortcutIdentityFlag_NoDefault(t *testing.T) {
|
|
f, _, _, _ := TestFactory(t, &core.CliConfig{AppID: "a", AppSecret: "s"})
|
|
cmd := &cobra.Command{Use: "test"}
|
|
|
|
AddShortcutIdentityFlag(context.Background(), cmd, f, []string{"bot"})
|
|
|
|
flag := cmd.Flags().Lookup("as")
|
|
if flag == nil {
|
|
t.Fatal("expected --as flag to be registered")
|
|
}
|
|
if flag.Hidden {
|
|
t.Fatal("expected --as flag to be visible outside strict mode")
|
|
}
|
|
if got := flag.DefValue; got != "" {
|
|
t.Fatalf("default value = %q, want empty string", got)
|
|
}
|
|
}
|
|
|
|
// TC-10: AuthTypes=["user"] → usage contains "identity type: user" and NOT "bot".
|
|
func TestAddShortcutIdentityFlag_UserOnlyAuthTypes(t *testing.T) {
|
|
f, _, _, _ := TestFactory(t, &core.CliConfig{AppID: "a", AppSecret: "s"})
|
|
cmd := &cobra.Command{Use: "test"}
|
|
|
|
AddShortcutIdentityFlag(context.Background(), cmd, f, []string{"user"})
|
|
|
|
flag := cmd.Flags().Lookup("as")
|
|
if flag == nil {
|
|
t.Fatal("expected --as flag to be registered")
|
|
}
|
|
if flag.Hidden {
|
|
t.Fatal("expected --as flag to be visible")
|
|
}
|
|
wantUsage := "identity type: user"
|
|
if flag.Usage != wantUsage {
|
|
t.Errorf("Usage = %q, want %q", flag.Usage, wantUsage)
|
|
}
|
|
if strings.Contains(flag.Usage, "bot") {
|
|
t.Errorf("Usage should not contain \"bot\" for user-only shortcut, got %q", flag.Usage)
|
|
}
|
|
}
|
|
|
|
// TC-11: AuthTypes=["user","bot"] → usage == "identity type: user | bot".
|
|
func TestAddShortcutIdentityFlag_UserBotAuthTypes(t *testing.T) {
|
|
f, _, _, _ := TestFactory(t, &core.CliConfig{AppID: "a", AppSecret: "s"})
|
|
cmd := &cobra.Command{Use: "test"}
|
|
|
|
AddShortcutIdentityFlag(context.Background(), cmd, f, []string{"user", "bot"})
|
|
|
|
flag := cmd.Flags().Lookup("as")
|
|
if flag == nil {
|
|
t.Fatal("expected --as flag to be registered")
|
|
}
|
|
if flag.Hidden {
|
|
t.Fatal("expected --as flag to be visible")
|
|
}
|
|
if got := flag.DefValue; got != "" {
|
|
t.Fatalf("default value = %q, want empty string", got)
|
|
}
|
|
wantUsage := "identity type: user | bot"
|
|
if flag.Usage != wantUsage {
|
|
t.Errorf("Usage = %q, want %q", flag.Usage, wantUsage)
|
|
}
|
|
}
|