Repository navigation
Closed
Labels
automated-analysiscode-qualitycookieIssue Monster Loves Cookies!Issue Monster Loves Cookies!enhancementNew feature or requestNew feature or requestreportsafe-outputstestingworkflows
Description
Current State
- Test file:
pkg/cli/codemod_copilot_web_fetch_test.go(316 LOC, 7 test functions, 3t.Run) - Source:
pkg/cli/codemod_copilot_web_fetch.go(getCopilotWebFetchRemovalCodemod,getCopilotWebSearchRemovalCodemod,applyCopilotWebToolRemoval,isNestedWorkflowFragment) - testify: already uses
assert(21) andrequire(25);t.Parallel()used.
Strengths
- Good require-for-preconditions / assert-for-values split.
- Idempotency check (apply twice) in
_Apply. - Covers included-engine resolution and failure-preserves-setting paths.
Prioritized improvements
1. Missing / high-value tests
isNestedWorkflowFragmenthas no direct test. Add a table test:"",.github/workflows/a.md(false),.github/workflows/shared/a.md(true),workflows/a.md(false),a/b.mdwithoutworkflows(false), Windows-style separators, paths with...getCopilotWebSearchRemovalCodemodmetadata (IDcopilot-web-search-removal,IntroducedIn) and theweb-searchbranch ofapplyCopilotWebToolRemovalare only covered incodemod_copilot_web_search_test.go; add a shared table over both codemods (toolkey param) to guarantee parity.- Error path:
Applywith malformed frontmatter /toolsof non-map type should return unchanged content without error (assert explicitly). - Non-Copilot engine (e.g.
claude) withweb-fetch: truemust be left unchanged.
2. Testify assertion upgrades
- Metadata test: use
assert.NotNil->require.NotNilbefore invoking (already done) and addassert.EqualonName/Descriptionnon-empty viaassert.NotEmpty(present) — consider also assertingIDuniqueness against the registry (assert.Lenof IDs set). - Use
assert.Equal(t, updated, updatedAgain)->assert.Equalis fine; preferassert.YAMLEqonly for frontmatter fragments, keep exact string equality for full-file output. - Add messages to key
require.True(t, applied, "codemod should apply")for easier failure diagnosis.
3. Table-driven refactors
_CompatibleInputsAreUnchanged and _YAMLFormsAndLiteralText (lines ~67-220) are candidates for []struct{name, content, frontmatter, want, wantApplied} with t.Run(tt.name, ...) and t.Parallel() per subtest.
Before:
updated, applied, err := codemod.Apply(content, fm)
require.NoError(t, err)
assert.False(t, applied)After:
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
got, applied, err := codemod.Apply(tt.content, tt.fm)
require.NoError(t, err)
assert.Equal(t, tt.wantApplied, applied)
assert.Equal(t, tt.want, got)
})
}4. Organization / readability
- Extract a small helper for building
engine/toolsfrontmatter maps to cut repeated literals. - Name tests by behavior (e.g.
_RemovesWebFetchWithCopilotEngine). - Group file-resolution tests (
ResolvesIncludedEngine,PreservesSettingWhenEngineResolutionFails) using shared temp-dir setup helper.
Generated by 🧪 Daily Testify Uber Super Expert · copilot · auto (powered by Gemini 3.8 Flash) · ~14 AIC · ⌖ ~1 AIC · ⊞ 9.2K · ◷
- expires on Nov 6, 2026, 10:05 AM UTC-08:00
Reacted by Copilot
Metadata
Metadata
Labels
automated-analysiscode-qualitycookieIssue Monster Loves Cookies!Issue Monster Loves Cookies!enhancementNew feature or requestNew feature or requestreportsafe-outputstestingworkflows
Activity
github-actions commentedon Nov 6, 2026
🍪 Issue Monster selected this for Copilot
I have identified this issue as a good candidate for automated resolution and requested assignment to the Copilot coding agent.
If assignment succeeds, Copilot will analyze the issue and create a pull request with the fix.
Om nom nom! 🍪