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