Skip to content

【架构优化】合并 UpdateUserCredentials 中四处重复的密钥清空/覆盖逻辑为 updatedSecret - #768

Open
fx-kurumi wants to merge 2 commits into
mainfrom
refactor/updated-secret-767
Open

fx-kurumi wants to merge 2 commits into
mainfrom
refactor/updated-secret-767

Conversation

@fx-kurumi

Copy link
Copy Markdown
Collaborator

Closes #767

改了什么

  • internal/repo/users.go:新增包内函数 updatedSecret(current, value string, clear bool) string,集中表达凭据表单的密钥更新规则(清空优先;空白输入保持原值;否则用去掉首尾空白的新值覆盖)。
  • UpdateUserCredentials 中 CodeBuddy / Codex / Claude Code 三个 API Key,以及 applyAgentCLICredentialUpdates 中各 Agent CLI 凭据的 APIKey,共 4 处重复的 if clear {…} else if trimmed != "" {…} 改为一行调用。
  • Git Token 分支带有「清掉工蜂 OAuth refresh token」的额外副作用,保持原写法不动。
  • 新增 internal/repo/users_updated_secret_test.go:表驱动覆盖清空、清空优先于新值、空/空白输入保持原值、去空白覆盖、空值时填入。

为什么

同一条规则散落 4 处,后续新增凭据或调整规则时容易漏改;合并后 UpdateUserCredentials 短了 12 行,读起来更集中在「改了哪些字段」上。

影响范围

仅 internal/repo/users.go 内部实现;对外接口、JSON 字段、存储与报错均不变(Cursor 换 key 时清空模型目录的判断仍基于 previousKey,行为一致)。

怎么验证的

  • gofmt -l internal/repo/:无输出
  • go vet ./internal/repo/:通过
  • go test ./internal/repo/:ok agentflow/internal/repo 5.259s
  • 定向:TestUpdatedSecret、TestAgentCLICredentialsRoundTrip、TestProviderUserCredentials 均 PASS

🤖 Generated with Claude Code

@fx-kurumi

Copy link
Copy Markdown
Collaborator Author

补测试(自动巡检,head d9826c1 → 1a2ebbe)

为什么补:原有的 TestUpdatedSecret 只测了 updatedSecret 这个辅助函数本身,没测 UpdateUserCredentials / applyAgentCLICredentialUpdates 里每个调用点是否接对了字段。我对 internal/repo/users.go 做了 12 种变异(例如把 Codex 的清空标志换成 ClaudeCode 的、把 CodeBuddy 的清空标志改成 false、把 current 换成 "" 丢掉“空值保留原值”的路径、把 CodeBuddy 的新值换成 Codex 的),原测试只能发现其中 6 种。

补了什么:新增 internal/repo/users_updated_secret_wiring_test.go,TestUpdateUserCredentialsSecretWiring 共 10 个子用例。先存好 CodeBuddy / Codex / Claude Code / opencode 四个密钥,再分别验证:

  • 无关更新、空白值不动任何已存密钥;
  • 只清空 / 只替换某一个字段(新值会去掉首尾空白)时,其余三个不受影响;
  • 同一字段同时给了新值和清空,清空优先(内置三列和 agent CLI 两条路径都测了);
  • 同时校验返回值和重新读库的结果。

本地验证(Go 1.26.11):

  • gofmt -l internal/repo/ 无输出,go vet ./internal/repo/ 通过
  • go test ./internal/repo/ 通过
  • 变异检查:12 种从 6/12 能发现提升到 12/12

只加了测试文件,没改实现和已有测试。CI 里之前失败的 browser 是 Playwright 的 references 页 page.waitForResponse 60s 超时,与本 PR 改动无关,platform-required 跟着它失败。

@fx-kurumi fx-kurumi left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

审查 head 1a2ebbea(含补测提交 1a2ebbe):通过(本账号创建的 PR,只能用 Comment 提交,结论等同 Approve)。

  • internal/repo/users.go:updatedSecret(current, value, clear) 的优先级(清空优先 → 空白保留原值 → 其余去空白后覆盖)与原来四处 if/else 一致;CodeBuddy / Codex / Claude Code 三个字段和 applyAgentCLICredentialUpdates 里的 cred.APIKey 都传了各自的值与清空标志,没有串字段。Cursor 判断换 key 用的 previousKey 仍在赋值前取,行为不变。
  • 补测评论核对:新增的 TestUpdateUserCredentialsSecretWiring 逐字段验证「只改一个、其余不动」和「同字段清空优先」,同时校验返回值和落库值,能钉住参数接错的情况,与评论里的变异分析对得上。
  • 本地 go test ./internal/repo/ 通过。CI core/browser 审查时仍在跑,合并前请等它们变绿。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

【架构优化】合并 UpdateUserCredentials 中四处重复的密钥清空/覆盖逻辑为 updatedSecret

1 participant