From d0e6aba3198611d4f29ca62d6effda1d512dbfb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=95=BF=E7=9C=9F?= Date: Fri, 14 Aug 2026 00:23:18 +0800 Subject: [PATCH] fix(cli): cover alias exclude guard branches --- internal/cli/param_aliases_test.go | 8 +++++++- internal/helpers/chat.go | 11 ++++------- internal/helpers/chat_message_help_test.go | 6 +++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/internal/cli/param_aliases_test.go b/internal/cli/param_aliases_test.go index 40fccad9..950d6ee5 100644 --- a/internal/cli/param_aliases_test.go +++ b/internal/cli/param_aliases_test.go @@ -242,7 +242,7 @@ func TestCrossPlatformCoverageReduceLeafParamAliasesBindExcludesRealFlags(t *tes "demo cmd", realMap(realFlag{name: "id"}, realFlag{name: "name"}, realFlag{name: "query"}), []Concept{ - {ID: "base_id", Members: []string{"base-id", "base-token"}, Excludes: []string{"name", "unsafe"}}, + {ID: "base_id", Members: []string{"base-id", "base-token"}, Excludes: []string{"keyword", "name", "query", "unsafe"}}, {ID: "query", Members: []string{"query", "keyword"}}, }, CommandOverride{Bind: map[string]string{"id": "base_id"}}, @@ -259,9 +259,15 @@ func TestCrossPlatformCoverageReduceLeafParamAliasesBindExcludesRealFlags(t *tes if entry.Aliases["keyword"] != "query" { t.Fatalf("query alias = %#v, want keyword -> query", entry.Aliases) } + if containsParamAlias(entry.Blocked, "keyword") { + t.Fatalf("excluded alias entered blocked list: %#v", entry.Blocked) + } if containsParamAlias(entry.Blocked, "name") { t.Fatalf("real excluded flag entered blocked list: %#v", entry.Blocked) } + if containsParamAlias(entry.Blocked, "query") { + t.Fatalf("claimed real excluded flag entered blocked list: %#v", entry.Blocked) + } if !containsParamAlias(entry.Blocked, "unsafe") { t.Fatalf("non-real excluded flag was not blocked: %#v", entry.Blocked) } diff --git a/internal/helpers/chat.go b/internal/helpers/chat.go index 6c0623fc..262964cc 100644 --- a/internal/helpers/chat.go +++ b/internal/helpers/chat.go @@ -2934,19 +2934,16 @@ func newChatCommand() *cobra.Command { chatMessageListCmd := &cobra.Command{ Use: "list", Short: "拉取会话消息内容", - Long: `拉取指定群聊或单聊的会话消息内容。输出顶层 messages,稳定字段为 messageId 和 text;兼容保留 openMessageId 和 content。--conversation-id 指定群聊,--user 指定单聊用户(userId),--open-dingtalk-id 指定单聊用户(openDingTalkId),三者互斥。推荐使用 --direction newer/older 控制时间方向:newer 表示从给定时间往现在拉,older 表示从给定时间往以前拉。hasMore=true 时用结果中的边界 createTime 作为下次 --time 翻页。引用回复消息会返回 quotedMessage 引用上下文;被引用的原消息是合并转发或图片时,对应的类型与内容也会随引用上下文返回。如果返回的会话消息中包含 openConvThreadId 字段,说明是话题消息,可以调用 dws chat message list-topic-replies 拉取话题回复消息列表,openConvThreadId 作为 topic-id 参数。`, + Long: `拉取指定群聊或单聊的会话消息内容。输出顶层 messages,稳定字段为 messageId 和 text;兼容保留 openMessageId 和 content。--conversation-id 指定群聊,--user 指定单聊用户(userId),--open-dingtalk-id 指定单聊用户(openDingTalkId),三者互斥。--time 可选,不传时默认上海时间当前时间并向旧消息拉取。推荐使用 --direction newer/older 控制时间方向:newer 表示从给定时间往现在拉,older 表示从给定时间往以前拉。hasMore=true 时用结果中的边界 createTime 作为下次 --time 翻页。引用回复消息会返回 quotedMessage 引用上下文;被引用的原消息是合并转发或图片时,对应的类型与内容也会随引用上下文返回。如果返回的会话消息中包含 openConvThreadId 字段,说明是话题消息,可以调用 dws chat message list-topic-replies 拉取话题回复消息列表,openConvThreadId 作为 topic-id 参数。`, Example: ` dws chat message list --conversation-id --time "2025-03-01 00:00:00" dws chat message list --conversation-id dws chat message list --user --time "2025-03-01 00:00:00" --limit 50 dws chat message list --open-dingtalk-id --time "2025-03-01 00:00:00" --limit 50 dws chat message list --conversation-id --time "2025-03-01 00:00:00" --direction older dws chat message list --conversation-id --time "2025-03-01 00:00:00" --jq '.messages[] | {messageId, text}' - # 查询群 ID: dws chat search --query "群名" - # 查询 userId: dws contact user search --query "姓名"`, + # 查询群 ID: dws chat search --query "群名" + # 查询 userId: dws contact user search --query "姓名"`, RunE: func(cmd *cobra.Command, args []string) error { - if err := validateRequiredFlags(cmd, "time"); err != nil { - return err - } groupID := flagOrFallback(cmd, "conversation-id", "group", "id", "chat") userID, _ := cmd.Flags().GetString("user") openDingTalkID, _ := cmd.Flags().GetString("open-dingtalk-id") @@ -4670,7 +4667,7 @@ chat message edit 或 chat message recall 的 --message-id 和 --conversation-id chatMessageListCmd.Flags().String("conversation-id", "", "群聊 openconversation_id(群聊时必填)") chatMessageListCmd.Flags().String("user", "", "单聊用户 userId(单聊时与 --open-dingtalk-id 二选一)") chatMessageListCmd.Flags().String("open-dingtalk-id", "", "单聊用户 openDingTalkId(单聊时与 --user 二选一,适用于无法获取 userId 的场景)") - chatMessageListCmd.Flags().String("time", "", "开始时间,格式: yyyy-MM-dd HH:mm:ss(可选,默认当前时间)") + chatMessageListCmd.Flags().String("time", "", "开始时间,格式: yyyy-MM-dd HH:mm:ss(可选,默认上海时间当前时间)") chatMessageListCmd.Flags().String("direction", "", "时间方向: newer=从给定时间往现在拉,older=从给定时间往以前拉(未传 --time 时默认 older)") chatMessageListCmd.Flags().String("forward", "true", "true 等价 --direction newer,false 等价 --direction older(未传 --time 时默认 false)") _ = chatMessageListCmd.Flags().MarkHidden("forward") diff --git a/internal/helpers/chat_message_help_test.go b/internal/helpers/chat_message_help_test.go index 9cf8e10f..30f299df 100644 --- a/internal/helpers/chat_message_help_test.go +++ b/internal/helpers/chat_message_help_test.go @@ -245,7 +245,7 @@ func TestCrossPlatformCoverageChatMessageHelpDocumentsOptionalTimeDefaults(t *te var output bytes.Buffer cmd.SetOut(&output) cmd.SetErr(&output) - cmd.SetArgs(test.args) + cmd.SetArgs(test.args) if err := cmd.Execute(); err != nil { t.Fatalf("dws chat %s: %v\n%s", strings.Join(test.args, " "), err, output.String()) } @@ -267,6 +267,10 @@ func TestCrossPlatformCoverageChatMessageHelpDocumentsOptionalTimeDefaults(t *te func TestCrossPlatformCoverageChatReactionHelpKeepsManifestExternalAliasesVisible(t *testing.T) { for _, command := range []string{"add-emoji", "remove-emoji", "add-text-emotion", "remove-text-emotion"} { t.Run(command, func(t *testing.T) { + cmd := newChatCommand() + var output bytes.Buffer + cmd.SetOut(&output) + cmd.SetErr(&output) cmd.SetArgs([]string{"message", command, "--help"}) if err := cmd.Execute(); err != nil { t.Fatalf("chat message %s --help: %v\n%s", command, err, output.String())