Commit c02dc701 authored by Ethen Pociask's avatar Ethen Pociask

[indexer.withdrawal_type_supplies] testing handler svc functions

parent ba647633
...@@ -4,8 +4,7 @@ import ( ...@@ -4,8 +4,7 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
) )
// Params ... Query params type QueryParams struct {
type Params struct {
Address common.Address Address common.Address
Limit int Limit int
Cursor string Cursor string
......
...@@ -9,13 +9,13 @@ import ( ...@@ -9,13 +9,13 @@ import (
) )
type Service interface { type Service interface {
GetDeposits(*models.Params) (*database.L1BridgeDepositsResponse, error) GetDeposits(*models.QueryParams) (*database.L1BridgeDepositsResponse, error)
DepositResponse(*database.L1BridgeDepositsResponse) models.DepositResponse DepositResponse(*database.L1BridgeDepositsResponse) models.DepositResponse
GetWithdrawals(params *models.Params) (*database.L2BridgeWithdrawalsResponse, error) GetWithdrawals(params *models.QueryParams) (*database.L2BridgeWithdrawalsResponse, error)
WithdrawResponse(*database.L2BridgeWithdrawalsResponse) models.WithdrawalResponse WithdrawResponse(*database.L2BridgeWithdrawalsResponse) models.WithdrawalResponse
GetSupplyInfo() (*models.BridgeSupplyView, error) GetSupplyInfo() (*models.BridgeSupplyView, error)
QueryParams(a, l, c string) (*models.Params, error) QueryParams(a, l, c string) (*models.QueryParams, error)
} }
type HandlerSvc struct { type HandlerSvc struct {
...@@ -32,7 +32,7 @@ func New(v *Validator, db database.BridgeTransfersView, l log.Logger) Service { ...@@ -32,7 +32,7 @@ func New(v *Validator, db database.BridgeTransfersView, l log.Logger) Service {
} }
} }
func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.Params, error) { func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.QueryParams, error) {
address, err := svc.v.ParseValidateAddress(a) address, err := svc.v.ParseValidateAddress(a)
if err != nil { if err != nil {
svc.logger.Error("invalid address param", "param", a, "err", err) svc.logger.Error("invalid address param", "param", a, "err", err)
...@@ -51,7 +51,7 @@ func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.Params, error) { ...@@ -51,7 +51,7 @@ func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.Params, error) {
return nil, err return nil, err
} }
return &models.Params{ return &models.QueryParams{
Address: address, Address: address,
Cursor: c, Cursor: c,
Limit: limit, Limit: limit,
...@@ -59,7 +59,7 @@ func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.Params, error) { ...@@ -59,7 +59,7 @@ func (svc *HandlerSvc) QueryParams(a, c, l string) (*models.Params, error) {
} }
func (svc *HandlerSvc) GetWithdrawals(params *models.Params) (*database.L2BridgeWithdrawalsResponse, error) { func (svc *HandlerSvc) GetWithdrawals(params *models.QueryParams) (*database.L2BridgeWithdrawalsResponse, error) {
withdrawals, err := svc.db.L2BridgeWithdrawalsByAddress(params.Address, params.Cursor, params.Limit) withdrawals, err := svc.db.L2BridgeWithdrawalsByAddress(params.Address, params.Cursor, params.Limit)
if err != nil { if err != nil {
svc.logger.Error("error getting withdrawals", "err", err.Error(), "address", params.Address.String()) svc.logger.Error("error getting withdrawals", "err", err.Error(), "address", params.Address.String())
...@@ -103,7 +103,7 @@ func (svc *HandlerSvc) WithdrawResponse(withdrawals *database.L2BridgeWithdrawal ...@@ -103,7 +103,7 @@ func (svc *HandlerSvc) WithdrawResponse(withdrawals *database.L2BridgeWithdrawal
} }
} }
func (svc *HandlerSvc) GetDeposits(params *models.Params) (*database.L1BridgeDepositsResponse, error) { func (svc *HandlerSvc) GetDeposits(params *models.QueryParams) (*database.L1BridgeDepositsResponse, error) {
deposits, err := svc.db.L1BridgeDepositsByAddress(params.Address, params.Cursor, params.Limit) deposits, err := svc.db.L1BridgeDepositsByAddress(params.Address, params.Cursor, params.Limit)
if err != nil { if err != nil {
svc.logger.Error("error getting deposits", "err", err.Error(), "address", params.Address.String()) svc.logger.Error("error getting deposits", "err", err.Error(), "address", params.Address.String())
......
...@@ -5,19 +5,36 @@ import ( ...@@ -5,19 +5,36 @@ import (
"reflect" "reflect"
"testing" "testing"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum-optimism/optimism/indexer/api/service" "github.com/ethereum-optimism/optimism/indexer/api/service"
"github.com/ethereum-optimism/optimism/indexer/database" "github.com/ethereum-optimism/optimism/indexer/database"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestCreateWithdrawal(t *testing.T) { func assertNotEmpty(t *testing.T, item any) {
structType := reflect.TypeOf(item)
svc := service.New(nil, nil, nil) structVal := reflect.ValueOf(item)
// (1) Create a dummy database response object fieldNum := structVal.NumField()
for i := 0; i < fieldNum; i++ {
field := structVal.Field(i)
fieldName := structType.Field(i).Name
isSet := field.IsValid() && !field.IsZero()
require.True(t, isSet, fmt.Sprintf("%s in not set", fieldName))
}
}
func TestWithdrawalResponse(t *testing.T) {
svc := service.New(nil, nil, nil)
cdh := common.HexToHash("0x2") cdh := common.HexToHash("0x2")
dbWithdrawals := &database.L2BridgeWithdrawalsResponse{
withdraws := &database.L2BridgeWithdrawalsResponse{
Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{ Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{
{ {
L2BridgeWithdrawal: database.L2BridgeWithdrawal{ L2BridgeWithdrawal: database.L2BridgeWithdrawal{
...@@ -39,28 +56,77 @@ func TestCreateWithdrawal(t *testing.T) { ...@@ -39,28 +56,77 @@ func TestCreateWithdrawal(t *testing.T) {
}, },
} }
// (2) Create and validate response object response := svc.WithdrawResponse(withdraws)
response := svc.WithdrawResponse(dbWithdrawals)
require.NotEmpty(t, response.Items) require.NotEmpty(t, response.Items)
require.Len(t, response.Items, 1) require.Len(t, response.Items, 1)
assertNotEmpty(t, response.Items[0])
}
// (3) Use reflection to check that all fields in WithdrawalItem are populated correctly func TestDepositResponse(t *testing.T) {
cdh := common.HexToHash("0x2")
svc := service.New(nil, nil, nil)
item := response.Items[0] deposits := &database.L1BridgeDepositsResponse{
structType := reflect.TypeOf(item) Deposits: []database.L1BridgeDepositWithTransactionHashes{
{
L1BridgeDeposit: database.L1BridgeDeposit{
BridgeTransfer: database.BridgeTransfer{
CrossDomainMessageHash: &cdh,
Tx: database.Transaction{
FromAddress: common.HexToAddress("0x3"),
ToAddress: common.HexToAddress("0x4"),
Timestamp: 5,
},
TokenPair: database.TokenPair{
LocalTokenAddress: common.HexToAddress("0x6"),
RemoteTokenAddress: common.HexToAddress("0x7"),
},
},
},
},
},
}
structVal := reflect.ValueOf(item) response := svc.DepositResponse(deposits)
fieldNum := structVal.NumField() require.NotEmpty(t, response.Items)
require.Len(t, response.Items, 1)
assertNotEmpty(t, response.Items[0])
}
for i := 0; i < fieldNum; i++ { func TestQueryParams(t *testing.T) {
field := structVal.Field(i)
fieldName := structType.Field(i).Name
isSet := field.IsValid() && !field.IsZero() var tests = []struct {
name string
test func(*testing.T, service.Service)
}{
{
name: "empty params",
test: func(t *testing.T, svc service.Service) {
params, err := svc.QueryParams("", "", "")
require.Error(t, err)
require.Nil(t, params)
},
},
{
name: "empty params except address",
test: func(t *testing.T, svc service.Service) {
addr := common.HexToAddress("0x420")
params, err := svc.QueryParams(addr.String(), "", "")
require.NoError(t, err)
require.NotNil(t, params)
require.Equal(t, addr, params.Address)
require.Equal(t, 100, params.Limit)
require.Equal(t, "", params.Cursor)
},
},
}
require.True(t, isSet, fmt.Sprintf("%s in not set", fieldName)) v := new(service.Validator)
svc := service.New(v, nil, log.New())
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tt.test(t, svc)
})
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment