ws-go-server/clients/kraken_test.go
2025-05-18 23:54:04 +02:00

102 lines
2 KiB
Go

package clients
import (
"btclock/broker"
"btclock/models"
"testing"
"github.com/stretchr/testify/assert"
)
func TestKrakenClient_HandleTickerMessage(t *testing.T) {
tests := []struct {
name string
input map[string]any
expectedTicker models.Ticker
}{
{
name: "valid ticker message",
input: map[string]any{
"data": []any{
map[string]any{
"symbol": "BTC/USD",
"last": 50000.0,
"bid": 49900.0,
"ask": 50100.0,
},
},
},
expectedTicker: models.Ticker{
Symbol: "BTC/USD",
Last: 50000.0,
Bid: 49900.0,
Ask: 50100.0,
},
},
{
name: "invalid data format",
input: map[string]any{
"data": "invalid",
},
expectedTicker: models.Ticker{},
},
{
name: "empty data array",
input: map[string]any{
"data": []any{},
},
expectedTicker: models.Ticker{},
},
{
name: "missing required fields",
input: map[string]any{
"data": []any{
map[string]any{
"symbol": "BTC/USD",
// missing last, bid, ask
},
},
},
expectedTicker: models.Ticker{},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := handleTickerMessage(tt.input)
assert.Equal(t, tt.expectedTicker, result)
})
}
}
func TestKrakenClient_Init(t *testing.T) {
broker := broker.NewEventBroker()
client := NewKrakenClient()
err := client.Init(broker)
assert.NoError(t, err)
assert.Equal(t, broker, client.broker)
}
func TestKrakenClient_ID(t *testing.T) {
client := NewKrakenClient()
assert.Equal(t, "kraken", client.ID())
}
func TestKrakenTickerEvent_Name(t *testing.T) {
event := KrakenTickerEvent{
Symbol: "BTC/USD",
Last: 50000.0,
}
assert.Equal(t, "ticker", event.Name())
}
func TestKrakenTickerEvent_Payload(t *testing.T) {
event := KrakenTickerEvent{
Symbol: "BTC/USD",
Last: 50000.0,
}
payload := event.Payload().(map[string]interface{})
assert.Equal(t, "BTC/USD", payload["symbol"])
assert.Equal(t, 50000.0, payload["last"])
}