package deploy_test import ( "context" "database/sql" "log/slog" "os" "testing" "sneak.berlin/go/upaas/internal/database" "sneak.berlin/go/upaas/internal/docker" "sneak.berlin/go/upaas/internal/models" "sneak.berlin/go/upaas/internal/service/deploy" ) func TestBuildContainerOptionsUsesImageID(t *testing.T) { t.Parallel() db := database.NewTestDatabase(t) app := models.NewApp(db) app.Name = "myapp" err := app.Save(context.Background()) if err != nil { t.Fatalf("failed to save app: %v", err) } log := slog.New(slog.NewTextHandler(os.Stderr, nil)) svc := deploy.NewTestService(log) const expectedImageID = docker.ImageID("sha256:abc123def456") opts, err := svc.BuildContainerOptionsExported(context.Background(), app, expectedImageID) if err != nil { t.Fatalf("buildContainerOptions returned error: %v", err) } if opts.Image != expectedImageID.String() { t.Errorf("expected Image=%q, got %q", expectedImageID, opts.Image) } if opts.Name != "upaas-myapp" { t.Errorf("expected Name=%q, got %q", "upaas-myapp", opts.Name) } } func TestBuildContainerOptionsHealthcheckSet(t *testing.T) { t.Parallel() db := database.NewTestDatabase(t) app := models.NewApp(db) app.Name = "hc-app" app.HealthcheckCommand = sql.NullString{ String: "curl -f http://localhost:8080/healthz || exit 1", Valid: true, } err := app.Save(context.Background()) if err != nil { t.Fatalf("failed to save app: %v", err) } log := slog.New(slog.NewTextHandler(os.Stderr, nil)) svc := deploy.NewTestService(log) opts, err := svc.BuildContainerOptionsExported( context.Background(), app, "sha256:test", ) if err != nil { t.Fatalf("buildContainerOptions returned error: %v", err) } expected := "curl -f http://localhost:8080/healthz || exit 1" if opts.HealthcheckCommand != expected { t.Errorf("expected HealthcheckCommand=%q, got %q", expected, opts.HealthcheckCommand) } } func TestBuildContainerOptionsHealthcheckEmpty(t *testing.T) { t.Parallel() db := database.NewTestDatabase(t) app := models.NewApp(db) app.Name = "no-hc-app" err := app.Save(context.Background()) if err != nil { t.Fatalf("failed to save app: %v", err) } log := slog.New(slog.NewTextHandler(os.Stderr, nil)) svc := deploy.NewTestService(log) opts, err := svc.BuildContainerOptionsExported( context.Background(), app, "sha256:test", ) if err != nil { t.Fatalf("buildContainerOptions returned error: %v", err) } if opts.HealthcheckCommand != "" { t.Errorf("expected empty HealthcheckCommand, got %q", opts.HealthcheckCommand) } }