gitea源码

message_test.go 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2024 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package sender
  4. import (
  5. "strings"
  6. "testing"
  7. "time"
  8. "code.gitea.io/gitea/modules/setting"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. func TestGenerateMessageID(t *testing.T) {
  12. mailService := setting.Mailer{
  13. From: "test@gitea.com",
  14. }
  15. setting.MailService = &mailService
  16. setting.Domain = "localhost"
  17. date := time.Date(2000, 1, 2, 3, 4, 5, 6, time.UTC)
  18. m := NewMessageFrom("", "display-name", "from-address", "subject", "body")
  19. m.Date = date
  20. gm := m.ToMessage()
  21. assert.Equal(t, "<autogen-946782245000-41e8fc54a8ad3a3f@localhost>", gm.GetGenHeader("Message-ID")[0])
  22. m = NewMessageFrom("a@b.com", "display-name", "from-address", "subject", "body")
  23. m.Date = date
  24. gm = m.ToMessage()
  25. assert.Equal(t, "<autogen-946782245000-cc88ce3cfe9bd04f@localhost>", gm.GetGenHeader("Message-ID")[0])
  26. m = NewMessageFrom("a@b.com", "display-name", "from-address", "subject", "body")
  27. m.SetHeader("Message-ID", "<msg-d@domain.com>")
  28. gm = m.ToMessage()
  29. assert.Equal(t, "<msg-d@domain.com>", gm.GetGenHeader("Message-ID")[0])
  30. }
  31. func TestToMessage(t *testing.T) {
  32. oldConf := setting.MailService
  33. defer func() {
  34. setting.MailService = oldConf
  35. }()
  36. setting.MailService = &setting.Mailer{
  37. From: "test@gitea.com",
  38. }
  39. m1 := Message{
  40. Info: "info",
  41. FromAddress: "test@gitea.com",
  42. FromDisplayName: "Test Gitea",
  43. To: "a@b.com",
  44. Subject: "Issue X Closed",
  45. Body: "Some Issue got closed by Y-Man",
  46. }
  47. assertHeaders := func(t *testing.T, expected, header map[string]string) {
  48. for k, v := range expected {
  49. assert.Equal(t, v, header[k], "Header %s should be %s but got %s", k, v, header[k])
  50. }
  51. }
  52. buf := &strings.Builder{}
  53. _, err := m1.ToMessage().WriteTo(buf)
  54. assert.NoError(t, err)
  55. header, _ := extractMailHeaderAndContent(t, buf.String())
  56. assertHeaders(t, map[string]string{
  57. "Content-Type": "multipart/alternative;",
  58. "Date": "Mon, 01 Jan 0001 00:00:00 +0000",
  59. "From": "\"Test Gitea\" <test@gitea.com>",
  60. "Message-ID": "<autogen--6795364578871-69c000786adc60dc@localhost>",
  61. "MIME-Version": "1.0",
  62. "Subject": "Issue X Closed",
  63. "To": "<a@b.com>",
  64. "X-Auto-Response-Suppress": "All",
  65. }, header)
  66. setting.MailService.OverrideHeader = map[string][]string{
  67. "Message-ID": {""}, // delete message id
  68. "Auto-Submitted": {"auto-generated"}, // suppress auto replay
  69. }
  70. buf = &strings.Builder{}
  71. _, err = m1.ToMessage().WriteTo(buf)
  72. assert.NoError(t, err)
  73. header, _ = extractMailHeaderAndContent(t, buf.String())
  74. assertHeaders(t, map[string]string{
  75. "Content-Type": "multipart/alternative;",
  76. "Date": "Mon, 01 Jan 0001 00:00:00 +0000",
  77. "From": "\"Test Gitea\" <test@gitea.com>",
  78. "Message-ID": "",
  79. "MIME-Version": "1.0",
  80. "Subject": "Issue X Closed",
  81. "To": "<a@b.com>",
  82. "X-Auto-Response-Suppress": "All",
  83. "Auto-Submitted": "auto-generated",
  84. }, header)
  85. }
  86. func extractMailHeaderAndContent(t *testing.T, mail string) (map[string]string, string) {
  87. header := make(map[string]string)
  88. parts := strings.SplitN(mail, "boundary=", 2)
  89. if !assert.Len(t, parts, 2) {
  90. return nil, ""
  91. }
  92. content := strings.TrimSpace("boundary=" + parts[1])
  93. hParts := strings.SplitSeq(parts[0], "\n")
  94. for hPart := range hParts {
  95. parts := strings.SplitN(hPart, ":", 2)
  96. hk := strings.TrimSpace(parts[0])
  97. if hk != "" {
  98. header[hk] = strings.TrimSpace(parts[1])
  99. }
  100. }
  101. return header, content
  102. }