Files
galaxy-game/mail/internal/adapters/redisstate/keyspace_test.go
T
2026-04-26 20:34:39 +02:00

56 lines
1.4 KiB
Go

package redisstate
import (
"testing"
"time"
"github.com/alicebob/miniredis/v2"
"github.com/redis/go-redis/v9"
"github.com/stretchr/testify/require"
)
func TestKeyspaceBuildsStableKeys(t *testing.T) {
t.Parallel()
keyspace := Keyspace{}
require.Equal(t, "mail:delivery_commands", keyspace.DeliveryCommands())
require.Equal(t, "mail:stream_offsets:bWFpbDpkZWxpdmVyeV9jb21tYW5kcw", keyspace.StreamOffset("mail:delivery_commands"))
}
func TestStreamOffsetStoreRoundTrip(t *testing.T) {
t.Parallel()
server := miniredis.RunT(t)
client := redis.NewClient(&redis.Options{Addr: server.Addr()})
t.Cleanup(func() { _ = client.Close() })
store, err := NewStreamOffsetStore(client)
require.NoError(t, err)
stream := "mail:delivery_commands"
require.NoError(t, store.Save(t.Context(), stream, "1234-5"))
got, ok, err := store.Load(t.Context(), stream)
require.NoError(t, err)
require.True(t, ok)
require.Equal(t, "1234-5", got)
}
func TestUnmarshalStreamOffsetRequiresUpdatedAt(t *testing.T) {
t.Parallel()
payload, err := MarshalStreamOffset(StreamOffset{
Stream: "mail:delivery_commands",
LastProcessedEntryID: "1-0",
UpdatedAt: time.Now().UTC(),
})
require.NoError(t, err)
got, err := UnmarshalStreamOffset(payload)
require.NoError(t, err)
require.Equal(t, "1-0", got.LastProcessedEntryID)
_, err = UnmarshalStreamOffset([]byte(`{"stream":"x","last_processed_entry_id":"1"}`))
require.Error(t, err)
}