[testify-expert] Improve Test Quality: pkg/workflow/safe_outputs_config_helpers_test.go

Fermée Adaptée aux débutants
#75,459 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@gh-aw-bot y travaille déjà.

Depuis le 8/11/2026.

  • #75821 par @copilot-swe-agent — fusionnée

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
73/100
Type d'issue
Refactorisation
Clarté
Clairement spécifiée
Activité
Active
Stack technique
github-actions, go
Domaine
testing

Piste de recherche

Lisez pkg/workflow/safe_outputs_config_helpers_test.go en parallèle de pkg/workflow/safe_outputs_config_helpers.go ; commencez par ajouter des cas directs pour buildNormalizedSortedJSON et des cas sous forme de tableau pour buildCustomSafeOutputJobsJSON. Déplacez TestUsesPatchesAndCheckouts vers safe_outputs_runtime_test.go, comme demandé. Le travail est terminé lorsque la liste de contrôle est couverte et que make test-unit réussit.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

automated-analysis code-quality cookie testing
Current State
  • Test file: pkg/workflow/safe_outputs_config_helpers_test.go (178 LOC, 3 test functions)
  • Source pair: pkg/workflow/safe_outputs_config_helpers.go (61 LOC; buildNormalizedSortedJSON, buildCustomSafeOutputJobsJSON)
  • Note: TestUsesPatchesAndCheckouts targets usesPatchesAndCheckouts in safe_outputs_runtime.go, not this file's source.
Strengths
  • Good table-driven TestUsesPatchesAndCheckouts covering nil, staged (global and per-handler), and mixed cases.
  • Uses require for preconditions and assert.JSONEq for JSON comparison.
Prioritized Improvements
1. Missing high-value tests
  • buildNormalizedSortedJSON has no direct test. Add table-driven cases: empty/nil names; name normalization (e.g. "my-job" → my_job); duplicate names that normalize to the same key (collapse to one); valueFn receiving the normalized name; deterministic output across repeated calls.
  • buildCustomSafeOutputJobsJSON: add a case for a single job, a job name with uppercase or special characters, and a nil Jobs map vs an empty map.
  • Move TestUsesPatchesAndCheckouts into safe_outputs_runtime_test.go to match its source file.
2. Testify assertion upgrades
Details
  • In TestBuildCustomSafeOutputJobsJSON, the trailing json.Unmarshal + assert.Empty(result[...]) is redundant with assert.JSONEq. Replace it with assert.Len(t, result, 2) or drop it. assert.Empty on a missing key also passes, so it proves nothing.
  • TestBuildCustomSafeOutputJobsJSONEmpty: use assert.Equal(t, "", ...) with messages, or make it table-driven.
  • Add messages to assertions that lack them.
3. Table-driven refactors
Details

Before:

assert.Empty(t, buildCustomSafeOutputJobsJSON(&WorkflowData{SafeOutputs: &SafeOutputsConfig{}}))
assert.Empty(t, buildCustomSafeOutputJobsJSON(&WorkflowData{SafeOutputs: nil}))

After:

tests := []struct{ name string; data *WorkflowData; want string }{
  {"nil safe outputs", &WorkflowData{}, ""},
  {"empty jobs", &WorkflowData{SafeOutputs: &SafeOutputsConfig{}}, ""},
  {"two jobs", &WorkflowData{SafeOutputs: &SafeOutputsConfig{Jobs: map[string]*SafeJobConfig{"z-job": {}, "a-job": {}}}}, `{"a_job":"","z_job":""}`},
}

Merge TestBuildCustomSafeOutputJobsJSON and ...Empty into one table with t.Run.

4. Organization/readability
Details
  • Split file by source (runtime vs config helpers).
  • Consider a small helper to build a staged BaseSafeOutputConfig to cut repeated templatableBoolPtr("true") literals.
Acceptance Checklist
  • Add direct tests for buildNormalizedSortedJSON
  • Merge the two buildCustomSafeOutputJobsJSON tests into one table
  • Remove redundant unmarshal assertions
  • Move TestUsesPatchesAndCheckouts next to its source
  • make test-unit passes

Generated by 🧪 Daily Testify Uber Super Expert · copilot · auto (Claude Sonnet 5.5) · ~15 AIC · ⌖ ~1 AIC · ⊞ 9.5K · ◷

  • expires on Nov 8, 2026, 10:05 AM UTC-08:00
Langage dominant
Go
Étoiles
5.6k
Forks
615
Merge moyen
5 h 29 min
PR mergées (30 j)
806

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de github/gh-aw

Toutes les issues de github/gh-aw

Issues similaires

Plus d'issues Go

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.