veza/veza-backend-api/internal/config/docs_test.go
2025-12-03 20:29:37 +01:00

128 lines
4 KiB
Go

package config
import (
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestGenerateConfigDocs(t *testing.T) {
docs := GenerateConfigDocs()
// Vérifier le header
assert.Contains(t, docs, "# Configuration Variables")
assert.Contains(t, docs, "Veza backend API")
// Vérifier que les variables documentées sont présentes
assert.Contains(t, docs, "APP_ENV")
assert.Contains(t, docs, "APP_PORT")
assert.Contains(t, docs, "JWT_SECRET")
assert.Contains(t, docs, "DATABASE_URL")
assert.Contains(t, docs, "REDIS_URL")
assert.Contains(t, docs, "LOG_LEVEL")
// Vérifier la structure de base
assert.Contains(t, docs, "**Type**:")
assert.Contains(t, docs, "**Required**:")
assert.Contains(t, docs, "**Description**:")
}
func TestGenerateConfigDocs_Structure(t *testing.T) {
docs := GenerateConfigDocs()
// Vérifier qu'il y a des sections pour chaque variable
lines := strings.Split(docs, "\n")
// Devrait contenir des sections ## pour chaque variable
sectionCount := 0
for _, line := range lines {
if strings.HasPrefix(line, "## ") && line != "## Overview" {
sectionCount++
}
}
// Au moins quelques variables devraient être documentées
assert.Greater(t, sectionCount, 5, "Should have multiple variable sections")
}
func TestGenerateConfigDocs_ContainsRequiredFields(t *testing.T) {
docs := GenerateConfigDocs()
// Vérifier qu'une variable requise est documentée comme telle
assert.Contains(t, docs, "JWT_SECRET")
jwtSection := strings.Split(docs, "## JWT_SECRET")[1]
jwtSection = strings.Split(jwtSection, "---")[0]
assert.Contains(t, jwtSection, "✅ Yes", "JWT_SECRET should be marked as required")
// Vérifier qu'une variable optionnelle est documentée
assert.Contains(t, docs, "APP_ENV")
appEnvSection := strings.Split(docs, "## APP_ENV")[1]
appEnvSection = strings.Split(appEnvSection, "---")[0]
assert.Contains(t, appEnvSection, "❌ No", "APP_ENV should be marked as not required")
}
func TestGenerateConfigDocs_ContainsExamples(t *testing.T) {
docs := GenerateConfigDocs()
// Vérifier qu'il y a des exemples
assert.Contains(t, docs, "**Example**:")
assert.Contains(t, docs, "```bash")
assert.Contains(t, docs, "export")
}
func TestGenerateConfigDocs_ContainsDefaults(t *testing.T) {
docs := GenerateConfigDocs()
// Vérifier qu'il y a des valeurs par défaut
assert.Contains(t, docs, "**Default**:")
assert.Contains(t, docs, "development") // Default pour APP_ENV
assert.Contains(t, docs, "8080") // Default pour APP_PORT
}
func TestGetAllEnvVarDocs(t *testing.T) {
docs := GetAllEnvVarDocs()
// Vérifier que la map contient des entrées
assert.Greater(t, len(docs), 0, "Should have environment variables documented")
// Vérifier quelques variables clés
assert.Contains(t, docs, "APP_ENV")
assert.Contains(t, docs, "JWT_SECRET")
assert.Contains(t, docs, "DATABASE_URL")
// Vérifier la structure d'une variable
appEnvDoc := docs["APP_ENV"]
assert.Equal(t, "APP_ENV", appEnvDoc.Name)
assert.Equal(t, "string", appEnvDoc.Type)
assert.False(t, appEnvDoc.Required)
assert.Equal(t, "development", appEnvDoc.Default)
assert.NotEmpty(t, appEnvDoc.Description)
// Vérifier une variable requise
jwtSecretDoc := docs["JWT_SECRET"]
assert.True(t, jwtSecretDoc.Required, "JWT_SECRET should be required")
}
func TestEnvVarDoc_Complete(t *testing.T) {
// Vérifier que toutes les entrées de envVarsDocs sont complètes
allDocs := GetAllEnvVarDocs()
for key, doc := range allDocs {
assert.NotEmpty(t, doc.Name, "Name should not be empty for %s", key)
assert.NotEmpty(t, doc.Type, "Type should not be empty for %s", key)
assert.NotEmpty(t, doc.Description, "Description should not be empty for %s", key)
// Si ce n'est pas requis, devrait avoir une valeur par défaut
if !doc.Required {
// Note: certaines variables peuvent avoir une valeur par défaut vide (c'est OK)
}
// Si c'est requis, ne devrait pas avoir de valeur par défaut (ou valeur vide)
if doc.Required {
assert.Empty(t, doc.Default, "Required variable %s should not have a default value", key)
}
}
}