86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package testutils
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
var updateGolden = flag.Bool("update", false, "update golden files")
|
|
|
|
// GetGoldenFilePath retourne le chemin vers un fichier golden (T0046)
|
|
func GetGoldenFilePath(t *testing.T, filename string) string {
|
|
return filepath.Join("testdata", t.Name()+"_"+filename)
|
|
}
|
|
|
|
// UpdateGoldenFile met à jour un fichier golden (T0046)
|
|
func UpdateGoldenFile(t *testing.T, filename string, content []byte) {
|
|
if !*updateGolden {
|
|
t.Skip("Skipping golden file update (use -update flag)")
|
|
return
|
|
}
|
|
|
|
path := GetGoldenFilePath(t, filename)
|
|
err := os.MkdirAll(filepath.Dir(path), 0755)
|
|
require.NoError(t, err)
|
|
|
|
err = os.WriteFile(path, content, 0644)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// CompareGoldenFile compare le contenu avec un fichier golden (T0046)
|
|
func CompareGoldenFile(t *testing.T, filename string, actual []byte) {
|
|
path := GetGoldenFilePath(t, filename)
|
|
|
|
// Si update flag, mettre à jour
|
|
if *updateGolden {
|
|
UpdateGoldenFile(t, filename, actual)
|
|
return
|
|
}
|
|
|
|
// Lire le fichier golden
|
|
expected, err := os.ReadFile(path)
|
|
require.NoError(t, err, "Golden file not found. Run tests with -update flag to create it.")
|
|
|
|
require.Equal(t, string(expected), string(actual), "Golden file mismatch")
|
|
}
|
|
|
|
// CompareGoldenFileWithError compare le contenu avec un fichier golden et retourne une erreur au lieu de faire échouer le test (T0046)
|
|
// Utilisé pour tester que CompareGoldenFile échoue correctement
|
|
func CompareGoldenFileWithError(t *testing.T, filename string, actual []byte) error {
|
|
path := GetGoldenFilePath(t, filename)
|
|
|
|
// Si update flag, mettre à jour
|
|
if *updateGolden {
|
|
UpdateGoldenFile(t, filename, actual)
|
|
return nil
|
|
}
|
|
|
|
// Lire le fichier golden
|
|
expected, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return fmt.Errorf("golden file not found. Run tests with -update flag to create it.: %w", err)
|
|
}
|
|
|
|
if string(expected) != string(actual) {
|
|
return fmt.Errorf("golden file mismatch: expected %q, got %q", string(expected), string(actual))
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Example usage:
|
|
/*
|
|
func TestJSONOutput(t *testing.T) {
|
|
data := map[string]interface{}{
|
|
"key": "value",
|
|
}
|
|
jsonBytes, _ := json.MarshalIndent(data, "", " ")
|
|
|
|
CompareGoldenFile(t, "output.json", jsonBytes)
|
|
}
|
|
*/
|