1
0
Fork 0
golang-github-domodwyer-mai.../setters_test.go
Daniel Baumann cb9cbb7a25
Adding upstream version 3.6.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-22 21:13:13 +02:00

355 lines
6.9 KiB
Go

package mailyak
import (
"reflect"
"regexp"
"testing"
)
func TestMailYakTo(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
addrs []string
// Want
want []string
}{
{
"Single email (without name)",
[]string{"dom@itsallbroken.com"},
[]string{"dom@itsallbroken.com"},
},
{
"Single email (with name)",
[]string{"Dom <dom@itsallbroken.com>"},
[]string{"Dom <dom@itsallbroken.com>"},
},
{
"Multiple email",
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
},
{
"Empty last",
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com", ""},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
{
"Empty Middle",
[]string{"dom@itsallbroken.com", "", "ohnoes@itsallbroken.com"},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
toAddrs: []string{},
trimRegex: regexp.MustCompile("\r?\n"),
}
m.To(tt.addrs...)
if !reflect.DeepEqual(m.toAddrs, tt.want) {
t.Errorf("%q. MailYak.To() = %v, want %v", tt.name, m.toAddrs, tt.want)
}
})
}
}
func TestMailYakBcc(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
addrs []string
// Want
want []string
}{
{
"Single email (without name)",
[]string{"dom@itsallbroken.com"},
[]string{"dom@itsallbroken.com"},
},
{
"Single email (with name)",
[]string{"Dom <dom@itsallbroken.com>"},
[]string{"Dom <dom@itsallbroken.com>"},
},
{
"Multiple email",
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
},
{
"Empty last",
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com", ""},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
{
"Empty Middle",
[]string{"dom@itsallbroken.com", "", "ohnoes@itsallbroken.com"},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
bccAddrs: []string{},
trimRegex: regexp.MustCompile("\r?\n"),
}
m.Bcc(tt.addrs...)
if !reflect.DeepEqual(m.bccAddrs, tt.want) {
t.Errorf("%q. MailYak.Bcc() = %v, want %v", tt.name, m.bccAddrs, tt.want)
}
})
}
}
func TestMailYakCc(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
addrs []string
// Want
want []string
}{
{
"Single email (without name)",
[]string{"dom@itsallbroken.com"},
[]string{"dom@itsallbroken.com"},
},
{
"Single email (with name)",
[]string{"Dom <dom@itsallbroken.com>"},
[]string{"Dom <dom@itsallbroken.com>"},
},
{
"Multiple email",
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
[]string{"Dom <dom@itsallbroken.com>", "ohnoes@itsallbroken.com"},
},
{
"Empty last",
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com", ""},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
{
"Empty Middle",
[]string{"dom@itsallbroken.com", "", "ohnoes@itsallbroken.com"},
[]string{"dom@itsallbroken.com", "ohnoes@itsallbroken.com"},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
ccAddrs: []string{},
trimRegex: regexp.MustCompile("\r?\n"),
}
m.Cc(tt.addrs...)
if !reflect.DeepEqual(m.ccAddrs, tt.want) {
t.Errorf("%q. MailYak.Cc() = %v, want %v", tt.name, m.ccAddrs, tt.want)
}
})
}
}
func TestMailYakSubject(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
subject string
// Want
want string
}{
{
"ASCII",
"Banana\r\n",
"Banana",
},
{
"Q-encoded",
"🍌\r\n",
"=?UTF-8?q?=F0=9F=8D=8C?=",
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
trimRegex: regexp.MustCompile("\r?\n"),
}
m.Subject(tt.subject)
if !reflect.DeepEqual(m.subject, tt.want) {
t.Errorf("%q. MailYak.Subject() = %v, want %v", tt.name, m.subject, tt.want)
}
})
}
}
func TestMailYakFromName(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
from string
// Want
want string
}{
{
"ASCII",
"Goat\r\n",
"Goat",
},
{
"Q-encoded",
"🐐",
"=?UTF-8?q?=F0=9F=90=90?=",
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
trimRegex: regexp.MustCompile("\r?\n"),
}
m.FromName(tt.from)
if !reflect.DeepEqual(m.fromName, tt.want) {
t.Errorf("%q. MailYak.Subject() = %v, want %v", tt.name, m.fromName, tt.want)
}
})
}
}
func TestMailYakAddHeader(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
from map[string][]string
// Want
want map[string][]string
}{
{
"ASCII",
map[string][]string{
"List-Unsubscribe": {"http://example.com"},
"X-NASTY": {"true\r\nBcc: badguy@example.com"},
},
map[string][]string{
"List-Unsubscribe": {"http://example.com"},
"X-NASTY": {"trueBcc: badguy@example.com"},
},
},
{
"Q-encoded",
map[string][]string{
"X-BEETHOVEN": {"für Elise"},
},
map[string][]string{
"X-BEETHOVEN": {"=?UTF-8?q?f=C3=BCr_Elise?="},
},
},
{
"Multi",
map[string][]string{
"X-MailGun-Tag": {"marketing", "transactional"},
},
map[string][]string{
"X-MailGun-Tag": {"marketing", "transactional"},
},
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
headers: map[string][]string{},
trimRegex: regexp.MustCompile("\r?\n"),
}
for k, values := range tt.from {
for _, v := range values {
m.AddHeader(k, v)
}
}
if !reflect.DeepEqual(m.headers, tt.want) {
t.Errorf("%q. MailYak.AddHeader() = %v, want %v", tt.name, m.headers, tt.want)
}
})
}
}
func TestMailYakLocalName(t *testing.T) {
t.Parallel()
tests := []struct {
// Test description.
name string
// Parameters.
from string
// Want
want string
}{
{
"empty",
"",
"",
},
{
"ASCII",
"example.com\r\n",
"example.com",
},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
m := &MailYak{
headers: map[string][]string{},
trimRegex: regexp.MustCompile("\r?\n"),
}
m.LocalName(tt.from)
if !reflect.DeepEqual(m.localName, tt.want) {
t.Errorf("%q. MailYak.LocalName() = %v, want %v", tt.name, m.localName, tt.want)
}
})
}
}