1
0
mirror of synced 2025-02-16 12:13:17 +03:00

Merge pull request #40 from DmitryZagorulko/master

improve PostRequest method
This commit is contained in:
Alex Lushpai 2018-12-06 16:46:01 +03:00 committed by GitHub
commit 878ef2f01a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 11 deletions

View File

@ -1,9 +1,11 @@
package v1 package v1
import ( import (
"bytes"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"io"
"net/http" "net/http"
"strconv" "strconv"
"time" "time"
@ -98,7 +100,7 @@ func (c *MgClient) ActivateTransportChannel(request Channel) (ActivateResponse,
var resp ActivateResponse var resp ActivateResponse
outgoing, _ := json.Marshal(&request) outgoing, _ := json.Marshal(&request)
data, status, err := c.PostRequest("/channels", []byte(outgoing)) data, status, err := c.PostRequest("/channels", bytes.NewBuffer(outgoing))
if err != nil { if err != nil {
return resp, status, err return resp, status, err
} }
@ -243,7 +245,7 @@ func (c *MgClient) Messages(request SendData) (MessagesResponse, int, error) {
var resp MessagesResponse var resp MessagesResponse
outgoing, _ := json.Marshal(&request) outgoing, _ := json.Marshal(&request)
data, status, err := c.PostRequest("/messages", []byte(outgoing)) data, status, err := c.PostRequest("/messages", bytes.NewBuffer(outgoing))
if err != nil { if err != nil {
return resp, status, err return resp, status, err
} }
@ -326,7 +328,7 @@ func (c *MgClient) MarkMessageRead(request MarkMessageReadRequest) (MarkMessageR
var resp MarkMessageReadResponse var resp MarkMessageReadResponse
outgoing, _ := json.Marshal(&request) outgoing, _ := json.Marshal(&request)
data, status, err := c.PostRequest("/messages/read", []byte(outgoing)) data, status, err := c.PostRequest("/messages/read", bytes.NewBuffer(outgoing))
if err != nil { if err != nil {
return resp, status, err return resp, status, err
} }
@ -420,7 +422,7 @@ func (c *MgClient) GetFile(request string) (FullFileResponse, int, error) {
} }
// UploadFile upload file // UploadFile upload file
func (c *MgClient) UploadFile(request []byte) (UploadFileResponse, int, error) { func (c *MgClient) UploadFile(request io.Reader) (UploadFileResponse, int, error) {
var resp UploadFileResponse var resp UploadFileResponse
data, status, err := c.PostRequest("/files/upload", request) data, status, err := c.PostRequest("/files/upload", request)
@ -444,7 +446,7 @@ func (c *MgClient) UploadFileByURL(request UploadFileByUrlRequest) (UploadFileRe
var resp UploadFileResponse var resp UploadFileResponse
outgoing, _ := json.Marshal(&request) outgoing, _ := json.Marshal(&request)
data, status, err := c.PostRequest("/files/upload_by_url", []byte(outgoing)) data, status, err := c.PostRequest("/files/upload_by_url", bytes.NewBuffer(outgoing))
if err != nil { if err != nil {
return resp, status, err return resp, status, err
} }

View File

@ -181,7 +181,7 @@ func TestMgClient_TextMessages(t *testing.T) {
snd := SendData{ snd := SendData{
Message: Message{ Message: Message{
ExternalID: ext, ExternalID: ext,
Type: "text", Type: MsgTypeText,
Text: "hello!", Text: "hello!",
}, },
User: User{ User: User{
@ -220,7 +220,7 @@ func TestMgClient_ImageMessages(t *testing.T) {
snd := SendData{ snd := SendData{
Message: Message{ Message: Message{
ExternalID: ext, ExternalID: ext + "file",
Type: MsgTypeImage, Type: MsgTypeImage,
Items: []Item{{ID: uploadFileResponse.ID}}, Items: []Item{{ID: uploadFileResponse.ID}},
}, },
@ -304,6 +304,21 @@ func TestMgClient_MarkMessageReadAndDelete(t *testing.T) {
} }
t.Logf("Message %v deleted", data.MessageID) t.Logf("Message %v deleted", data.MessageID)
sndD = DeleteData{
Message{
ExternalID: ext + "file",
},
channelID,
}
data, status, err = c.DeleteMessage(sndD)
if status != http.StatusOK {
t.Errorf("%v", err)
}
t.Logf("Message %v deleted", data.MessageID)
} }
func TestMgClient_DeactivateTransportChannel(t *testing.T) { func TestMgClient_DeactivateTransportChannel(t *testing.T) {
@ -320,3 +335,23 @@ func TestMgClient_DeactivateTransportChannel(t *testing.T) {
t.Logf("Deactivate selected channel: %v", deleteData.ChannelID) t.Logf("Deactivate selected channel: %v", deleteData.ChannelID)
} }
func TestMgClient_UploadFile(t *testing.T) {
c := client()
t.Logf("%v", ext)
resp, err := http.Get("https://via.placeholder.com/300")
if err != nil {
t.Errorf("%v", err)
}
defer resp.Body.Close()
data, status, err := c.UploadFile(resp.Body)
if status != http.StatusOK {
t.Errorf("%v", err)
}
t.Logf("Message %+v is sent", data)
}

View File

@ -3,6 +3,7 @@ package v1
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
@ -21,11 +22,11 @@ func (c *MgClient) GetRequest(url string, parameters []byte) ([]byte, int, error
} }
// PostRequest implements POST Request // PostRequest implements POST Request
func (c *MgClient) PostRequest(url string, parameters []byte) ([]byte, int, error) { func (c *MgClient) PostRequest(url string, parameters io.Reader) ([]byte, int, error) {
return makeRequest( return makeRequest(
"POST", "POST",
fmt.Sprintf("%s%s%s", c.URL, prefix, url), fmt.Sprintf("%s%s%s", c.URL, prefix, url),
bytes.NewBuffer(parameters), parameters,
c, c,
) )
} }
@ -50,7 +51,7 @@ func (c *MgClient) DeleteRequest(url string, parameters []byte) ([]byte, int, er
) )
} }
func makeRequest(reqType, url string, buf *bytes.Buffer, c *MgClient) ([]byte, int, error) { func makeRequest(reqType, url string, buf io.Reader, c *MgClient) ([]byte, int, error) {
var res []byte var res []byte
req, err := http.NewRequest(reqType, url, buf) req, err := http.NewRequest(reqType, url, buf)
if err != nil { if err != nil {
@ -61,7 +62,9 @@ func makeRequest(reqType, url string, buf *bytes.Buffer, c *MgClient) ([]byte, i
req.Header.Set("X-Transport-Token", c.Token) req.Header.Set("X-Transport-Token", c.Token)
if c.Debug { if c.Debug {
log.Printf("MG TRANSPORT API Request: %s %s %s %s", reqType, url, c.Token, buf.String()) b := new(bytes.Buffer)
b.ReadFrom(buf)
log.Printf("MG TRANSPORT API Request: %s %s %s %s", reqType, url, c.Token, b.String())
} }
resp, err := c.httpClient.Do(req) resp, err := c.httpClient.Do(req)