77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
package internalhttp
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"galaxy/mail/internal/domain/common"
|
|
"galaxy/mail/internal/service/listdeliveries"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDecodeDeliveryListInputSuccess(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cursor, err := EncodeDeliveryListCursor(listdeliveries.Cursor{
|
|
CreatedAt: time.Unix(1_775_122_000, 0).UTC(),
|
|
DeliveryID: common.DeliveryID("delivery-123"),
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
request := httptest.NewRequest(
|
|
http.MethodGet,
|
|
DeliveriesPath+"?recipient=pilot@example.com&status=sent&source=notification&template_id=template.welcome&idempotency_key=notification:delivery-123&from_created_at_ms=1775122000000&to_created_at_ms=1775122600000&limit=25&cursor="+cursor,
|
|
nil,
|
|
)
|
|
|
|
input, err := DecodeDeliveryListInput(request)
|
|
require.NoError(t, err)
|
|
require.Equal(t, 25, input.Limit)
|
|
require.Equal(t, common.Email("pilot@example.com"), input.Filters.Recipient)
|
|
require.Equal(t, common.TemplateID("template.welcome"), input.Filters.TemplateID)
|
|
require.Equal(t, common.IdempotencyKey("notification:delivery-123"), input.Filters.IdempotencyKey)
|
|
require.NotNil(t, input.Cursor)
|
|
require.Equal(t, common.DeliveryID("delivery-123"), input.Cursor.DeliveryID)
|
|
}
|
|
|
|
func TestDecodeDeliveryListInputRejectsInvalidCursor(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
request := httptest.NewRequest(http.MethodGet, DeliveriesPath+"?cursor=bad", nil)
|
|
|
|
_, err := DecodeDeliveryListInput(request)
|
|
require.Error(t, err)
|
|
assert.ErrorContains(t, err, "decode cursor")
|
|
}
|
|
|
|
func TestDeliveryListCursorRoundTrip(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
cursor := listdeliveries.Cursor{
|
|
CreatedAt: time.Unix(1_775_122_500, 0).UTC(),
|
|
DeliveryID: common.DeliveryID("delivery-xyz"),
|
|
}
|
|
|
|
encoded, err := EncodeDeliveryListCursor(cursor)
|
|
require.NoError(t, err)
|
|
|
|
decoded, err := DecodeDeliveryListCursor(encoded)
|
|
require.NoError(t, err)
|
|
require.Equal(t, cursor, decoded)
|
|
}
|
|
|
|
func TestDecodeDeliveryIDFromPath(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
request := httptest.NewRequest(http.MethodGet, "/api/v1/internal/deliveries/delivery-123", nil)
|
|
request.SetPathValue(deliveryIDPathValue, "delivery-123")
|
|
|
|
deliveryID, err := DecodeDeliveryIDFromPath(request)
|
|
require.NoError(t, err)
|
|
require.Equal(t, common.DeliveryID("delivery-123"), deliveryID)
|
|
}
|