kra-new/internal/integration/payment/adapter_test.go

60 lines
1.4 KiB
Go

package payment
import (
bizpayment "kra/internal/biz/payment"
"testing"
)
func TestEverySupportedProviderHasAdapter(t *testing.T) {
factory := NewFactory()
for _, provider := range bizpayment.SupportedPaymentProviders {
t.Run(provider, func(t *testing.T) {
adapter, err := factory.New(provider)
if err != nil {
t.Fatalf("New(%q): %v", provider, err)
}
if adapter == nil {
t.Fatalf("New(%q) returned a nil adapter", provider)
}
})
}
}
func TestNewNormalizesProviderIdentifier(t *testing.T) {
factory := NewFactory()
for _, provider := range bizpayment.SupportedPaymentProviders {
adapter, err := factory.New(" " + provider + " ")
if err != nil {
t.Fatalf("New(%q): %v", provider, err)
}
if adapter == nil {
t.Fatalf("New(%q) returned nil", provider)
}
}
}
func TestNewRejectsUnknownProvider(t *testing.T) {
if _, err := NewFactory().New("unknown-provider"); err == nil {
t.Fatal("unknown provider unexpectedly accepted")
}
}
func TestNonceIsUniqueForConcurrentRequests(t *testing.T) {
const count = 1000
values := make(chan string, count)
for i := 0; i < count; i++ {
go func() { values <- nonce() }()
}
seen := make(map[string]struct{}, count)
for i := 0; i < count; i++ {
value := <-values
if value == "" {
t.Fatal("nonce returned an empty value")
}
if _, exists := seen[value]; exists {
t.Fatalf("nonce collision for %q", value)
}
seen[value] = struct{}{}
}
}