- 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.
82 lines
2.2 KiB
Go
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
|
|
}
|