mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-22 05:40:50 +01:00
Added test coverage for #13
This commit is contained in:
parent
08cf367772
commit
7050414529
1 changed files with 362 additions and 0 deletions
362
msg_test.go
362
msg_test.go
|
@ -4,10 +4,12 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
htpl "html/template"
|
||||||
"io"
|
"io"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
ttpl "text/template"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1338,3 +1340,363 @@ func TestMsg_Read_ioCopy(t *testing.T) {
|
||||||
t.Errorf("message content of WriteTo and io.Copy differ")
|
t.Errorf("message content of WriteTo and io.Copy differ")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestMsg_SetBodyTextTemplate tests the Msg.SetBodyTextTemplate method
|
||||||
|
func TestMsg_SetBodyTextTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal text", "This is a {{.Placeholder}}", "TemplateTest", false},
|
||||||
|
{"invalid tpl", "This is a {{ foo .Placeholder}}", "TemplateTest", true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := ttpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
if err := m.SetBodyTextTemplate(tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as body: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ph) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_SetBodyHTMLTemplate tests the Msg.SetBodyHTMLTemplate method
|
||||||
|
func TestMsg_SetBodyHTMLTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal HTML", "<p>This is a {{.Placeholder}}</p>", "TemplateTest", "TemplateTest", false},
|
||||||
|
{"HTML with HTML", "<p>This is a {{.Placeholder}}</p>", "<script>alert(1)</script>",
|
||||||
|
"<script>alert(1)</script>", false},
|
||||||
|
{"invalid tpl", "<p>This is a {{ foo .Placeholder}}</p>", "TemplateTest", "", true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := htpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
if err := m.SetBodyHTMLTemplate(tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as body: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_AddAlternativeTextTemplate tests the Msg.AddAlternativeTextTemplate method
|
||||||
|
func TestMsg_AddAlternativeTextTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal text", "This is a {{.Placeholder}}", "TemplateTest", false},
|
||||||
|
{"invalid tpl", "This is a {{ foo .Placeholder}}", "TemplateTest", true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := ttpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextHTML, "")
|
||||||
|
if err := m.AddAlternativeTextTemplate(tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as alternative part: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ph) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_AddAlternativeHTMLTemplate tests the Msg.AddAlternativeHTMLTemplate method
|
||||||
|
func TestMsg_AddAlternativeHTMLTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal HTML", "<p>This is a {{.Placeholder}}</p>", "TemplateTest", "TemplateTest", false},
|
||||||
|
{"HTML with HTML", "<p>This is a {{.Placeholder}}</p>", "<script>alert(1)</script>",
|
||||||
|
"<script>alert(1)</script>", false},
|
||||||
|
{"invalid tpl", "<p>This is a {{ foo .Placeholder}}</p>", "TemplateTest", "", true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := htpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextPlain, "")
|
||||||
|
if err := m.AddAlternativeHTMLTemplate(tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as alternative part: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_AttachTextTemplate tests the Msg.AttachTextTemplate method
|
||||||
|
func TestMsg_AttachTextTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
ac int
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal text", "This is a {{.Placeholder}}", "TemplateTest",
|
||||||
|
"VGhpcyBpcyBhIFRlbXBsYXRlVGVzdA==", 1, false},
|
||||||
|
{"invalid tpl", "This is a {{ foo .Placeholder}}", "TemplateTest", "", 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := ttpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextPlain, "This is the body")
|
||||||
|
if err := m.AttachTextTemplate("attachment.txt", tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to attach template: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
if len(m.attachments) != tt.ac {
|
||||||
|
t.Errorf("wrong number of attachments. Expected: %d, got: %d", tt.ac, len(m.attachments))
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_AttachHTMLTemplate tests the Msg.AttachHTMLTemplate method
|
||||||
|
func TestMsg_AttachHTMLTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
ac int
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal HTML", "<p>This is a {{.Placeholder}}</p>", "TemplateTest",
|
||||||
|
"PHA+VGhpcyBpcyBhIFRlbXBsYXRlVGVzdDwvcD4=", 1, false},
|
||||||
|
{"HTML with HTML", "<p>This is a {{.Placeholder}}</p>", "<script>alert(1)</script>",
|
||||||
|
"PHA+VGhpcyBpcyBhICZsdDtzY3JpcHQmZ3Q7YWxlcnQoMSkmbHQ7L3NjcmlwdCZndDs8L3A+", 1, false},
|
||||||
|
{"invalid tpl", "<p>This is a {{ foo .Placeholder}}</p>", "TemplateTest", "", 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := htpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextPlain, "")
|
||||||
|
if err := m.AttachHTMLTemplate("attachment.html", tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as alternative part: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
if len(m.attachments) != tt.ac {
|
||||||
|
t.Errorf("wrong number of attachments. Expected: %d, got: %d", tt.ac, len(m.attachments))
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_EmbedTextTemplate tests the Msg.EmbedTextTemplate method
|
||||||
|
func TestMsg_EmbedTextTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
ec int
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal text", "This is a {{.Placeholder}}", "TemplateTest",
|
||||||
|
"VGhpcyBpcyBhIFRlbXBsYXRlVGVzdA==", 1, false},
|
||||||
|
{"invalid tpl", "This is a {{ foo .Placeholder}}", "TemplateTest", "", 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := ttpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextPlain, "This is the body")
|
||||||
|
if err := m.EmbedTextTemplate("attachment.txt", tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to attach template: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
if len(m.embeds) != tt.ec {
|
||||||
|
t.Errorf("wrong number of attachments. Expected: %d, got: %d", tt.ec, len(m.attachments))
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestMsg_EmbedHTMLTemplate tests the Msg.EmbedHTMLTemplate method
|
||||||
|
func TestMsg_EmbedHTMLTemplate(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tpl string
|
||||||
|
ph string
|
||||||
|
ex string
|
||||||
|
ec int
|
||||||
|
sf bool
|
||||||
|
}{
|
||||||
|
{"normal HTML", "<p>This is a {{.Placeholder}}</p>", "TemplateTest",
|
||||||
|
"PHA+VGhpcyBpcyBhIFRlbXBsYXRlVGVzdDwvcD4=", 1, false},
|
||||||
|
{"HTML with HTML", "<p>This is a {{.Placeholder}}</p>", "<script>alert(1)</script>",
|
||||||
|
"PHA+VGhpcyBpcyBhICZsdDtzY3JpcHQmZ3Q7YWxlcnQoMSkmbHQ7L3NjcmlwdCZndDs8L3A+", 1, false},
|
||||||
|
{"invalid tpl", "<p>This is a {{ foo .Placeholder}}</p>", "TemplateTest", "", 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
data := struct {
|
||||||
|
Placeholder string
|
||||||
|
}{Placeholder: tt.ph}
|
||||||
|
tpl, err := htpl.New("test").Parse(tt.tpl)
|
||||||
|
if err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to render template: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m := NewMsg()
|
||||||
|
m.SetBodyString(TypeTextPlain, "")
|
||||||
|
if err := m.EmbedHTMLTemplate("attachment.html", tpl, data); err != nil && !tt.sf {
|
||||||
|
t.Errorf("failed to set template as alternative part: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
wbuf := bytes.Buffer{}
|
||||||
|
_, err = m.WriteTo(&wbuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to write body to buffer: %s", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(wbuf.String(), tt.ex) && !tt.sf {
|
||||||
|
t.Errorf("SetBodyTextTemplate failed: Body does not contain the expected tpl placeholder: %s", tt.ph)
|
||||||
|
}
|
||||||
|
if len(m.embeds) != tt.ec {
|
||||||
|
t.Errorf("wrong number of attachments. Expected: %d, got: %d", tt.ec, len(m.attachments))
|
||||||
|
}
|
||||||
|
m.Reset()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue