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

Abierto Apto para principiantes
#75,459 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
73/100
Tipo de issue
Refactorización
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
github-actions, go
Área
testing

Línea de trabajo

Lee pkg/workflow/safe_outputs_config_helpers_test.go junto con pkg/workflow/safe_outputs_config_helpers.go; empieza añadiendo casos directos para buildNormalizedSortedJSON y casos en tabla para buildCustomSafeOutputJobsJSON. Mueve TestUsesPatchesAndCheckouts a safe_outputs_runtime_test.go, tal como se solicita. La tarea estará terminada cuando se cubra la lista de verificación y make test-unit pase.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
Go
Estrellas
5.6k
Forks
615
Merge medio
5 h 51 min
PR fusionados (30 d)
793

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de github/gh-aw

Todos los issues de github/gh-aw

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.