-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathcrypto_test.go
More file actions
122 lines (102 loc) · 3.54 KB
/
crypto_test.go
File metadata and controls
122 lines (102 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
96
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
package provider
import (
"context"
"testing"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/ojo-network/price-feeder/oracle/types"
"github.com/rs/zerolog"
"github.com/stretchr/testify/require"
)
func TestCryptoProvider_GetTickerPrices(t *testing.T) {
p, err := NewCryptoProvider(
context.TODO(),
zerolog.Nop(),
Endpoint{},
types.CurrencyPair{Base: "ATOM", Quote: "USDT"},
)
require.NoError(t, err)
t.Run("valid_request_single_ticker", func(t *testing.T) {
lastPrice := sdk.MustNewDecFromStr("34.69000000")
volume := sdk.MustNewDecFromStr("2396974.02000000")
tickerMap := map[string]types.TickerPrice{}
tickerMap["ATOM_USDT"] = types.TickerPrice{
Price: lastPrice,
Volume: volume,
}
p.tickers = tickerMap
prices, err := p.GetTickerPrices(types.CurrencyPair{Base: "ATOM", Quote: "USDT"})
require.NoError(t, err)
require.Len(t, prices, 1)
require.Equal(t, lastPrice, prices["ATOMUSDT"].Price)
require.Equal(t, volume, prices["ATOMUSDT"].Volume)
})
t.Run("valid_request_multi_ticker", func(t *testing.T) {
lastPriceAtom := sdk.MustNewDecFromStr("34.69000000")
lastPriceLuna := sdk.MustNewDecFromStr("41.35000000")
volume := sdk.MustNewDecFromStr("2396974.02000000")
tickerMap := map[string]types.TickerPrice{}
tickerMap["ATOM_USDT"] = types.TickerPrice{
Price: lastPriceAtom,
Volume: volume,
}
tickerMap["LUNA_USDT"] = types.TickerPrice{
Price: lastPriceLuna,
Volume: volume,
}
p.tickers = tickerMap
prices, err := p.GetTickerPrices(
types.CurrencyPair{Base: "ATOM", Quote: "USDT"},
types.CurrencyPair{Base: "LUNA", Quote: "USDT"},
)
require.NoError(t, err)
require.Len(t, prices, 2)
require.Equal(t, lastPriceAtom, prices["ATOMUSDT"].Price)
require.Equal(t, volume, prices["ATOMUSDT"].Volume)
require.Equal(t, lastPriceLuna, prices["LUNAUSDT"].Price)
require.Equal(t, volume, prices["LUNAUSDT"].Volume)
})
t.Run("invalid_request_invalid_ticker", func(t *testing.T) {
prices, err := p.GetTickerPrices(types.CurrencyPair{Base: "FOO", Quote: "BAR"})
require.Error(t, err)
require.Equal(t, "crypto has no ticker data for requested pairs: [FOOBAR]", err.Error())
require.Nil(t, prices)
})
}
func TestCryptoProvider_GetCandlePrices(t *testing.T) {
p, err := NewCryptoProvider(
context.TODO(),
zerolog.Nop(),
Endpoint{},
types.CurrencyPair{Base: "ATOM", Quote: "USDT"},
)
require.NoError(t, err)
t.Run("valid_request_single_candle", func(t *testing.T) {
price := "34.689998626708984000"
volume := "2396974.000000000000000000"
timeStamp := int64(1000000)
candle := CryptoCandle{
Volume: volume,
Close: price,
Timestamp: timeStamp,
}
p.setCandlePair("ATOM_USDT", candle)
prices, err := p.GetCandlePrices(types.CurrencyPair{Base: "ATOM", Quote: "USDT"})
require.NoError(t, err)
require.Len(t, prices, 1)
priceDec, _ := sdk.NewDecFromStr(price)
volumeDec, _ := sdk.NewDecFromStr(volume)
require.Equal(t, priceDec, prices["ATOMUSDT"][0].Price)
require.Equal(t, volumeDec, prices["ATOMUSDT"][0].Volume)
require.Equal(t, timeStamp*1000, prices["ATOMUSDT"][0].TimeStamp)
})
t.Run("invalid_request_invalid_candle", func(t *testing.T) {
prices, err := p.GetCandlePrices(types.CurrencyPair{Base: "FOO", Quote: "BAR"})
require.EqualError(t, err, "crypto has no candle data for requested pairs: [FOOBAR]")
require.Nil(t, prices)
})
}
func TestCryptoCurrencyPairToCryptoPair(t *testing.T) {
cp := types.CurrencyPair{Base: "ATOM", Quote: "USDT"}
cryptoSymbol := currencyPairToCryptoPair(cp)
require.Equal(t, cryptoSymbol, "ATOM_USDT")
}