fixed rail & operation names

This commit is contained in:
Stephan D
2026-02-27 02:33:40 +01:00
parent 82cf91e703
commit 747153bdbf
73 changed files with 877 additions and 667 deletions

View File

@@ -26,7 +26,7 @@ import (
const (
ledgerConnectorID = "ledger"
ledgerRailName = "LEDGER"
ledgerRailName = discovery.RailLedger
opParamOperation = "operation"
opParamToMoney = "to_money"
@@ -175,6 +175,7 @@ func (c *ledgerClient) CreateTransaction(ctx context.Context, tx rail.LedgerTx)
if money.GetCurrency() == "" || money.GetAmount() == "" {
return "", merrors.InvalidArgument("ledger: amount is required")
}
tx = normalizeLedgerTxRails(tx)
description := strings.TrimSpace(tx.Description)
metadata := ledgerTxMetadata(tx.Metadata, tx)
@@ -849,7 +850,17 @@ func (c *ledgerClient) callContext(ctx context.Context) (context.Context, contex
}
func isLedgerRail(value string) bool {
return strings.EqualFold(strings.TrimSpace(value), ledgerRailName)
return normalizeRail(value) == ledgerRailName
}
func normalizeLedgerTxRails(tx rail.LedgerTx) rail.LedgerTx {
tx.FromRail = normalizeRail(tx.FromRail)
tx.ToRail = normalizeRail(tx.ToRail)
return tx
}
func normalizeRail(value string) string {
return discovery.NormalizeRail(value)
}
func cloneMoney(input *moneyv1.Money) *moneyv1.Money {
@@ -881,10 +892,10 @@ func ledgerTxMetadata(base map[string]string, tx rail.LedgerTx) map[string]strin
if val := strings.TrimSpace(tx.PaymentPlanID); val != "" {
meta[txMetaPaymentPlanID] = val
}
if val := strings.TrimSpace(tx.FromRail); val != "" {
if val := normalizeRail(tx.FromRail); val != "" {
meta[txMetaFromRail] = val
}
if val := strings.TrimSpace(tx.ToRail); val != "" {
if val := normalizeRail(tx.ToRail); val != "" {
meta[txMetaToRail] = val
}
if val := strings.TrimSpace(tx.ExternalReferenceID); val != "" {

View File

@@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/tech/sendico/pkg/discovery"
"github.com/tech/sendico/pkg/payments/rail"
accountrolev1 "github.com/tech/sendico/pkg/proto/common/account_role/v1"
moneyv1 "github.com/tech/sendico/pkg/proto/common/money/v1"
connectorv1 "github.com/tech/sendico/pkg/proto/connector/v1"
@@ -156,3 +157,36 @@ func TestPostExternalDebitWithCharges_SubmitsExternalOperation(t *testing.T) {
assert.Equal(t, "op-ext-debit", resp.GetJournalEntryRef())
assert.Equal(t, ledgerv1.EntryType_ENTRY_DEBIT, resp.GetEntryType())
}
func TestCreateTransaction_NormalizesRailsForDirectionAndMetadata(t *testing.T) {
ctx := context.Background()
var captured *connectorv1.Operation
stub := &stubConnector{
submitFn: func(ctx context.Context, req *connectorv1.SubmitOperationRequest) (*connectorv1.SubmitOperationResponse, error) {
captured = req.GetOperation()
return &connectorv1.SubmitOperationResponse{Receipt: &connectorv1.OperationReceipt{OperationId: "op-tx"}}, nil
},
}
client := NewWithClient(Config{}, stub)
ref, err := client.CreateTransaction(ctx, rail.LedgerTx{
IdempotencyKey: "idem-tx",
OrganizationRef: "org-1",
LedgerAccountRef: "acct-1",
Currency: "USD",
Amount: "10",
FromRail: "rail_ledger",
ToRail: "crypto",
})
require.NoError(t, err)
require.Equal(t, "op-tx", ref)
require.NotNil(t, captured)
assert.Equal(t, connectorv1.OperationType_DEBIT, captured.GetType())
metadata, ok := captured.GetParams().AsMap()["metadata"].(map[string]interface{})
require.True(t, ok)
assert.Equal(t, discovery.RailLedger, metadata["from_rail"])
assert.Equal(t, discovery.RailCrypto, metadata["to_rail"])
}