Files
fn_registry/functions/infra/generate_compose_traefik_test.go
T
egutierrez 750b7abcd5 chore: auto-commit (97 archivos)
- .claude/CLAUDE.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- bash/functions/infra/build_cpp_windows.sh
- cpp/CMakeLists.txt
- cpp/PATTERNS.md
- cpp/framework/app_base.cpp
- cpp/framework/app_base.h
- dev/issues/README.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:11:24 +02:00

159 lines
3.9 KiB
Go

package infra
import (
"strings"
"testing"
)
func TestGenerateComposeTraefik(t *testing.T) {
t.Run("render con volume y multiples envs", func(t *testing.T) {
cfg := ComposeTraefikConfig{
ProjectName: "kanban",
ServiceName: "kanban",
BuildContext: "../../",
Dockerfile: "apps/kanban/Dockerfile",
Port: 8421,
VolumeName: "kanban_data",
EnvVars: []string{"KANBAN_TOKEN", "SECRET_KEY"},
Network: "coolify",
}
got := GenerateComposeTraefik(cfg)
checks := []string{
"name: kanban",
"services:",
" kanban:",
" build:",
" context: ../../",
" dockerfile: apps/kanban/Dockerfile",
" container_name: kanban",
" restart: unless-stopped",
" ports:",
` - "8421:8421"`,
" volumes:",
" - kanban_data:/data",
" environment:",
" - KANBAN_TOKEN=${KANBAN_TOKEN:-}",
" - SECRET_KEY=${SECRET_KEY:-}",
" networks:",
" - coolify",
"\nvolumes:",
" kanban_data:",
"\nnetworks:",
" coolify:",
" external: true",
}
for _, want := range checks {
if !strings.Contains(got, want) {
t.Errorf("missing %q in output:\n%s", want, got)
}
}
})
t.Run("render sin volume", func(t *testing.T) {
cfg := ComposeTraefikConfig{
ProjectName: "myapp",
ServiceName: "myapp",
BuildContext: ".",
Dockerfile: "Dockerfile",
Port: 9000,
VolumeName: "",
EnvVars: []string{"API_KEY"},
Network: "coolify",
}
got := GenerateComposeTraefik(cfg)
if strings.Contains(got, "volumes:") {
t.Errorf("expected no 'volumes:' section when VolumeName is empty, got:\n%s", got)
}
if !strings.Contains(got, "networks:") {
t.Errorf("expected 'networks:' section, got:\n%s", got)
}
if !strings.Contains(got, " - API_KEY=${API_KEY:-}") {
t.Errorf("expected env var passthrough, got:\n%s", got)
}
})
t.Run("render sin envs", func(t *testing.T) {
cfg := ComposeTraefikConfig{
ProjectName: "plain",
ServiceName: "plain",
BuildContext: ".",
Dockerfile: "Dockerfile",
Port: 8080,
VolumeName: "plain_data",
EnvVars: nil,
Network: "coolify",
}
got := GenerateComposeTraefik(cfg)
if strings.Contains(got, "environment:") {
t.Errorf("expected no 'environment:' section when EnvVars is nil, got:\n%s", got)
}
})
t.Run("project name con guion", func(t *testing.T) {
cfg := ComposeTraefikConfig{
ProjectName: "registry-api",
ServiceName: "registry_api",
BuildContext: "../../",
Dockerfile: "apps/registry_api/Dockerfile",
Port: 8420,
VolumeName: "registry_data",
EnvVars: []string{"REGISTRY_API_TOKEN"},
Network: "coolify",
}
got := GenerateComposeTraefik(cfg)
if !strings.Contains(got, "name: registry-api") {
t.Errorf("expected 'name: registry-api', got:\n%s", got)
}
if !strings.Contains(got, "container_name: registry_api") {
t.Errorf("expected 'container_name: registry_api', got:\n%s", got)
}
})
t.Run("snapshot YAML completo replica patron registry_api", func(t *testing.T) {
cfg := ComposeTraefikConfig{
ProjectName: "registry-api",
ServiceName: "registry_api",
BuildContext: "../../",
Dockerfile: "apps/registry_api/Dockerfile",
Port: 8420,
VolumeName: "registry_data",
EnvVars: []string{"REGISTRY_API_TOKEN"},
Network: "coolify",
}
got := GenerateComposeTraefik(cfg)
expected := `name: registry-api
services:
registry_api:
build:
context: ../../
dockerfile: apps/registry_api/Dockerfile
container_name: registry_api
restart: unless-stopped
ports:
- "8420:8420"
volumes:
- registry_data:/data
environment:
- REGISTRY_API_TOKEN=${REGISTRY_API_TOKEN:-}
networks:
- coolify
volumes:
registry_data:
networks:
coolify:
external: true
`
if got != expected {
t.Errorf("snapshot mismatch.\nGOT:\n%s\nWANT:\n%s", got, expected)
}
})
}