payit/config/config_test.go

77 lines
2.1 KiB
Go

package config
import (
"strings"
"testing"
)
func TestLoadSuccess(t *testing.T) {
t.Setenv("PAYIT_STRIPE_SECRET_KEY", "sk_test")
t.Setenv("PAYIT_STRIPE_PUBLISHABLE_KEY", "pk_test")
t.Setenv("PAYIT_PRODUCT_NAME", "Demo product")
t.Setenv("PAYIT_PRODUCT_DESCRIPTION", "Great product")
t.Setenv("PAYIT_PRODUCT_PRICE_CENTS", "2500")
t.Setenv("PAYIT_PRODUCT_CURRENCY", "usd")
t.Setenv("PAYIT_PRODUCT_SUCCESS_URL", "https://example.com/success")
t.Setenv("PAYIT_PRODUCT_CANCEL_URL", "https://example.com/cancel")
cfg, err := Load()
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if cfg.Product.PriceCents != 2500 {
t.Fatalf("expected price 2500, got %d", cfg.Product.PriceCents)
}
if cfg.Product.Name != "Demo product" {
t.Fatalf("unexpected product name: %s", cfg.Product.Name)
}
}
func TestLoadMissingMandatoryVariables(t *testing.T) {
clearAllEnv(t)
_, err := Load()
if err == nil {
t.Fatal("expected error when required variables are missing")
}
if !strings.Contains(err.Error(), "missing required environment variables") {
t.Fatalf("unexpected error: %v", err)
}
}
func TestLoadInvalidPrice(t *testing.T) {
t.Setenv("PAYIT_STRIPE_SECRET_KEY", "sk_test")
t.Setenv("PAYIT_STRIPE_PUBLISHABLE_KEY", "pk_test")
t.Setenv("PAYIT_PRODUCT_NAME", "Demo product")
t.Setenv("PAYIT_PRODUCT_DESCRIPTION", "Great product")
t.Setenv("PAYIT_PRODUCT_PRICE_CENTS", "-1")
t.Setenv("PAYIT_PRODUCT_CURRENCY", "usd")
t.Setenv("PAYIT_PRODUCT_SUCCESS_URL", "https://example.com/success")
t.Setenv("PAYIT_PRODUCT_CANCEL_URL", "https://example.com/cancel")
_, err := Load()
if err == nil {
t.Fatal("expected error for invalid price")
}
if !strings.Contains(err.Error(), "PAYIT_PRODUCT_PRICE_CENTS") {
t.Fatalf("unexpected error: %v", err)
}
}
func clearAllEnv(t *testing.T) {
t.Helper()
envs := []string{
"PAYIT_STRIPE_SECRET_KEY",
"PAYIT_STRIPE_PUBLISHABLE_KEY",
"PAYIT_PRODUCT_NAME",
"PAYIT_PRODUCT_DESCRIPTION",
"PAYIT_PRODUCT_PRICE_CENTS",
"PAYIT_PRODUCT_CURRENCY",
"PAYIT_PRODUCT_SUCCESS_URL",
"PAYIT_PRODUCT_CANCEL_URL",
}
for _, env := range envs {
t.Setenv(env, "")
}
}