ultisuite-backend/internal/integrationtest/env.go
R3D347HR4Y fa5394e10d feat(tests): add integration testing framework and configuration
- Introduced a new `.env.test.example` file for integration test configuration.
- Added a `Makefile` to streamline test commands for unit and integration tests.
- Implemented an integration testing harness with support for PostgreSQL, MinIO, and Redis using testcontainers.
- Created a suite of integration tests covering health checks and user management functionalities.
- Enhanced CI workflow to include integration tests with necessary environment variables.
2026-06-07 19:44:29 +02:00

82 lines
2.2 KiB
Go

//go:build integration
package integrationtest
import (
"os"
"strconv"
"strings"
)
// Env holds integration test configuration from ULTI_TEST_* variables.
type Env struct {
Enabled bool
DBURL string
RedisAddr string
S3Endpoint string
S3AccessKey string
S3SecretKey string
S3UseSSL bool
AutoMigrate bool
Parallel int
Nextcloud bool
NextcloudURL string
Immich bool
ImmichURL string
Jitsi bool
Meilisearch bool
MeilisearchURL string
MeilisearchKey string
}
func LoadEnv() Env {
return Env{
Enabled: envTruthy("ULTI_TEST_INTEGRATION"),
DBURL: strings.TrimSpace(os.Getenv("ULTI_TEST_DB_URL")),
RedisAddr: strings.TrimSpace(os.Getenv("ULTI_TEST_REDIS_ADDR")),
S3Endpoint: strings.TrimSpace(os.Getenv("ULTI_TEST_S3_ENDPOINT")),
S3AccessKey: envOr("ULTI_TEST_S3_ACCESS_KEY", "ultiadmin"),
S3SecretKey: envOr("ULTI_TEST_S3_SECRET_KEY", "changeme123"),
S3UseSSL: envTruthy("ULTI_TEST_S3_USE_SSL"),
AutoMigrate: !envFalsy("ULTI_TEST_AUTO_MIGRATE"),
Parallel: envInt("ULTI_TEST_PARALLEL", 4),
Nextcloud: envTruthy("ULTI_TEST_NEXTCLOUD"),
NextcloudURL: strings.TrimSpace(os.Getenv("ULTI_TEST_NEXTCLOUD_URL")),
Immich: envTruthy("ULTI_TEST_IMMICH"),
ImmichURL: strings.TrimSpace(os.Getenv("ULTI_TEST_IMMICH_URL")),
Jitsi: envTruthy("ULTI_TEST_JITSI"),
Meilisearch: envTruthy("ULTI_TEST_MEILISEARCH"),
MeilisearchURL: strings.TrimSpace(os.Getenv("ULTI_TEST_MEILISEARCH_URL")),
MeilisearchKey: strings.TrimSpace(os.Getenv("ULTI_TEST_MEILISEARCH_KEY")),
}
}
func envOr(key, fallback string) string {
if v := strings.TrimSpace(os.Getenv(key)); v != "" {
return v
}
return fallback
}
func envTruthy(key string) bool {
v := strings.ToLower(strings.TrimSpace(os.Getenv(key)))
return v == "1" || v == "true" || v == "yes"
}
func envFalsy(key string) bool {
v := strings.ToLower(strings.TrimSpace(os.Getenv(key)))
return v == "0" || v == "false" || v == "no"
}
func envInt(key string, fallback int) int {
v := strings.TrimSpace(os.Getenv(key))
if v == "" {
return fallback
}
n, err := strconv.Atoi(v)
if err != nil {
return fallback
}
return n
}