api_test.go 4.11 KB
Newer Older
1
package api
2 3

import (
Hamdi Allam's avatar
Hamdi Allam committed
4
	"math/big"
5 6 7 8
	"net/http"
	"net/http/httptest"
	"testing"

Will Cory's avatar
Will Cory committed
9 10
	"github.com/ethereum-optimism/optimism/indexer/database"
	"github.com/ethereum/go-ethereum/common"
Mark Tyneway's avatar
Mark Tyneway committed
11
	"github.com/google/uuid"
12 13 14
	"github.com/stretchr/testify/assert"
)

Will Cory's avatar
Will Cory committed
15 16
// MockBridgeView mocks the BridgeView interface
type MockBridgeView struct{}
17

Mark Tyneway's avatar
Mark Tyneway committed
18 19 20 21 22
const (
	guid1 = "8408b6d2-7c90-4cfc-8604-b2204116cb6a"
	guid2 = "8408b6d2-7c90-4cfc-8604-b2204116cb6b"
)

Will Cory's avatar
Will Cory committed
23
// DepositsByAddress mocks returning deposits by an address
Hamdi Allam's avatar
Hamdi Allam committed
24 25
func (mbv *MockBridgeView) DepositsByAddress(address common.Address) ([]*database.DepositWithTransactionHashes, error) {
	return []*database.DepositWithTransactionHashes{
26
		{
Will Cory's avatar
Will Cory committed
27
			Deposit: database.Deposit{
Mark Tyneway's avatar
Mark Tyneway committed
28
				GUID:                 uuid.MustParse(guid1),
Hamdi Allam's avatar
Hamdi Allam committed
29
				InitiatedL1EventGUID: uuid.MustParse(guid2),
Will Cory's avatar
Will Cory committed
30 31 32 33
				Tx:                   database.Transaction{},
				TokenPair:            database.TokenPair{},
			},
			L1TransactionHash: common.HexToHash("0x123"),
34
		},
Will Cory's avatar
Will Cory committed
35 36
	}, nil
}
37

Hamdi Allam's avatar
Hamdi Allam committed
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
// DepositsByAddress mocks returning deposits by an address
func (mbv *MockBridgeView) DepositByMessageNonce(nonce *big.Int) (*database.Deposit, error) {
	return &database.Deposit{
		GUID:                 uuid.MustParse(guid1),
		InitiatedL1EventGUID: uuid.MustParse(guid2),
		Tx:                   database.Transaction{},
		TokenPair:            database.TokenPair{},
	}, nil
}

// LatestDepositMessageNonce mocks returning the latest cross domain message nonce for a deposit
func (mbv *MockBridgeView) LatestDepositMessageNonce() (*big.Int, error) {
	return big.NewInt(0), nil
}

Will Cory's avatar
Will Cory committed
53 54 55
// WithdrawalsByAddress mocks returning withdrawals by an address
func (mbv *MockBridgeView) WithdrawalsByAddress(address common.Address) ([]*database.WithdrawalWithTransactionHashes, error) {
	return []*database.WithdrawalWithTransactionHashes{
56
		{
Will Cory's avatar
Will Cory committed
57
			Withdrawal: database.Withdrawal{
Mark Tyneway's avatar
Mark Tyneway committed
58
				GUID:                 uuid.MustParse(guid2),
Hamdi Allam's avatar
Hamdi Allam committed
59
				InitiatedL2EventGUID: uuid.MustParse(guid1),
Will Cory's avatar
Will Cory committed
60 61 62 63 64
				WithdrawalHash:       common.HexToHash("0x456"),
				Tx:                   database.Transaction{},
				TokenPair:            database.TokenPair{},
			},
			L2TransactionHash: common.HexToHash("0x789"),
65
		},
Will Cory's avatar
Will Cory committed
66 67
	}, nil
}
68

Hamdi Allam's avatar
Hamdi Allam committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
// WithdrawalsByMessageNonce mocks returning withdrawals by a withdrawal hash
func (mbv *MockBridgeView) WithdrawalByMessageNonce(nonce *big.Int) (*database.Withdrawal, error) {
	return &database.Withdrawal{
		GUID:                 uuid.MustParse(guid2),
		InitiatedL2EventGUID: uuid.MustParse(guid1),
		WithdrawalHash:       common.HexToHash("0x456"),
		Tx:                   database.Transaction{},
		TokenPair:            database.TokenPair{},
	}, nil
}

// WithdrawalsByHash mocks returning withdrawals by a withdrawal hash
func (mbv *MockBridgeView) WithdrawalByHash(address common.Hash) (*database.Withdrawal, error) {
	return &database.Withdrawal{
		GUID:                 uuid.MustParse(guid2),
		InitiatedL2EventGUID: uuid.MustParse(guid1),
		WithdrawalHash:       common.HexToHash("0x456"),
		Tx:                   database.Transaction{},
		TokenPair:            database.TokenPair{},
	}, nil
}

// LatestWithdrawalMessageNonce mocks returning the latest cross domain message nonce for a withdrawal
func (mbv *MockBridgeView) LatestWithdrawalMessageNonce() (*big.Int, error) {
	return big.NewInt(0), nil
}

96 97 98 99 100 101 102 103 104 105 106
func TestHealthz(t *testing.T) {
	api := NewApi(&MockBridgeView{})
	request, err := http.NewRequest("GET", "/healthz", nil)
	assert.Nil(t, err)

	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)

	assert.Equal(t, http.StatusOK, responseRecorder.Code)
}

Will Cory's avatar
Will Cory committed
107 108 109 110
func TestDepositsHandler(t *testing.T) {
	api := NewApi(&MockBridgeView{})
	request, err := http.NewRequest("GET", "/api/v0/deposits/0x123", nil)
	assert.Nil(t, err)
111

Will Cory's avatar
Will Cory committed
112 113
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
114

Will Cory's avatar
Will Cory committed
115 116
	assert.Equal(t, http.StatusOK, responseRecorder.Code)
}
117

Will Cory's avatar
Will Cory committed
118 119 120 121
func TestWithdrawalsHandler(t *testing.T) {
	api := NewApi(&MockBridgeView{})
	request, err := http.NewRequest("GET", "/api/v0/withdrawals/0x123", nil)
	assert.Nil(t, err)
122

Will Cory's avatar
Will Cory committed
123 124
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
125

Will Cory's avatar
Will Cory committed
126
	assert.Equal(t, http.StatusOK, responseRecorder.Code)
127
}