45 lines
1.5 KiB
Go
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])
|
|
}
|