Skip to content

Commit 490dbe6

Browse files
Use the consolidated horizon payment rather than a custom payment object.
1 parent 94625fb commit 490dbe6

File tree

4 files changed

+68
-56
lines changed

4 files changed

+68
-56
lines changed

internal/integrationtests/utils.go

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ package integrationtests
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
76
"io"
87
"io/fs"
98
"path"
109

1110
"github.com/gocarina/gocsv"
1211
"github.com/stellar/go/clients/horizonclient"
12+
"github.com/stellar/go/protocols/horizon/operations"
1313
"github.com/stellar/go/support/log"
1414

1515
"github.com/stellar/stellar-disbursement-platform-backend/internal/data"
@@ -46,28 +46,20 @@ func readDisbursementCSV(disbursementFilePath string, disbursementFileName strin
4646
return instructions, nil
4747
}
4848

49-
type PaymentHorizon struct {
50-
ReceiverAccount string `json:"to"`
51-
Amount string `json:"amount"`
52-
AssetCode string `json:"asset_code"`
53-
AssetIssuer string `json:"asset_issuer"`
54-
TransactionSuccessful bool `json:"transaction_successful"`
55-
}
56-
57-
func getTransactionOnHorizon(client horizonclient.ClientInterface, transactionID string) (*PaymentHorizon, error) {
58-
ph := &PaymentHorizon{}
49+
func getTransactionOnHorizon(client horizonclient.ClientInterface, transactionID string) (*operations.Payment, error) {
5950
records, err := client.Payments(horizonclient.OperationRequest{ForTransaction: transactionID})
6051
if err != nil {
61-
return nil, fmt.Errorf("error checking payment in horizon: %w", err)
52+
return nil, fmt.Errorf("checking payment in horizon: %w", err)
6253
}
63-
paymentRecord, err := json.Marshal(records.Embedded.Records[0])
64-
if err != nil {
65-
return nil, fmt.Errorf("error marshaling payment record: %w", err)
54+
55+
if len(records.Embedded.Records) == 0 {
56+
return nil, fmt.Errorf("no payment records found in horizon for transaction %s", transactionID)
6657
}
67-
err = json.Unmarshal(paymentRecord, ph)
68-
if err != nil {
69-
return nil, fmt.Errorf("error unmarshling payment record: %w", err)
58+
59+
hPayment, ok := records.Embedded.Records[0].(operations.Payment)
60+
if !ok {
61+
return nil, fmt.Errorf("casting payment record to operations.Payment")
7062
}
7163

72-
return ph, nil
64+
return &hPayment, nil
7365
}

internal/integrationtests/utils_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func Test_getTransactionInHorizon(t *testing.T) {
8383
Once()
8484

8585
ph, err := getTransactionOnHorizon(mockHorizonClient, mockTransactionID)
86-
require.EqualError(t, err, "error checking payment in horizon: horizon error: \"Resource Missing\" - check horizon.Error.Problem for more information")
86+
require.EqualError(t, err, "checking payment in horizon: horizon error: \"Resource Missing\" - check horizon.Error.Problem for more information")
8787
assert.Empty(t, ph)
8888

8989
mockHorizonClient.AssertExpectations(t)
@@ -142,9 +142,10 @@ func Test_getTransactionInHorizon(t *testing.T) {
142142

143143
ph, err := getTransactionOnHorizon(mockHorizonClient, mockTransactionID)
144144
require.NoError(t, err)
145-
assert.Equal(t, "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7", ph.ReceiverAccount)
146-
assert.Equal(t, "USDC", ph.AssetCode)
147-
assert.Equal(t, "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB", ph.AssetIssuer)
145+
assert.Equal(t, "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7", ph.To)
146+
assert.Equal(t, "USDC", ph.Asset.Code)
147+
assert.Equal(t, "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB", ph.Asset.Issuer)
148+
assert.Equal(t, "credit_alphanum4", ph.Asset.Type)
148149
assert.Equal(t, "100.0000000", ph.Amount)
149150
assert.Equal(t, true, ph.TransactionSuccessful)
150151

internal/integrationtests/validations.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import (
44
"context"
55
"fmt"
66

7+
"github.com/stellar/go/protocols/horizon/operations"
8+
"github.com/stellar/go/support/log"
9+
710
"github.com/stellar/stellar-disbursement-platform-backend/db"
811
"github.com/stellar/stellar-disbursement-platform-backend/internal/data"
912
)
@@ -67,7 +70,6 @@ func validateExpectationsAfterStartDisbursement(ctx context.Context, disbursemen
6770
}
6871

6972
for _, receiver := range receivers {
70-
7173
// Validate receiver_wallet status
7274
expectedStatusByRegistrationContactType := map[data.RegistrationContactType]data.ReceiversWalletStatus{
7375
data.RegistrationContactTypePhone: data.ReadyReceiversWalletStatus,
@@ -101,20 +103,26 @@ func validateExpectationsAfterReceiverRegistration(ctx context.Context, models *
101103
return nil
102104
}
103105

104-
func validateStellarTransaction(paymentHorizon *PaymentHorizon, receiverAccount, disbursedAssetCode, disbursedAssetIssuer, amount string) error {
105-
if !paymentHorizon.TransactionSuccessful {
106+
func validateStellarTransaction(hPayment *operations.Payment, receiverAccount, disbursedAssetCode, disbursedAssetIssuer, amount string) error {
107+
if !hPayment.TransactionSuccessful {
106108
return fmt.Errorf("transaction was not successful on horizon network")
107109
}
108110

109-
if paymentHorizon.ReceiverAccount != receiverAccount {
111+
if hPayment.To != receiverAccount {
110112
return fmt.Errorf("transaction sent to wrong receiver account")
111113
}
112114

113-
if paymentHorizon.Amount != amount {
115+
if hPayment.Amount != amount {
114116
return fmt.Errorf("transaction with wrong amount")
115117
}
116118

117-
if paymentHorizon.AssetCode != disbursedAssetCode || paymentHorizon.AssetIssuer != disbursedAssetIssuer {
119+
dataAsset := data.Asset{
120+
Code: disbursedAssetCode,
121+
Issuer: disbursedAssetIssuer,
122+
}
123+
if !dataAsset.EqualsHorizonAsset(hPayment.Asset) {
124+
log.Errorf("disbursed.asset: %s:%s", disbursedAssetCode, disbursedAssetIssuer)
125+
log.Errorf("hAsset: %+v", hPayment.Asset)
118126
return fmt.Errorf("transaction with wrong disbursed asset")
119127
}
120128

internal/integrationtests/validations_test.go

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"testing"
66

7+
"github.com/stellar/go/protocols/horizon/base"
8+
"github.com/stellar/go/protocols/horizon/operations"
79
"github.com/stretchr/testify/require"
810

911
"github.com/stellar/stellar-disbursement-platform-backend/db"
@@ -266,58 +268,67 @@ func Test_validateStellarTransaction(t *testing.T) {
266268
mockAmount := "0.1"
267269

268270
t.Run("error transaction not successful", func(t *testing.T) {
269-
err := validateStellarTransaction(&PaymentHorizon{
270-
TransactionSuccessful: false,
271+
err := validateStellarTransaction(&operations.Payment{
272+
Base: operations.Base{TransactionSuccessful: false},
271273
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
272274
require.EqualError(t, err, "transaction was not successful on horizon network")
273275
})
274276

275277
t.Run("error wrong receiver account", func(t *testing.T) {
276-
err := validateStellarTransaction(&PaymentHorizon{
277-
TransactionSuccessful: true,
278-
ReceiverAccount: "invalidReceiver",
278+
err := validateStellarTransaction(&operations.Payment{
279+
Base: operations.Base{TransactionSuccessful: true},
280+
To: "invalidReceiver",
279281
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
280282
require.EqualError(t, err, "transaction sent to wrong receiver account")
281283
})
282284

283285
t.Run("error wrong amount", func(t *testing.T) {
284-
err := validateStellarTransaction(&PaymentHorizon{
285-
TransactionSuccessful: true,
286-
ReceiverAccount: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
287-
Amount: "20",
286+
err := validateStellarTransaction(&operations.Payment{
287+
Base: operations.Base{TransactionSuccessful: true},
288+
To: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
289+
Amount: "20",
288290
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
289291
require.EqualError(t, err, "transaction with wrong amount")
290292
})
291293

292294
t.Run("error wrong asset code", func(t *testing.T) {
293-
err := validateStellarTransaction(&PaymentHorizon{
294-
TransactionSuccessful: true,
295-
ReceiverAccount: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
296-
Amount: "0.1",
297-
AssetCode: "invalidCode",
298-
AssetIssuer: "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB",
295+
err := validateStellarTransaction(&operations.Payment{
296+
Base: operations.Base{TransactionSuccessful: true},
297+
To: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
298+
Amount: "0.1",
299+
Asset: base.Asset{
300+
Type: "credit_alphanum12",
301+
Code: "invalidCode",
302+
Issuer: "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB",
303+
},
299304
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
300305
require.EqualError(t, err, "transaction with wrong disbursed asset")
301306
})
302307

303308
t.Run("error wrong asset issuer", func(t *testing.T) {
304-
err := validateStellarTransaction(&PaymentHorizon{
305-
TransactionSuccessful: true,
306-
ReceiverAccount: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
307-
Amount: "0.1",
308-
AssetCode: "USDC",
309-
AssetIssuer: "invalidIssuer",
309+
err := validateStellarTransaction(&operations.Payment{
310+
Base: operations.Base{TransactionSuccessful: true},
311+
To: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
312+
Amount: "0.1",
313+
Asset: base.Asset{
314+
Type: "credit_alphanum4",
315+
Code: "USDC",
316+
Issuer: "invalidIssuer",
317+
},
310318
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
311319
require.EqualError(t, err, "transaction with wrong disbursed asset")
312320
})
313321

314322
t.Run("successful validation", func(t *testing.T) {
315-
err := validateStellarTransaction(&PaymentHorizon{
316-
TransactionSuccessful: true,
317-
ReceiverAccount: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
318-
Amount: "0.1",
319-
AssetCode: "USDC",
320-
AssetIssuer: "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB",
323+
err := validateStellarTransaction(&operations.Payment{
324+
Base: operations.Base{TransactionSuccessful: true},
325+
To: "GD44L3Q6NYRFPVOX4CJUUV63QEOOU3R5JNQJBLR6WWXFWYHEGK2YVBQ7",
326+
Amount: "0.1",
327+
Asset: base.Asset{
328+
Type: "credit_alphanum4",
329+
Code: "USDC",
330+
Issuer: "GBZF7AS3TBASAL5RQ7ECJODFWFLBDCKJK5SMPUCO5R36CJUIZRWQJTGB",
331+
},
321332
}, mockReceiverAccount, mockassetCode, mockassetIssuer, mockAmount)
322333
require.NoError(t, err)
323334
})

0 commit comments

Comments
 (0)