feat: notification service
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
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])
|
||||
}
|
||||
Reference in New Issue
Block a user