|  | package emailclient | 
|  |  | 
|  | import ( | 
|  | "io/ioutil" | 
|  | "net/http" | 
|  | "net/http/httptest" | 
|  | "testing" | 
|  |  | 
|  | "github.com/stretchr/testify/require" | 
|  | "go.skia.org/infra/go/httputils" | 
|  | ) | 
|  |  | 
|  | func TestClientSendWithMarkup_HappyPath(t *testing.T) { | 
|  | const expectedMessageID = "<the-actual-message-id>" | 
|  | const expected = `From: Alert Manager <alerts@skia.org> | 
|  | To: someone@example.org | 
|  | Subject: Alert! | 
|  | Content-Type: text/html; charset=UTF-8 | 
|  | References: some-thread-reference | 
|  | In-Reply-To: some-thread-reference | 
|  |  | 
|  | <html> | 
|  | <body> | 
|  | <h2>Hi!</h2> | 
|  |  | 
|  | </body> | 
|  | </html> | 
|  | ` | 
|  | s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | 
|  | b, err := ioutil.ReadAll(r.Body) | 
|  | require.NoError(t, err) | 
|  | bodyAsString := string(b) | 
|  | require.Equal(t, expected, bodyAsString) | 
|  | w.Header().Add("x-message-id", expectedMessageID) | 
|  | w.WriteHeader(http.StatusOK) | 
|  | })) | 
|  | c := NewAt(s.URL) | 
|  | c.client = httputils.NewFastTimeoutClient() | 
|  |  | 
|  | msgID, err := c.SendWithMarkup("Alert Manager", "alerts@skia.org", []string{"someone@example.org"}, "Alert!", "", "<h2>Hi!</h2>", "some-thread-reference") | 
|  | require.NoError(t, err) | 
|  | require.Equal(t, expectedMessageID, msgID) | 
|  | } | 
|  |  | 
|  | func TestClientSendWithMarkup_HTTPRequestFails_ReturnsError(t *testing.T) { | 
|  | s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | 
|  | http.Error(w, "Not Found", http.StatusNotFound) | 
|  | })) | 
|  | c := NewAt(s.URL) | 
|  |  | 
|  | _, err := c.SendWithMarkup("Alert Manager", "alerts@skia.org", []string{"someone@example.org"}, "Alert!", "", "<h2>Hi!</h2>", "some-thread-reference") | 
|  | require.Contains(t, err.Error(), "Failed to send") | 
|  | } | 
|  |  | 
|  | func TestClientSendWithMarkup_DedupRecipients(t *testing.T) { | 
|  | const expectedMessageID = "<the-actual-message-id>" | 
|  | const expected = `From: Alert Manager <alerts@skia.org> | 
|  | To: someone@example.org,Someone Else <someone-else@example.org> | 
|  | Subject: Alert! | 
|  | Content-Type: text/html; charset=UTF-8 | 
|  | References: some-thread-reference | 
|  | In-Reply-To: some-thread-reference | 
|  |  | 
|  | <html> | 
|  | <body> | 
|  | <h2>Hi!</h2> | 
|  |  | 
|  | </body> | 
|  | </html> | 
|  | ` | 
|  | s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | 
|  | b, err := ioutil.ReadAll(r.Body) | 
|  | require.NoError(t, err) | 
|  | bodyAsString := string(b) | 
|  | require.Equal(t, expected, bodyAsString) | 
|  | w.Header().Add("x-message-id", expectedMessageID) | 
|  | w.WriteHeader(http.StatusOK) | 
|  | })) | 
|  | c := NewAt(s.URL) | 
|  | c.client = httputils.NewFastTimeoutClient() | 
|  |  | 
|  | msgID, err := c.SendWithMarkup("Alert Manager", "alerts@skia.org", []string{"someone@example.org", "Someone <someone@example.org>", "<someone@example.org>", "Someone Else <someone-else@example.org>"}, "Alert!", "", "<h2>Hi!</h2>", "some-thread-reference") | 
|  | require.NoError(t, err) | 
|  | require.Equal(t, expectedMessageID, msgID) | 
|  | } | 
|  |  | 
|  | func TestClientValid(t *testing.T) { | 
|  | require.True(t, NewAt(DefaultEmailServiceURL).Valid()) | 
|  | require.True(t, NewAt(NamespacedEmailServiceURL).Valid()) | 
|  | require.False(t, NewAt("").Valid()) | 
|  | } |