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.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) } }