add tests

This commit is contained in:
naiba 2021-11-05 15:49:01 +08:00
parent 96c25f6fba
commit f63d8ba613
2 changed files with 91 additions and 46 deletions

View File

@ -41,11 +41,14 @@ func (n *Notification) reqURL(message string) string {
}) })
} }
func (n *Notification) reqMethod() string { func (n *Notification) reqMethod() (string, error) {
if n.RequestMethod == NotificationRequestMethodPOST { switch n.RequestMethod {
return http.MethodPost case NotificationRequestMethodPOST:
return http.MethodPost, nil
case NotificationRequestMethodGET:
return http.MethodGet, nil
} }
return http.MethodGet return "", errors.New("不支持的请求方式")
} }
func (n *Notification) reqBody(message string) (string, error) { func (n *Notification) reqBody(message string) (string, error) {
@ -115,7 +118,12 @@ func (n *Notification) Send(message string) error {
return err return err
} }
req, err := http.NewRequest(n.reqMethod(), n.reqURL(message), strings.NewReader(reqBody)) reqMethod, err := n.reqMethod()
if err != nil {
return err
}
req, err := http.NewRequest(reqMethod, n.reqURL(message), strings.NewReader(reqBody))
if err != nil { if err != nil {
return err return err
} }

View File

@ -1,22 +1,30 @@
package model package model
import ( import (
"net/http"
"strings"
"testing" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
var ( var (
msg = "msg" msg = "msg"
reqTypeForm = "application/x-www-form-urlencoded"
reqTypeJSON = "application/json"
) )
type testSt struct { type testSt struct {
url string url string
body string body string
reqType int header string
reqMethod int reqType int
expectURL string reqMethod int
expectBody string expectURL string
expectBody string
expectMethod string
expectContentType string
expectHeader map[string]string
} }
func execCase(t *testing.T, item testSt) { func execCase(t *testing.T, item testSt) {
@ -25,60 +33,89 @@ func execCase(t *testing.T, item testSt) {
RequestMethod: item.reqMethod, RequestMethod: item.reqMethod,
RequestType: item.reqType, RequestType: item.reqType,
RequestBody: item.body, RequestBody: item.body,
RequestHeader: item.header,
} }
assert.Equal(t, item.expectURL, n.reqURL(msg)) assert.Equal(t, item.expectURL, n.reqURL(msg))
reqBody, err := n.reqBody(msg) reqBody, err := n.reqBody(msg)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, item.expectBody, reqBody) assert.Equal(t, item.expectBody, reqBody)
reqMethod, err := n.reqMethod()
assert.Nil(t, err)
assert.Equal(t, item.expectMethod, reqMethod)
req, err := http.NewRequest("", "", strings.NewReader(""))
assert.Nil(t, err)
n.setContentType(req)
assert.Equal(t, item.expectContentType, req.Header.Get("Content-Type"))
n.setRequestHeader(req)
for k, v := range item.expectHeader {
assert.Equal(t, v, req.Header.Get(k))
}
} }
func TestNotification(t *testing.T) { func TestNotification(t *testing.T) {
cases := []testSt{ cases := []testSt{
{ {
url: "https://example.com", url: "https://example.com",
body: `{"asd":"dsa"}`, body: `{"asd":"dsa"}`,
reqMethod: NotificationRequestMethodGET, header: `{"asd":"dsa"}`,
expectURL: "https://example.com", reqMethod: NotificationRequestMethodGET,
expectBody: "", expectURL: "https://example.com",
expectMethod: http.MethodGet,
expectContentType: "",
expectHeader: map[string]string{"asd": "dsa"},
expectBody: "",
}, },
{ {
url: "https://example.com/?m=#NEZHA#", url: "https://example.com/?m=#NEZHA#",
body: `{"asd":"dsa"}`, body: `{"asd":"dsa"}`,
reqMethod: NotificationRequestMethodGET, reqMethod: NotificationRequestMethodGET,
expectURL: "https://example.com/?m=" + msg, expectURL: "https://example.com/?m=" + msg,
expectBody: "", expectMethod: http.MethodGet,
expectContentType: "",
expectBody: "",
}, },
{ {
url: "https://example.com/?m=#NEZHA#", url: "https://example.com/?m=#NEZHA#",
body: `{"asd":"#NEZHA#"}`, body: `{"asd":"#NEZHA#"}`,
reqMethod: NotificationRequestMethodPOST, reqMethod: NotificationRequestMethodPOST,
reqType: NotificationRequestTypeForm, reqType: NotificationRequestTypeForm,
expectURL: "https://example.com/?m=" + msg, expectURL: "https://example.com/?m=" + msg,
expectBody: "asd=" + msg, expectMethod: http.MethodPost,
expectContentType: reqTypeForm,
expectBody: "asd=" + msg,
}, },
{ {
url: "https://example.com/?m=#NEZHA#", url: "https://example.com/?m=#NEZHA#",
body: `{"#NEZHA#":"#NEZHA#"}`, body: `{"#NEZHA#":"#NEZHA#"}`,
reqMethod: NotificationRequestMethodPOST, reqMethod: NotificationRequestMethodPOST,
reqType: NotificationRequestTypeForm, reqType: NotificationRequestTypeForm,
expectURL: "https://example.com/?m=" + msg, expectURL: "https://example.com/?m=" + msg,
expectBody: "%23NEZHA%23=" + msg, expectMethod: http.MethodPost,
expectContentType: reqTypeForm,
expectBody: "%23NEZHA%23=" + msg,
}, },
{ {
url: "https://example.com/?m=#NEZHA#", url: "https://example.com/?m=#NEZHA#",
body: `{"asd":"#NEZHA#"}`, body: `{"asd":"#NEZHA#"}`,
reqMethod: NotificationRequestMethodPOST, reqMethod: NotificationRequestMethodPOST,
reqType: NotificationRequestTypeJSON, reqType: NotificationRequestTypeJSON,
expectURL: "https://example.com/?m=" + msg, expectURL: "https://example.com/?m=" + msg,
expectBody: `{"asd":"msg"}`, expectMethod: http.MethodPost,
expectContentType: reqTypeJSON,
expectBody: `{"asd":"msg"}`,
}, },
{ {
url: "https://example.com/?m=#NEZHA#", url: "https://example.com/?m=#NEZHA#",
body: `{"#NEZHA#":"#NEZHA#"}`, body: `{"#NEZHA#":"#NEZHA#"}`,
reqMethod: NotificationRequestMethodPOST, reqMethod: NotificationRequestMethodPOST,
reqType: NotificationRequestTypeJSON, header: `{"asd":"dsa11"}`,
expectURL: "https://example.com/?m=" + msg, reqType: NotificationRequestTypeJSON,
expectBody: `{"msg":"msg"}`, expectURL: "https://example.com/?m=" + msg,
expectMethod: http.MethodPost,
expectContentType: reqTypeJSON,
expectBody: `{"msg":"msg"}`,
expectHeader: map[string]string{"asd": "dsa11"},
}, },
} }