mirror of
https://github.com/wneessen/go-mail.git
synced 2024-11-14 18:02:55 +01:00
Add AttachReadSeeker tests for Unix and general cases
Introduce tests for the AttachReadSeeker method, detailing scenarios for general use and Unix-specific paths. Ensure file handling and error conditions are properly validated to maintain robustness.
This commit is contained in:
parent
e7e0fe03bb
commit
466c2892bf
2 changed files with 82 additions and 0 deletions
38
msg_test.go
38
msg_test.go
|
@ -4558,6 +4558,44 @@ func TestMsg_AttachReader(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMsg_AttachReadSeeker(t *testing.T) {
|
||||||
|
t.Run("AttachReadSeeker with file", func(t *testing.T) {
|
||||||
|
message := NewMsg()
|
||||||
|
if message == nil {
|
||||||
|
t.Fatal("message is nil")
|
||||||
|
}
|
||||||
|
file, err := os.Open("testdata/attachment.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to open file: %s", err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() {
|
||||||
|
if err := file.Close(); err != nil {
|
||||||
|
t.Errorf("failed to close file: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
message.AttachReadSeeker("attachment.txt", file)
|
||||||
|
attachments := message.GetAttachments()
|
||||||
|
if len(attachments) != 1 {
|
||||||
|
t.Fatalf("failed to retrieve attachments list")
|
||||||
|
}
|
||||||
|
if attachments[0] == nil {
|
||||||
|
t.Fatal("expected attachment to be not nil")
|
||||||
|
}
|
||||||
|
if attachments[0].Name != "attachment.txt" {
|
||||||
|
t.Errorf("expected attachment name to be %s, got: %s", "attachment.txt", attachments[0].Name)
|
||||||
|
}
|
||||||
|
messageBuf := bytes.NewBuffer(nil)
|
||||||
|
_, err = attachments[0].Writer(messageBuf)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("writer func failed: %s", err)
|
||||||
|
}
|
||||||
|
got := strings.TrimSpace(messageBuf.String())
|
||||||
|
if !strings.EqualFold(got, "This is a test attachment") {
|
||||||
|
t.Errorf("expected message body to be %s, got: %s", "This is a test attachment", got)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// TestNewMsgWithMiddleware tests WithMiddleware
|
// TestNewMsgWithMiddleware tests WithMiddleware
|
||||||
|
|
||||||
|
|
|
@ -133,6 +133,50 @@ func TestMsg_AttachReader_unixOnly(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMsg_AttachReadSeeker_unixOnly(t *testing.T) {
|
||||||
|
t.Run("AttachReadSeeker with fileFromReadSeeker fails on copy", func(t *testing.T) {
|
||||||
|
tempfile, err := os.CreateTemp("", "attachfile-close-early.*.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to create temp file: %s", err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() {
|
||||||
|
if err := os.Remove(tempfile.Name()); err != nil {
|
||||||
|
t.Errorf("failed to remove temp file: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
message := NewMsg()
|
||||||
|
if message == nil {
|
||||||
|
t.Fatal("message is nil")
|
||||||
|
}
|
||||||
|
file, err := os.Open("testdata/attachment.txt")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to open file: %s", err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() {
|
||||||
|
if err := file.Close(); err != nil {
|
||||||
|
t.Errorf("failed to close file: %s", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
message.AttachReadSeeker("attachment.txt", file)
|
||||||
|
attachments := message.GetAttachments()
|
||||||
|
if len(attachments) != 1 {
|
||||||
|
t.Fatalf("failed to get attachments, expected 1, got: %d", len(attachments))
|
||||||
|
}
|
||||||
|
messageBuf, err := os.Open(tempfile.Name())
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to open temp file: %s", err)
|
||||||
|
}
|
||||||
|
// We close early to cause an error during io.Copy
|
||||||
|
if err = messageBuf.Close(); err != nil {
|
||||||
|
t.Fatalf("failed to close temp file: %s", err)
|
||||||
|
}
|
||||||
|
_, err = attachments[0].Writer(messageBuf)
|
||||||
|
if err == nil {
|
||||||
|
t.Error("writer func expected to fail, but didn't")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// TestMsg_WriteToSendmailWithContext tests the WriteToSendmailWithContext() method of the Msg
|
// TestMsg_WriteToSendmailWithContext tests the WriteToSendmailWithContext() method of the Msg
|
||||||
func TestMsg_WriteToSendmailWithContext(t *testing.T) {
|
func TestMsg_WriteToSendmailWithContext(t *testing.T) {
|
||||||
if os.Getenv("TEST_SENDMAIL") != "true" {
|
if os.Getenv("TEST_SENDMAIL") != "true" {
|
||||||
|
|
Loading…
Reference in a new issue