750b7abcd5
- .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>
159 lines
3.9 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|