From cbaa5744049c98cf479d65edba2a70425d185a43 Mon Sep 17 00:00:00 2001 From: Masashi Tsuru <0221masa@gmail.com> Date: Fri, 5 Aug 2022 15:35:38 +0900 Subject: [PATCH] Fix how to send message to chatwork --- internal/chatwork/send_message.go | 9 ++++++--- internal/chatwork/send_message_test.go | 11 +++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/internal/chatwork/send_message.go b/internal/chatwork/send_message.go index 08a2a8f..a658057 100644 --- a/internal/chatwork/send_message.go +++ b/internal/chatwork/send_message.go @@ -7,6 +7,7 @@ import ( "log" "net/http" "net/url" + "strings" ) type chatworkClient struct { @@ -38,15 +39,17 @@ func (c *chatworkClient) outputVerboseMessage(message string) { } func (c *chatworkClient) SendMessage(message string, toRoomId string) (string, error) { - url := fmt.Sprintf("%v/rooms/%v/messages?body=%v", c.generateEndpointUrl(), toRoomId, url.QueryEscape(message)) + endpoint := fmt.Sprintf("%v/rooms/%v/messages", c.generateEndpointUrl(), toRoomId) + payload := strings.NewReader(fmt.Sprintf("self_unread=0&body=%v", url.QueryEscape(message))) - req, err := http.NewRequest("POST", url, nil) - c.outputVerboseMessage(fmt.Sprintf("Create NewRequest. URL: %v err: %v", url, err)) + req, err := http.NewRequest("POST", endpoint, payload) + c.outputVerboseMessage(fmt.Sprintf("Create NewRequest. URL: %v err: %v", endpoint, err)) if err != nil { return "", fmt.Errorf("Failed to create request: %s", err) } req.Header.Add("Accept", "application/json") + req.Header.Add("Content-Type", "application/x-www-form-urlencoded") req.Header.Add("X-ChatWorkToken", c.apiToken) res, err := http.DefaultClient.Do(req) diff --git a/internal/chatwork/send_message_test.go b/internal/chatwork/send_message_test.go index e448ffd..e94173f 100644 --- a/internal/chatwork/send_message_test.go +++ b/internal/chatwork/send_message_test.go @@ -14,6 +14,7 @@ func TestSendMessage(t *testing.T) { wantApiToken := "qwert12345" wantPath := "/v2/rooms/12345/messages" wantMessageId := "0987654321" + wantContentType := "application/x-www-form-urlencoded" h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { requestedMethod := r.Method @@ -30,6 +31,16 @@ func TestSendMessage(t *testing.T) { t.Errorf("want %v, got %v", wantApiToken, gotApiToken) } + gotContentType := r.Header.Get("Content-Type") + if gotContentType != wantContentType { + t.Errorf("want %v, got %v", wantContentType, gotContentType) + } + + gotMessage := r.PostFormValue("body") + if gotMessage != wantMessage { + t.Errorf("want %v, got %v", wantMessage, gotMessage) + } + if err := r.ParseForm(); err != nil { t.Errorf("ParseForm() err: %v", err) return