quotation service fixed

This commit is contained in:
Stephan D
2026-02-24 16:14:09 +01:00
parent 6444813f38
commit 2fe90347a8
76 changed files with 769 additions and 230 deletions

View File

@@ -10,7 +10,7 @@ func TestStableGatewayID(t *testing.T) {
want string
}{
{name: "prefix and key", prefix: "crypto_rail_gateway", key: " TRON ", want: "crypto_rail_gateway_tron"},
{name: "prefix trailing underscore", prefix: "payment_gateway_", key: " PROVIDER_SETTLEMENT ", want: "payment_gateway_provider_settlement"},
{name: "prefix trailing underscore", prefix: "payment_gateway_", key: " SETTLEMENT ", want: "payment_gateway_settlement"},
{name: "missing key", prefix: "payment_gateway", key: " ", want: "payment_gateway_unknown"},
{name: "missing prefix", prefix: " ", key: "TRON", want: "tron"},
}
@@ -35,7 +35,7 @@ func TestStableCryptoRailGatewayID(t *testing.T) {
}
func TestStablePaymentGatewayID(t *testing.T) {
if got, want := StablePaymentGatewayID(" PROVIDER_SETTLEMENT "), "payment_gateway_provider_settlement"; got != want {
if got, want := StablePaymentGatewayID(" SETTLEMENT "), "payment_gateway_settlement"; got != want {
t.Fatalf("unexpected stable id: got=%q want=%q", got, want)
}
if got, want := StablePaymentGatewayID(""), "payment_gateway_unknown"; got != want {

View File

@@ -4,10 +4,10 @@ import "strings"
const (
RailCrypto = "CRYPTO"
RailProviderSettlement = "PROVIDER_SETTLEMENT"
RailProviderSettlement = "SETTLEMENT"
RailLedger = "LEDGER"
RailCardPayout = "CARD_PAYOUT"
RailFiatOnRamp = "FIAT_ONRAMP"
RailCardPayout = "CARD"
RailFiatOnRamp = "ONRAMP"
)
const (
@@ -48,7 +48,30 @@ var knownRailOperations = map[string]struct{}{
// NormalizeRail canonicalizes a rail token.
func NormalizeRail(value string) string {
return strings.ToUpper(strings.TrimSpace(value))
clean := strings.ToUpper(strings.TrimSpace(value))
if clean == "" {
return ""
}
clean = strings.ReplaceAll(clean, "-", "_")
clean = strings.ReplaceAll(clean, " ", "_")
for strings.Contains(clean, "__") {
clean = strings.ReplaceAll(clean, "__", "_")
}
switch clean {
case RailCrypto, "RAIL_CRYPTO":
return RailCrypto
case RailProviderSettlement, "PROVIDER_SETTLEMENT", "RAIL_SETTLEMENT", "RAIL_PROVIDER_SETTLEMENT":
return RailProviderSettlement
case RailLedger, "RAIL_LEDGER":
return RailLedger
case RailCardPayout, "CARD_PAYOUT", "RAIL_CARD", "RAIL_CARD_PAYOUT":
return RailCardPayout
case RailFiatOnRamp, "FIAT_ONRAMP", "RAIL_ONRAMP", "RAIL_FIAT_ONRAMP":
return RailFiatOnRamp
default:
return clean
}
}
// IsKnownRail reports whether the value is a recognized payment rail.
@@ -60,8 +83,8 @@ func IsKnownRail(value string) bool {
// NormalizeRailOperation canonicalizes a rail operation token.
func NormalizeRailOperation(value string) string {
clean := strings.ToUpper(strings.TrimSpace(value))
if strings.HasPrefix(clean, "RAIL_OPERATION_") {
clean = strings.TrimPrefix(clean, "RAIL_OPERATION_")
if after, ok := strings.CutPrefix(clean, "RAIL_OPERATION_"); ok {
clean = after
}
return clean
}
@@ -140,3 +163,11 @@ func CardPayoutRailGatewayOperations() []string {
RailOperationObserveConfirm,
}
}
// ProviderSettlementRailGatewayOperations returns canonical operations for settlement gateways.
func ProviderSettlementRailGatewayOperations() []string {
return []string{
RailOperationFXConvert,
RailOperationObserveConfirm,
}
}

View File

@@ -47,3 +47,15 @@ func TestIsKnownRail(t *testing.T) {
t.Fatalf("did not expect telegram rail to be known")
}
}
func TestNormalizeRailAliases(t *testing.T) {
if got := NormalizeRail("provider_settlement"); got != RailProviderSettlement {
t.Fatalf("provider_settlement alias mismatch: got=%q want=%q", got, RailProviderSettlement)
}
if got := NormalizeRail("card_payout"); got != RailCardPayout {
t.Fatalf("card_payout alias mismatch: got=%q want=%q", got, RailCardPayout)
}
if got := NormalizeRail("RAIL_SETTLEMENT"); got != RailProviderSettlement {
t.Fatalf("RAIL_SETTLEMENT alias mismatch: got=%q want=%q", got, RailProviderSettlement)
}
}