45 lines
1.6 KiB
Go
45 lines
1.6 KiB
Go
package service
|
|
|
|
import "testing"
|
|
|
|
func TestParseSESEventNotification(t *testing.T) {
|
|
t.Run("parses direct SES event payload", func(t *testing.T) {
|
|
event, err := ParseSESEventNotification([]byte(`{
|
|
"eventType":"Delivery",
|
|
"mail":{"messageId":"ses-msg-1","source":"no-reply@example.com","destination":["user@example.com"]},
|
|
"delivery":{"processingTimeMillis":123}
|
|
}`))
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
if event.EventType != "Delivery" || event.Mail.MessageID != "ses-msg-1" {
|
|
t.Fatalf("unexpected event: %+v", event)
|
|
}
|
|
if event.Delivery == nil || event.Delivery.ProcessingTimeMillis != 123 {
|
|
t.Fatalf("expected delivery details, got %+v", event.Delivery)
|
|
}
|
|
})
|
|
|
|
t.Run("parses SNS-wrapped SES event payload", func(t *testing.T) {
|
|
event, err := ParseSESEventNotification([]byte(`{
|
|
"Type":"Notification",
|
|
"Message":"{\"eventType\":\"Bounce\",\"mail\":{\"messageId\":\"ses-msg-2\",\"source\":\"no-reply@example.com\",\"destination\":[\"user@example.com\"]},\"bounce\":{\"bounceType\":\"Permanent\"}}"
|
|
}`))
|
|
if err != nil {
|
|
t.Fatalf("parse: %v", err)
|
|
}
|
|
if event.EventType != "Bounce" || event.Mail.MessageID != "ses-msg-2" {
|
|
t.Fatalf("unexpected event: %+v", event)
|
|
}
|
|
if event.Bounce == nil || event.Bounce.BounceType != "Permanent" {
|
|
t.Fatalf("expected bounce details, got %+v", event.Bounce)
|
|
}
|
|
})
|
|
|
|
t.Run("rejects missing event type", func(t *testing.T) {
|
|
if _, err := ParseSESEventNotification([]byte(`{"mail":{"messageId":"ses-msg-3"}}`)); err == nil {
|
|
t.Fatalf("expected error for missing event type")
|
|
}
|
|
})
|
|
}
|