Skip to content

Commit b3d6389

Browse files
committed
fix: remove bridge minimum validation from recommended pegout
1 parent 6e21cc0 commit b3d6389

File tree

4 files changed

+30
-23
lines changed

4 files changed

+30
-23
lines changed

internal/adapters/entrypoints/rest/handlers/recommended_pegout.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ package handlers
33
import (
44
"context"
55
"errors"
6+
"math/big"
7+
"net/http"
8+
69
"github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/rest"
710
"github.com/rsksmart/liquidity-provider-server/internal/entities"
811
"github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain"
912
"github.com/rsksmart/liquidity-provider-server/internal/entities/liquidity_provider"
1013
"github.com/rsksmart/liquidity-provider-server/internal/usecases"
1114
"github.com/rsksmart/liquidity-provider-server/pkg"
12-
"math/big"
13-
"net/http"
1415
)
1516

1617
type RecommendedPegoutUseCase interface {
@@ -53,7 +54,6 @@ func NewRecommendedPegoutHandler(useCase RecommendedPegoutUseCase) http.HandlerF
5354
result, err := useCase.Run(r.Context(), entities.NewBigWei(parsedAmount), parsedDestinationType)
5455

5556
if errors.Is(err, usecases.NoLiquidityError) ||
56-
errors.Is(err, usecases.TxBelowMinimumError) ||
5757
errors.Is(err, liquidity_provider.AmountOutOfRangeError) {
5858
jsonErr := rest.NewErrorResponse(err.Error(), true)
5959
rest.JsonErrorResponse(w, http.StatusBadRequest, jsonErr)

internal/adapters/entrypoints/rest/handlers/recommended_pegout_test.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package handlers_test
22

33
import (
4+
"net/http"
5+
"net/url"
6+
"testing"
7+
48
"github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/rest/handlers"
59
"github.com/rsksmart/liquidity-provider-server/internal/entities"
610
"github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain"
@@ -9,9 +13,6 @@ import (
913
"github.com/rsksmart/liquidity-provider-server/test/mocks"
1014
"github.com/stretchr/testify/assert"
1115
"github.com/stretchr/testify/mock"
12-
"net/http"
13-
"net/url"
14-
"testing"
1516
)
1617

1718
func TestNewRecommendedPegoutHandler(t *testing.T) {
@@ -59,12 +60,6 @@ func TestNewRecommendedPegoutHandler(t *testing.T) {
5960
handler := handlers.NewRecommendedPegoutHandler(useCase)
6061
assert.HTTPStatusCode(t, handler, http.MethodGet, path, queryFull, http.StatusBadRequest)
6162
})
62-
t.Run("should return 400 if the recommended amount is below the bridge minimum", func(t *testing.T) {
63-
useCase := new(mocks.RecommendedPegoutUseCaseMock)
64-
useCase.EXPECT().Run(mock.Anything, mock.Anything, mock.Anything).Return(usecases.RecommendedOperationResult{}, usecases.TxBelowMinimumError)
65-
handler := handlers.NewRecommendedPegoutHandler(useCase)
66-
assert.HTTPStatusCode(t, handler, http.MethodGet, path, queryFull, http.StatusBadRequest)
67-
})
6863
t.Run("should return 500 for unkown errors", func(t *testing.T) {
6964
useCase := new(mocks.RecommendedPegoutUseCaseMock)
7065
useCase.EXPECT().Run(mock.Anything, mock.Anything, mock.Anything).Return(usecases.RecommendedOperationResult{}, assert.AnError)

internal/usecases/pegout/recommended_pegout.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package pegout
33
import (
44
"context"
55
"fmt"
6+
"math/big"
7+
68
"github.com/rsksmart/liquidity-provider-server/internal/entities"
79
"github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain"
810
"github.com/rsksmart/liquidity-provider-server/internal/entities/liquidity_provider"
911
"github.com/rsksmart/liquidity-provider-server/internal/entities/utils"
1012
"github.com/rsksmart/liquidity-provider-server/internal/usecases"
11-
"math/big"
1213
)
1314

1415
type RecommendedPegoutUseCase struct {
@@ -196,9 +197,5 @@ func (useCase *RecommendedPegoutUseCase) validateRecommendedValue(
196197
return usecases.WrapUseCaseError(usecases.RecommendedPegoutId, usecases.NoLiquidityError)
197198
}
198199

199-
if err = usecases.ValidateMinLockValue(usecases.RecommendedPegoutId, useCase.contracts.Bridge, entities.NewBigWei(result)); err != nil {
200-
err = fmt.Errorf("recommended amount %s is below the minimum lock value: %w", entities.NewBigWei(result).String(), err)
201-
return err
202-
}
203200
return nil
204201
}

internal/usecases/pegout/recommended_pegout_test.go

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package pegout_test
22

33
import (
44
"context"
5+
"testing"
6+
57
"github.com/rsksmart/liquidity-provider-server/internal/entities"
68
"github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain"
79
"github.com/rsksmart/liquidity-provider-server/internal/entities/liquidity_provider"
@@ -13,7 +15,6 @@ import (
1315
"github.com/stretchr/testify/assert"
1416
"github.com/stretchr/testify/mock"
1517
"github.com/stretchr/testify/require"
16-
"testing"
1718
)
1819

1920
// nolint:funlen
@@ -105,15 +106,29 @@ func TestRecommendedPegoutUseCase_Run(t *testing.T) {
105106
require.ErrorIs(t, err, usecases.NoLiquidityError)
106107
assert.Empty(t, result)
107108
})
108-
t.Run("should validate recommended amount is over bridge minimum", func(t *testing.T) {
109+
t.Run("should succeed when recommended amount is below bridge minimum", func(t *testing.T) {
109110
btc.On("GetZeroAddress", mock.Anything).Return(blockchain.BitcoinTestnetP2PKHZeroAddress, nil).Once()
110111
highMinimumBridge := new(mocks.BridgeMock)
111112
highMinimumBridge.On("GetMinimumLockTxValue").Return(new(entities.Wei).Add(entities.NewWei(1), createdQuote.PegoutQuote.Total()), nil)
112-
contracts.Bridge = highMinimumBridge
113-
useCase := pegout.NewRecommendedPegoutUseCase(lp, contracts, rpc, btcWallet, utils.Scale, test.AnyRskAddress)
113+
modifiedContracts := blockchain.RskContracts{PegOut: pegoutContract, Bridge: highMinimumBridge}
114+
useCase := pegout.NewRecommendedPegoutUseCase(lp, modifiedContracts, rpc, btcWallet, utils.Scale, test.AnyRskAddress)
114115
result, err = useCase.Run(context.Background(), createdQuote.PegoutQuote.Total(), blockchain.BtcAddressTypeP2PKH)
115-
require.ErrorIs(t, err, usecases.TxBelowMinimumError)
116-
assert.Empty(t, result)
116+
// Should succeed despite being below bridge minimum
117+
require.NoError(t, err)
118+
assert.NotEmpty(t, result)
119+
assert.Equal(t, createdQuote.PegoutQuote.Value, result.RecommendedQuoteValue)
120+
})
121+
t.Run("should succeed when recommended amount equals bridge minimum", func(t *testing.T) {
122+
btc.On("GetZeroAddress", mock.Anything).Return(blockchain.BitcoinTestnetP2PKHZeroAddress, nil).Once()
123+
// Set bridge minimum equal to the recommended amount
124+
equalMinimumBridge := new(mocks.BridgeMock)
125+
equalMinimumBridge.On("GetMinimumLockTxValue").Return(createdQuote.PegoutQuote.Total(), nil)
126+
modifiedContracts := blockchain.RskContracts{PegOut: pegoutContract, Bridge: equalMinimumBridge}
127+
useCase := pegout.NewRecommendedPegoutUseCase(lp, modifiedContracts, rpc, btcWallet, utils.Scale, test.AnyRskAddress)
128+
result, err = useCase.Run(context.Background(), createdQuote.PegoutQuote.Total(), blockchain.BtcAddressTypeP2PKH)
129+
require.NoError(t, err)
130+
assert.NotEmpty(t, result)
131+
assert.Equal(t, createdQuote.PegoutQuote.Value, result.RecommendedQuoteValue)
117132
})
118133
}
119134

0 commit comments

Comments
 (0)