118 lines
3.7 KiB
Go
118 lines
3.7 KiB
Go
package redisstate
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"galaxy/mail/internal/domain/common"
|
|
deliverydomain "galaxy/mail/internal/domain/delivery"
|
|
"galaxy/mail/internal/domain/idempotency"
|
|
"galaxy/mail/internal/service/acceptauthdelivery"
|
|
|
|
"github.com/alicebob/miniredis/v2"
|
|
"github.com/redis/go-redis/v9"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestAcceptanceStoreCreateAndReadQueuedDelivery(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
server := miniredis.RunT(t)
|
|
client := redis.NewClient(&redis.Options{Addr: server.Addr()})
|
|
t.Cleanup(func() { require.NoError(t, client.Close()) })
|
|
|
|
store, err := NewAcceptanceStore(client)
|
|
require.NoError(t, err)
|
|
|
|
record := validDelivery(t)
|
|
record.Source = deliverydomain.SourceAuthSession
|
|
record.ResendParentDeliveryID = ""
|
|
record.Status = deliverydomain.StatusQueued
|
|
record.AttemptCount = 1
|
|
record.LastAttemptStatus = ""
|
|
record.ProviderSummary = ""
|
|
record.LocaleFallbackUsed = false
|
|
record.UpdatedAt = record.CreatedAt
|
|
record.SentAt = nil
|
|
require.NoError(t, record.Validate())
|
|
|
|
input := acceptauthdelivery.CreateAcceptanceInput{
|
|
Delivery: record,
|
|
FirstAttempt: ptr(validScheduledAttempt(t, record.DeliveryID)),
|
|
Idempotency: validIdempotencyRecord(t, record.Source, record.DeliveryID, record.IdempotencyKey),
|
|
}
|
|
|
|
require.NoError(t, store.CreateAcceptance(context.Background(), input))
|
|
|
|
storedDelivery, found, err := store.GetDelivery(context.Background(), record.DeliveryID)
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.Equal(t, record, storedDelivery)
|
|
|
|
storedIdempotency, found, err := store.GetIdempotency(context.Background(), record.Source, record.IdempotencyKey)
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.Equal(t, input.Idempotency, storedIdempotency)
|
|
}
|
|
|
|
func TestAcceptanceStoreCreateAndReadSuppressedDelivery(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
server := miniredis.RunT(t)
|
|
client := redis.NewClient(&redis.Options{Addr: server.Addr()})
|
|
t.Cleanup(func() { require.NoError(t, client.Close()) })
|
|
|
|
store, err := NewAcceptanceStore(client)
|
|
require.NoError(t, err)
|
|
|
|
record := validDelivery(t)
|
|
record.Source = deliverydomain.SourceAuthSession
|
|
record.ResendParentDeliveryID = ""
|
|
record.Status = deliverydomain.StatusSuppressed
|
|
record.AttemptCount = 0
|
|
record.LastAttemptStatus = ""
|
|
record.ProviderSummary = ""
|
|
record.LocaleFallbackUsed = false
|
|
record.UpdatedAt = record.CreatedAt.Add(time.Minute)
|
|
record.SentAt = nil
|
|
record.SuppressedAt = ptr(record.UpdatedAt)
|
|
require.NoError(t, record.Validate())
|
|
|
|
input := acceptauthdelivery.CreateAcceptanceInput{
|
|
Delivery: record,
|
|
Idempotency: validIdempotencyRecord(t, record.Source, record.DeliveryID, record.IdempotencyKey),
|
|
}
|
|
|
|
require.NoError(t, store.CreateAcceptance(context.Background(), input))
|
|
|
|
storedDelivery, found, err := store.GetDelivery(context.Background(), record.DeliveryID)
|
|
require.NoError(t, err)
|
|
require.True(t, found)
|
|
require.Equal(t, record, storedDelivery)
|
|
|
|
attemptExists := server.Exists(Keyspace{}.Attempt(record.DeliveryID, 1))
|
|
require.False(t, attemptExists)
|
|
}
|
|
|
|
func TestAcceptanceStoreReturnsNotFound(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
server := miniredis.RunT(t)
|
|
client := redis.NewClient(&redis.Options{Addr: server.Addr()})
|
|
t.Cleanup(func() { require.NoError(t, client.Close()) })
|
|
|
|
store, err := NewAcceptanceStore(client)
|
|
require.NoError(t, err)
|
|
|
|
deliveryRecord, found, err := store.GetDelivery(context.Background(), common.DeliveryID("missing"))
|
|
require.NoError(t, err)
|
|
require.False(t, found)
|
|
require.Equal(t, deliverydomain.Delivery{}, deliveryRecord)
|
|
|
|
idempotencyRecord, found, err := store.GetIdempotency(context.Background(), deliverydomain.SourceAuthSession, common.IdempotencyKey("missing"))
|
|
require.NoError(t, err)
|
|
require.False(t, found)
|
|
require.Equal(t, idempotency.Record{}, idempotencyRecord)
|
|
}
|