Files
mailgoserver/internal/mailstore/resolve_test.go
T

79 lines
2.5 KiB
Go

package mailstore
import (
"testing"
"mailgoserver/internal/db"
)
func TestResolveRecipientExactMatch(t *testing.T) {
s, mailboxID := newTestMailbox(t, 1<<30)
mbox, err := s.ResolveRecipient("user@example.com")
if err != nil || mbox == nil || mbox.ID != mailboxID {
t.Fatalf("got %+v, err=%v", mbox, err)
}
}
func TestResolveRecipientSubaddressTag(t *testing.T) {
s, mailboxID := newTestMailbox(t, 1<<30)
mbox, err := s.ResolveRecipient("user+newsletter@example.com")
if err != nil || mbox == nil || mbox.ID != mailboxID {
t.Fatalf("got %+v, err=%v, want the base mailbox for a +tag sub-address", mbox, err)
}
}
func TestResolveRecipientSubaddressDoesNotShadowRealMailbox(t *testing.T) {
s, _ := newTestMailbox(t, 1<<30)
dom, err := s.DB.GetDomainByName("example.com")
if err != nil || dom == nil {
t.Fatal(err)
}
hash, err := db.HashPassword("irrelevant-portal-password")
if err != nil {
t.Fatal(err)
}
dek := GenerateDEK()
wrapped, nonce, err := s.WrapDEK(dek)
if err != nil {
t.Fatal(err)
}
// A literal, genuinely-registered "user+newsletter@example.com" mailbox must win
// over the sub-address-stripping fallback, not get shadowed by "user@example.com".
taggedMailboxID, err := s.DB.CreateMailbox("user+newsletter@example.com", hash, dom.ID, 1<<30, wrapped, nonce)
if err != nil {
t.Fatal(err)
}
mbox, err := s.ResolveRecipient("user+newsletter@example.com")
if err != nil || mbox == nil || mbox.ID != taggedMailboxID {
t.Fatalf("got %+v, err=%v, want the literal registered mailbox, not the stripped-tag fallback", mbox, err)
}
}
func TestResolveRecipientCatchall(t *testing.T) {
s, mailboxID := newTestMailbox(t, 1<<30)
dom, err := s.DB.GetDomainByName("example.com")
if err != nil || dom == nil {
t.Fatal(err)
}
if mbox, err := s.ResolveRecipient("nobody@example.com"); err != nil || mbox != nil {
t.Fatalf("expected no catch-all configured to leave an unknown recipient unresolved, got %+v, err=%v", mbox, err)
}
if err := s.DB.SetDomainCatchall(dom.ID, &mailboxID); err != nil {
t.Fatal(err)
}
mbox, err := s.ResolveRecipient("nobody@example.com")
if err != nil || mbox == nil || mbox.ID != mailboxID {
t.Fatalf("got %+v, err=%v, want the catch-all mailbox once configured", mbox, err)
}
if err := s.DB.SetDomainCatchall(dom.ID, nil); err != nil {
t.Fatal(err)
}
if mbox, err := s.ResolveRecipient("nobody@example.com"); err != nil || mbox != nil {
t.Fatalf("expected clearing the catch-all to leave an unknown recipient unresolved again, got %+v, err=%v", mbox, err)
}
}