ultisuite-backend/internal/mail/autoconfig/discover_test.go
2026-05-24 00:03:36 +02:00

77 lines
2.0 KiB
Go

package autoconfig
import (
"context"
"testing"
)
func TestMatchDomainGmail(t *testing.T) {
p, ok := matchDomain("gmail.com")
if !ok || p.id != "gmail" {
t.Fatalf("expected gmail preset, got ok=%v id=%q", ok, p.id)
}
}
func TestMatchDomainOutlookFR(t *testing.T) {
p, ok := matchDomain("outlook.fr")
if !ok || p.id != "outlook" {
t.Fatalf("expected outlook preset, got ok=%v id=%q", ok, p.id)
}
}
func TestDiscoverPreset(t *testing.T) {
r, err := Discover(context.Background(), "User@Gmail.COM")
if err != nil {
t.Fatal(err)
}
if r.Source != "preset" || r.IMAPHost != "imap.gmail.com" {
t.Fatalf("unexpected result: %+v", r)
}
if r.Email != "User@Gmail.COM" {
// ParseAddress normalizes? Actually mail.ParseAddress keeps case in local part
// but domain might be lowercased in Address field
}
}
func TestGuessFromDomain(t *testing.T) {
r := guessFromDomain("a@example.org", "example.org")
if r.Source != "guess" || r.IMAPHost != "imap.example.org" {
t.Fatalf("unexpected guess: %+v", r)
}
}
func TestParseMozillaConfig(t *testing.T) {
const sample = `<?xml version="1.0"?>
<clientConfig version="1.1">
<emailProvider id="example.com">
<domain>example.com</domain>
<displayName>Example Mail</displayName>
<incomingServer type="imap">
<hostname>imap.example.com</hostname>
<port>993</port>
<socketType>SSL</socketType>
<username>%EMAILADDRESS%</username>
</incomingServer>
<outgoingServer type="smtp">
<hostname>smtp.example.com</hostname>
<port>587</port>
<socketType>STARTTLS</socketType>
</outgoingServer>
</emailProvider>
</clientConfig>`
r, ok := parseMozillaConfig([]byte(sample), "example.com")
if !ok {
t.Fatal("expected parse ok")
}
if r.IMAPHost != "imap.example.com" || r.SMTPHost != "smtp.example.com" {
t.Fatalf("unexpected hosts: %+v", r)
}
}
func TestDiscoverInvalidEmail(t *testing.T) {
_, err := Discover(context.Background(), "not-an-email")
if err != ErrInvalidEmail {
t.Fatalf("expected ErrInvalidEmail, got %v", err)
}
}