service_test.go 3.27 KB
Newer Older
1 2 3 4 5 6 7
package service_test

import (
	"fmt"
	"reflect"
	"testing"

8 9
	"github.com/ethereum/go-ethereum/log"

10 11 12 13 14 15
	"github.com/ethereum-optimism/optimism/indexer/api/service"
	"github.com/ethereum-optimism/optimism/indexer/database"
	"github.com/ethereum/go-ethereum/common"
	"github.com/stretchr/testify/require"
)

16
func assertFieldsAreSet(t *testing.T, item any) {
17
	structType := reflect.TypeOf(item)
18

19 20 21 22 23 24 25 26 27 28 29 30 31
	structVal := reflect.ValueOf(item)
	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))

	}
}
32

33 34
func TestWithdrawalResponse(t *testing.T) {
	svc := service.New(nil, nil, nil)
35
	cdh := common.HexToHash("0x2")
36 37

	withdraws := &database.L2BridgeWithdrawalsResponse{
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
		Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{
			{
				L2BridgeWithdrawal: database.L2BridgeWithdrawal{
					TransactionWithdrawalHash: common.HexToHash("0x1"),
					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"),
						},
					},
				},
			},
		},
	}

59
	response := svc.WithdrawResponse(withdraws)
60 61
	require.NotEmpty(t, response.Items)
	require.Len(t, response.Items, 1)
62
	assertFieldsAreSet(t, response.Items[0])
63
}
64

65 66 67
func TestDepositResponse(t *testing.T) {
	cdh := common.HexToHash("0x2")
	svc := service.New(nil, nil, nil)
68

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
	deposits := &database.L1BridgeDepositsResponse{
		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"),
						},
					},
				},
			},
		},
	}
89

90 91 92
	response := svc.DepositResponse(deposits)
	require.NotEmpty(t, response.Items)
	require.Len(t, response.Items, 1)
93
	assertFieldsAreSet(t, response.Items[0])
94
}
95

96
func TestQueryParams(t *testing.T) {
97

98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
	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)
			},
		},
	}
123

124 125
	v := new(service.Validator)
	svc := service.New(v, nil, log.New())
126

127 128 129 130
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			tt.test(t, svc)
		})
131 132
	}
}