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"]) }