Files
streamctl/pkg/streamcontrol/twitch/chat_handler_irc_test.go
Dmitrii Okunev 1004082fe4
Some checks failed
rolling-release / build (push) Has been cancelled
rolling-release / rolling-release (push) Has been cancelled
Multiple updates
2025-07-12 23:11:42 +01:00

92 lines
2.1 KiB
Go

package twitch
import (
"context"
"sync"
"testing"
"time"
"github.com/adeithe/go-twitch/irc"
"github.com/stretchr/testify/require"
"github.com/xaionaro-go/streamctl/pkg/streamcontrol"
)
type chatClientIRCMock struct {
join func(channelIDs ...string) error
onShardMessage func(func(shard int, msg irc.ChatMessage))
close func(ctx context.Context) error
}
var _ ChatClientIRC = (*chatClientIRCMock)(nil)
func (c *chatClientIRCMock) Join(channelIDs ...string) error {
return c.join(channelIDs...)
}
func (c *chatClientIRCMock) OnShardMessage(callback func(shard int, msg irc.ChatMessage)) {
c.onShardMessage(callback)
}
func (c *chatClientIRCMock) Close(ctx context.Context) error {
return c.close(ctx)
}
func TestChatHandlerIRC(t *testing.T) {
ctx := context.TODO()
const channelID = "test-channel-id"
var (
joinedChannelIDs []string
callback func(shard int, msg irc.ChatMessage)
closeCount = 0
)
h, err := newChatHandlerIRC(ctx, &chatClientIRCMock{
join: func(channelIDs ...string) error {
joinedChannelIDs = append(joinedChannelIDs, channelIDs...)
return nil
},
onShardMessage: func(_callback func(shard int, msg irc.ChatMessage)) {
callback = _callback
},
close: func(ctx context.Context) error {
closeCount++
return nil
},
}, channelID)
require.NoError(t, err)
expectedEvent := streamcontrol.ChatMessage{
UserID: "user-id",
Username: "user-id",
MessageID: "message-id",
Message: "some\nmulti line\n message",
}
messagesCount := 0
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
for ev := range h.messagesOutChan {
ev.CreatedAt = time.Time{}
require.Equal(t, expectedEvent, ev)
messagesCount++
}
}()
require.Equal(t, []string{channelID}, joinedChannelIDs)
callback(0, irc.ChatMessage{
Sender: irc.ChatSender{
Username: string(expectedEvent.UserID),
},
ID: string(expectedEvent.MessageID),
Channel: channelID,
Text: expectedEvent.Message,
CreatedAt: time.Now(),
})
require.Equal(t, 0, closeCount)
h.Close(ctx)
require.Equal(t, 1, closeCount)
wg.Wait()
}