gw <-> po contracts tests

This commit is contained in:
Stephan D
2026-03-06 15:45:14 +01:00
parent 0f42a0e77f
commit 88b279dd78
13 changed files with 354 additions and 12 deletions

View File

@@ -492,6 +492,9 @@ func transferFromReceipt(req *chainv1.SubmitTransferRequest, receipt *connectorv
transfer.Destination = req.GetDestination()
transfer.RequestedAmount = req.GetAmount()
transfer.NetAmount = req.GetAmount()
transfer.IntentRef = strings.TrimSpace(req.GetIntentRef())
transfer.OperationRef = strings.TrimSpace(req.GetOperationRef())
transfer.PaymentRef = strings.TrimSpace(req.GetPaymentRef())
}
if receipt != nil {
transfer.TransferRef = strings.TrimSpace(receipt.GetOperationId())

View File

@@ -5,6 +5,7 @@ import (
"testing"
"github.com/stretchr/testify/require"
moneyv1 "github.com/tech/sendico/pkg/proto/common/money/v1"
connectorv1 "github.com/tech/sendico/pkg/proto/connector/v1"
chainv1 "github.com/tech/sendico/pkg/proto/gateway/chain/v1"
"google.golang.org/grpc"
@@ -13,6 +14,11 @@ import (
type stubConnectorClient struct {
listReq *connectorv1.ListAccountsRequest
getReq *connectorv1.GetOperationRequest
submitReq *connectorv1.SubmitOperationRequest
submitResp *connectorv1.SubmitOperationResponse
getResp *connectorv1.GetOperationResponse
}
func (s *stubConnectorClient) GetCapabilities(ctx context.Context, in *connectorv1.GetCapabilitiesRequest, opts ...grpc.CallOption) (*connectorv1.GetCapabilitiesResponse, error) {
@@ -37,10 +43,18 @@ func (s *stubConnectorClient) GetBalance(ctx context.Context, in *connectorv1.Ge
}
func (s *stubConnectorClient) SubmitOperation(ctx context.Context, in *connectorv1.SubmitOperationRequest, opts ...grpc.CallOption) (*connectorv1.SubmitOperationResponse, error) {
s.submitReq = in
if s.submitResp != nil {
return s.submitResp, nil
}
return &connectorv1.SubmitOperationResponse{}, nil
}
func (s *stubConnectorClient) GetOperation(ctx context.Context, in *connectorv1.GetOperationRequest, opts ...grpc.CallOption) (*connectorv1.GetOperationResponse, error) {
s.getReq = in
if s.getResp != nil {
return s.getResp, nil
}
return &connectorv1.GetOperationResponse{}, nil
}
@@ -66,3 +80,84 @@ func TestListManagedWallets_ForwardsOrganizationRef(t *testing.T) {
require.Equal(t, "owner-1", stub.listReq.GetOwnerRefFilter().GetValue())
require.Equal(t, connectorv1.AccountKind_CHAIN_MANAGED_WALLET, stub.listReq.GetKind())
}
func TestTransferFromReceipt_PreservesRequestReferences(t *testing.T) {
req := &chainv1.SubmitTransferRequest{
IdempotencyKey: "idem-1",
OrganizationRef: "org-1",
SourceWalletRef: "wallet-src",
Amount: &moneyv1.Money{Amount: "12.34", Currency: "USDT"},
IntentRef: "intent-1",
OperationRef: "payment-1:hop_2_settlement_fx_convert",
PaymentRef: "payment-1",
}
receipt := &connectorv1.OperationReceipt{
OperationId: "payment-1:hop_2_settlement_fx_convert",
ProviderRef: "provider-1",
Status: connectorv1.OperationStatus_OPERATION_WAITING,
}
transfer := transferFromReceipt(req, receipt)
require.NotNil(t, transfer)
require.Equal(t, "payment-1:hop_2_settlement_fx_convert", transfer.GetTransferRef())
require.Equal(t, "intent-1", transfer.GetIntentRef())
require.Equal(t, "payment-1:hop_2_settlement_fx_convert", transfer.GetOperationRef())
require.Equal(t, "payment-1", transfer.GetPaymentRef())
require.Equal(t, chainv1.TransferStatus_TRANSFER_WAITING, transfer.GetStatus())
}
func TestSubmitTransfer_ForwardsOperationAndIntentReferences(t *testing.T) {
stub := &stubConnectorClient{
submitResp: &connectorv1.SubmitOperationResponse{
Receipt: &connectorv1.OperationReceipt{
OperationId: "payment-1:hop_2_settlement_fx_convert",
Status: connectorv1.OperationStatus_OPERATION_WAITING,
ProviderRef: "provider-1",
},
},
}
client := NewWithClient(Config{}, stub)
resp, err := client.SubmitTransfer(context.Background(), &chainv1.SubmitTransferRequest{
IdempotencyKey: "idem-1",
OrganizationRef: "org-1",
SourceWalletRef: "wallet-src",
Destination: &chainv1.TransferDestination{
Destination: &chainv1.TransferDestination_ManagedWalletRef{
ManagedWalletRef: "wallet-dst",
},
},
Amount: &moneyv1.Money{Amount: "12.34", Currency: "USDT"},
IntentRef: "intent-1",
OperationRef: "payment-1:hop_2_settlement_fx_convert",
PaymentRef: "payment-1",
})
require.NoError(t, err)
require.NotNil(t, stub.submitReq)
require.NotNil(t, stub.submitReq.GetOperation())
require.Equal(t, "intent-1", stub.submitReq.GetOperation().GetIntentRef())
require.Equal(t, "payment-1:hop_2_settlement_fx_convert", stub.submitReq.GetOperation().GetOperationRef())
require.NotNil(t, resp.GetTransfer())
require.Equal(t, "payment-1:hop_2_settlement_fx_convert", resp.GetTransfer().GetTransferRef())
require.Equal(t, "payment-1:hop_2_settlement_fx_convert", resp.GetTransfer().GetOperationRef())
require.Equal(t, "intent-1", resp.GetTransfer().GetIntentRef())
}
func TestGetTransfer_UsesTransferRefAsOperationID(t *testing.T) {
stub := &stubConnectorClient{
getResp: &connectorv1.GetOperationResponse{
Operation: &connectorv1.Operation{
OperationId: "transfer-1",
Status: connectorv1.OperationStatus_OPERATION_PROCESSING,
},
},
}
client := NewWithClient(Config{}, stub)
resp, err := client.GetTransfer(context.Background(), &chainv1.GetTransferRequest{TransferRef: "transfer-1"})
require.NoError(t, err)
require.NotNil(t, stub.getReq)
require.Equal(t, "transfer-1", stub.getReq.GetOperationId())
require.NotNil(t, resp.GetTransfer())
require.Equal(t, "transfer-1", resp.GetTransfer().GetTransferRef())
}