Files
fm_be/internal/service/ses_event_test.go
2026-07-16 22:16:45 +07:00

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")
}
})
}