Skip to content

[testify-expert] Improve Test Quality: pkg/cli/codemod_copilot_web_fetch_test.go #74912

Closed

Description

@github-actions

Current State

  • Test file: pkg/cli/codemod_copilot_web_fetch_test.go (316 LOC, 7 test functions, 3 t.Run)
  • Source: pkg/cli/codemod_copilot_web_fetch.go (getCopilotWebFetchRemovalCodemod, getCopilotWebSearchRemovalCodemod, applyCopilotWebToolRemoval, isNestedWorkflowFragment)
  • testify: already uses assert (21) and require (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

  • isNestedWorkflowFragment has no direct test. Add a table test: "", .github/workflows/a.md (false), .github/workflows/shared/a.md (true), workflows/a.md (false), a/b.md without workflows (false), Windows-style separators, paths with ...
  • getCopilotWebSearchRemovalCodemod metadata (ID copilot-web-search-removal, IntroducedIn) and the web-search branch of applyCopilotWebToolRemoval are only covered in codemod_copilot_web_search_test.go; add a shared table over both codemods (tool key param) to guarantee parity.
  • Error path: Apply with malformed frontmatter / tools of non-map type should return unchanged content without error (assert explicitly).
  • Non-Copilot engine (e.g. claude) with web-fetch: true must be left unchanged.

2. Testify assertion upgrades

  • Metadata test: use assert.NotNil -> require.NotNil before invoking (already done) and add assert.Equal on Name/Description non-empty via assert.NotEmpty (present) — consider also asserting ID uniqueness against the registry (assert.Len of IDs set).
  • Use assert.Equal(t, updated, updatedAgain) -> assert.Equal is fine; prefer assert.YAMLEq only 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/tools frontmatter 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

Activity

  1. github-actions commented on Nov 6, 2026

    @github-actions
    ContributorAuthor

    🍪 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! 🍪

    🍪 Om nom nom by Issue Monster · pi · gpt50 · ~1 AIC · ⌖ ~1 AIC · ⊞ 13.2K · ◷

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions