status-im/status-go

View on GitHub
services/wallet/thirdparty/paraswap/request_price_route_test.go

Summary

Maintainability
A
0 mins
Test Coverage
package paraswap

import (
    "fmt"
    "math/big"
    "testing"

    "github.com/ethereum/go-ethereum/common"

    "github.com/stretchr/testify/assert"

    "github.com/status-im/status-go/services/wallet/bigint"
)

func TestUnmarshallPriceRoute(t *testing.T) {

    data := []byte(`{
            "blockNumber": 13015909,
            "network": 1,
            "srcToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
            "srcDecimals": 18,
            "srcAmount": "1000000000000000000",
            "destToken": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
            "destDecimals": 18,
            "destAmount": "1000000000000000000",
            "bestRoute": {
                "percent": 100,
                "swaps": [
                    {
                        "srcToken": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
                        "srcDecimals": 0,
                        "destToken": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
                        "destDecimals": 0,
                        "swapExchanges": [
                            {
                                "exchange": "UniswapV2",
                                "srcAmount": "1000000000000000000",
                                "destAmount": "1000000000000000000",
                                "percent": 100,
                                "data": {
                                    "router": "0x0000000000000000000000000000000000000000",
                                    "path": [
                                        "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                                        "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
                                    ],
                                    "factory": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
                                    "initCode": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f",
                                    "feeFactor": 10000,
                                    "pools": [
                                        {
                                            "address": "0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc",
                                            "fee": 30,
                                            "direction": false
                                        }
                                    ],
                                    "gasUSD": "13.227195"
                                }
                            }
                        ]
                    }
                ]
            },
            "others": {
                "exchange": "UniswapV2",
                "srcAmount": "1000000000000000000",
                "destAmount": "3255989380",
                "unit": "3255989380",
                "data": {
                    "router": "0x0000000000000000000000000000000000000000",
                    "path": [
                        "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
                        "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
                    ],
                    "factory": "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f",
                    "initCode": "0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f",
                    "feeFactor": 10000,
                    "pools": [
                        {
                            "address": "0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc",
                            "fee": 30,
                            "direction": false
                        }
                    ],
                    "gasUSD": "13.227195"
                }
            },
            "gasCostUSD": "11.947163",
            "gasCost": "111435",
            "side": "SELL",
            "tokenTransferProxy": "0x3e7d31751347BAacf35945074a4a4A41581B2271",
            "contractAddress": "0x485D2446711E141D2C8a94bC24BeaA5d5A110D74",
            "contractMethod": "swapOnUniswap",
            "srcUSD": "3230.3000000000",
            "destUSD": "3218.9300566052",
            "partner": "paraswap.io",
            "partnerFee": 0,
            "maxImpactReached": false,
            "hmac": "319c5cf83098a07aeebb11bed6310db51311201f"
    }`)

    responseData := []byte(fmt.Sprintf(`{"priceRoute":%s}`, string(data)))

    route := Route{
        GasCost:           &bigint.BigInt{Int: big.NewInt(111435)},
        SrcAmount:         &bigint.BigInt{Int: big.NewInt(1000000000000000000)},
        SrcTokenAddress:   common.HexToAddress("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"),
        SrcTokenDecimals:  18,
        DestAmount:        &bigint.BigInt{Int: big.NewInt(1000000000000000000)},
        DestTokenAddress:  common.HexToAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"),
        DestTokenDecimals: 18,
        Side:              SellSide,
        RawPriceRoute:     data,
    }

    receivedRoute, err := handlePriceRouteResponse(responseData)
    assert.NoError(t, err)
    assert.Equal(t, route, receivedRoute)
}

func TestForErrorOnFetchingPriceRoute(t *testing.T) {
    data := []byte(`{
        "error": "Invalid tokens"
    }`)

    _, err := handlePriceRouteResponse(data)
    assert.Error(t, err)
}