mirror of
https://github.com/c9s/bbgo.git
synced 2024-11-27 01:05:15 +00:00
120 lines
2.9 KiB
Go
120 lines
2.9 KiB
Go
|
package ftx
|
||
|
|
||
|
import (
|
||
|
"database/sql"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
|
||
|
"github.com/c9s/bbgo/pkg/datatype"
|
||
|
"github.com/c9s/bbgo/pkg/types"
|
||
|
)
|
||
|
|
||
|
func Test_messageHandler_handleMessage(t *testing.T) {
|
||
|
t.Run("handle order update", func(t *testing.T) {
|
||
|
input := []byte(`
|
||
|
{
|
||
|
"channel": "orders",
|
||
|
"type": "update",
|
||
|
"data": {
|
||
|
"id": 36379,
|
||
|
"clientId": null,
|
||
|
"market": "OXY-PERP",
|
||
|
"type": "limit",
|
||
|
"side": "sell",
|
||
|
"price": 2.7185,
|
||
|
"size": 1.0,
|
||
|
"status": "closed",
|
||
|
"filledSize": 1.0,
|
||
|
"remainingSize": 0.0,
|
||
|
"reduceOnly": false,
|
||
|
"liquidation": false,
|
||
|
"avgFillPrice": 2.7185,
|
||
|
"postOnly": false,
|
||
|
"ioc": false,
|
||
|
"createdAt": "2021-03-28T06:12:50.991447+00:00"
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
|
||
|
h := &messageHandler{StandardStream: &types.StandardStream{}}
|
||
|
i := 0
|
||
|
h.OnOrderUpdate(func(order types.Order) {
|
||
|
i++
|
||
|
assert.Equal(t, types.Order{
|
||
|
SubmitOrder: types.SubmitOrder{
|
||
|
ClientOrderID: "",
|
||
|
Symbol: "OXY-PERP",
|
||
|
Side: types.SideTypeSell,
|
||
|
Type: types.OrderTypeLimit,
|
||
|
Quantity: 1.0,
|
||
|
Price: 2.7185,
|
||
|
TimeInForce: "GTC",
|
||
|
},
|
||
|
Exchange: types.ExchangeFTX.String(),
|
||
|
OrderID: 36379,
|
||
|
Status: types.OrderStatusFilled,
|
||
|
ExecutedQuantity: 1.0,
|
||
|
CreationTime: datatype.Time(mustParseDatetime("2021-03-28T06:12:50.991447+00:00")),
|
||
|
UpdateTime: datatype.Time(mustParseDatetime("2021-03-28T06:12:50.991447+00:00")),
|
||
|
}, order)
|
||
|
})
|
||
|
h.handleMessage(input)
|
||
|
assert.Equal(t, 1, i)
|
||
|
})
|
||
|
|
||
|
t.Run("handle trade update", func(t *testing.T) {
|
||
|
input := []byte(`
|
||
|
{
|
||
|
"channel": "fills",
|
||
|
"type": "update",
|
||
|
"data": {
|
||
|
"id": 23427,
|
||
|
"market": "OXY-PERP",
|
||
|
"future": "OXY-PERP",
|
||
|
"baseCurrency": null,
|
||
|
"quoteCurrency": null,
|
||
|
"type": "order",
|
||
|
"side": "buy",
|
||
|
"price": 2.723,
|
||
|
"size": 1.0,
|
||
|
"orderId": 323789,
|
||
|
"time": "2021-03-28T06:12:34.702926+00:00",
|
||
|
"tradeId": 6276431,
|
||
|
"feeRate": 0.00056525,
|
||
|
"fee": 0.00153917575,
|
||
|
"feeCurrency": "USD",
|
||
|
"liquidity": "taker"
|
||
|
}
|
||
|
}
|
||
|
`)
|
||
|
h := &messageHandler{StandardStream: &types.StandardStream{}}
|
||
|
i := 0
|
||
|
h.OnTradeUpdate(func(trade types.Trade) {
|
||
|
i++
|
||
|
assert.Equal(t, types.Trade{
|
||
|
GID: 0,
|
||
|
ID: 6276431,
|
||
|
OrderID: 323789,
|
||
|
Exchange: types.ExchangeFTX.String(),
|
||
|
Price: 2.723,
|
||
|
Quantity: 1.0,
|
||
|
QuoteQuantity: 2.723 * 1.0,
|
||
|
Symbol: "OXY-PERP",
|
||
|
Side: types.SideTypeBuy,
|
||
|
IsBuyer: true,
|
||
|
IsMaker: false,
|
||
|
Time: datatype.Time(mustParseDatetime("2021-03-28T06:12:34.702926+00:00")),
|
||
|
Fee: 0.00153917575,
|
||
|
FeeCurrency: "USD",
|
||
|
IsMargin: false,
|
||
|
IsIsolated: false,
|
||
|
StrategyID: sql.NullString{},
|
||
|
PnL: sql.NullFloat64{},
|
||
|
}, trade)
|
||
|
})
|
||
|
h.handleMessage(input)
|
||
|
assert.Equal(t, 1, i)
|
||
|
})
|
||
|
}
|