Files
fn_registry/functions/infra/generate_dockerfile_test.go
T
egutierrez 1d45f232c6 feat: funciones infra — Docker, deploy, build y health check
Funciones impuras para gestión de contenedores: docker_build_image,
docker_compose_up/down, docker_volume_create/list/remove,
generate_dockerfile, write_dockerfile, go_build_binary, health_check_http,
deploy_app y stop_app. Todas con tests unitarios donde aplica.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 14:24:12 +02:00

68 lines
2.0 KiB
Go

package infra
import (
"strings"
"testing"
)
func TestGenerateDockerfile(t *testing.T) {
t.Run("contiene stage builder con golang:1.23-alpine", func(t *testing.T) {
got := GenerateDockerfile("myapp", 8080, nil)
if !strings.Contains(got, "FROM golang:1.23-alpine AS builder") {
t.Errorf("expected FROM golang:1.23-alpine AS builder, got:\n%s", got)
}
})
t.Run("contiene stage final con alpine:latest", func(t *testing.T) {
got := GenerateDockerfile("myapp", 8080, nil)
if !strings.Contains(got, "FROM alpine:latest") {
t.Errorf("expected FROM alpine:latest, got:\n%s", got)
}
})
t.Run("incluye EXPOSE cuando port mayor a cero", func(t *testing.T) {
got := GenerateDockerfile("myapp", 8080, nil)
if !strings.Contains(got, "EXPOSE 8080") {
t.Errorf("expected EXPOSE 8080, got:\n%s", got)
}
})
t.Run("no incluye EXPOSE cuando port es cero", func(t *testing.T) {
got := GenerateDockerfile("myapp", 0, nil)
if strings.Contains(got, "EXPOSE") {
t.Errorf("expected no EXPOSE directive, got:\n%s", got)
}
})
t.Run("env vars aparecen ordenadas alfabeticamente", func(t *testing.T) {
got := GenerateDockerfile("myapp", 8080, map[string]string{
"Z_VAR": "z",
"A_VAR": "a",
"M_VAR": "m",
})
posA := strings.Index(got, "ENV A_VAR=a")
posM := strings.Index(got, "ENV M_VAR=m")
posZ := strings.Index(got, "ENV Z_VAR=z")
if posA < 0 || posM < 0 || posZ < 0 {
t.Fatalf("ENV vars no encontradas en:\n%s", got)
}
if !(posA < posM && posM < posZ) {
t.Errorf("ENV vars no ordenadas: A=%d M=%d Z=%d", posA, posM, posZ)
}
})
t.Run("binaryName aparece en ENTRYPOINT", func(t *testing.T) {
got := GenerateDockerfile("mycli", 9090, nil)
if !strings.Contains(got, `ENTRYPOINT ["./mycli"]`) {
t.Errorf("expected ENTRYPOINT with mycli, got:\n%s", got)
}
})
t.Run("env vars vacias no generan instrucciones ENV", func(t *testing.T) {
got := GenerateDockerfile("myapp", 8080, map[string]string{})
if strings.Contains(got, "ENV ") {
t.Errorf("expected no ENV directives for empty map, got:\n%s", got)
}
})
}