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