Files
card-to-iban/backend/cmd/api/config_test.go

95 lines
2.6 KiB
Go

package main
import (
"strings"
"testing"
"time"
)
func TestReadConfigUsesDefaults(t *testing.T) {
values := map[string]string{
"ZARINHUB_API_USERNAME": "test-username",
"ZARINHUB_API_PASSWORD": "test-password",
}
config, err := readConfig(func(key string) string {
return values[key]
})
if err != nil {
t.Fatalf("readConfig() error = %v", err)
}
if config.ServerAddr != "127.0.0.1:8080" {
t.Errorf("ServerAddr = %q", config.ServerAddr)
}
if config.FrontendOrigin != "http://127.0.0.1:3000" {
t.Errorf("FrontendOrigin = %q", config.FrontendOrigin)
}
if config.ZarinHubAuthEndpoint != "https://zarin-hub.com/api/v5/Authentication/GetToken" {
t.Errorf("ZarinHubAuthEndpoint = %q", config.ZarinHubAuthEndpoint)
}
if config.ZarinHubTimeout != 5*time.Second {
t.Errorf("ZarinHubTimeout = %v", config.ZarinHubTimeout)
}
if config.ZarinHubRetries != 2 {
t.Errorf("ZarinHubRetries = %d, want 2", config.ZarinHubRetries)
}
if config.DatabasePath != "./card-to-iban.db" {
t.Errorf("DatabasePath = %q", config.DatabasePath)
}
}
func TestReadConfigRejectsMissingUsername(t *testing.T) {
_, err := readConfig(func(key string) string { return "" })
if err == nil || !strings.Contains(err.Error(), "ZARINHUB_API_USERNAME") {
t.Fatalf("readConfig() error = %v, want missing username error", err)
}
}
func TestReadConfigRejectsMissingPassword(t *testing.T) {
values := map[string]string{
"ZARINHUB_API_USERNAME": "test-username",
}
_, err := readConfig(func(key string) string {
return values[key]
})
if err == nil || !strings.Contains(err.Error(), "ZARINHUB_API_PASSWORD") {
t.Fatalf("readConfig() error = %v, want missing password error", err)
}
}
func TestReadConfigRejectsInvalidTimeout(t *testing.T) {
values := map[string]string{
"ZARINHUB_API_USERNAME": "test-username",
"ZARINHUB_API_PASSWORD": "test-password",
"ZARINHUB_TIMEOUT": "later",
}
_, err := readConfig(func(key string) string {
return values[key]
})
if err == nil || !strings.Contains(err.Error(), "ZARINHUB_TIMEOUT") {
t.Fatalf("readConfig() error = %v, want timeout error", err)
}
}
func TestReadConfigRejectsInvalidRetries(t *testing.T) {
testCases := []string{"-1", "invalid", "2.5"}
for _, tc := range testCases {
values := map[string]string{
"ZARINHUB_API_USERNAME": "test-username",
"ZARINHUB_API_PASSWORD": "test-password",
"ZARINHUB_RETRIES": tc,
}
_, err := readConfig(func(key string) string {
return values[key]
})
if err == nil || !strings.Contains(err.Error(), "ZARINHUB_RETRIES") {
t.Errorf("retries=%q: want error mentioning ZARINHUB_RETRIES, got %v", tc, err)
}
}
}