Files
galaxy-game/pkg/notificationintent/publisher_test.go
T
2026-04-22 08:49:45 +02:00

45 lines
1.5 KiB
Go

package notificationintent
import (
"context"
"testing"
"github.com/alicebob/miniredis/v2"
"github.com/redis/go-redis/v9"
"github.com/stretchr/testify/require"
)
func TestPublisherPublishAppendsIntentToDefaultStream(t *testing.T) {
t.Parallel()
redisServer := miniredis.RunT(t)
redisClient := redis.NewClient(&redis.Options{Addr: redisServer.Addr()})
t.Cleanup(func() {
require.NoError(t, redisClient.Close())
})
publisher, err := NewPublisher(PublisherConfig{Client: redisClient})
require.NoError(t, err)
intent, err := NewGameTurnReadyIntent(defaultMetadata(), []string{"user-1"}, GameTurnReadyPayload{
GameID: "game-1",
GameName: "Nebula Clash",
TurnNumber: 54,
})
require.NoError(t, err)
entryID, err := publisher.Publish(context.Background(), intent)
require.NoError(t, err)
require.NotEmpty(t, entryID)
messages, err := redisClient.XRange(context.Background(), DefaultIntentsStream, "-", "+").Result()
require.NoError(t, err)
require.Len(t, messages, 1)
require.Equal(t, entryID, messages[0].ID)
require.Equal(t, NotificationTypeGameTurnReady.String(), messages[0].Values[fieldNotificationType])
require.Equal(t, ProducerGameMaster.String(), messages[0].Values[fieldProducer])
require.Equal(t, AudienceKindUser.String(), messages[0].Values[fieldAudienceKind])
require.Equal(t, `["user-1"]`, messages[0].Values[fieldRecipientUserIDs])
require.Equal(t, `{"game_id":"game-1","game_name":"Nebula Clash","turn_number":54}`, messages[0].Values[fieldPayloadJSON])
}