|
- package weapp
-
- import (
- "encoding/base64"
- "encoding/json"
- "fmt"
- "io"
- "net/http"
- "net/http/httptest"
- "os"
- "path"
- "strings"
- "testing"
- )
-
- func TestIMGSecCheck(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-
- if r.Method != "POST" {
- t.Fatalf("Expect 'POST' get '%s'", r.Method)
- }
-
- path := r.URL.EscapedPath()
- if path != apiIMGSecCheck {
- t.Fatalf("Except to path '%s',get '%s'", apiIMGSecCheck, path)
- }
-
- if err := r.ParseForm(); err != nil {
- t.Fatal(err)
- }
-
- if r.Form.Get("access_token") == "" {
- t.Fatalf("access_token can not be empty")
- }
-
- if _, _, err := r.FormFile("media"); err != nil {
- t.Fatal(err)
-
- }
- w.WriteHeader(http.StatusOK)
- w.Header().Set("Content-Type", "application/json")
- raw := `{
- "errcode": 0,
- "errmsg": "ok"
- }`
- if _, err := w.Write([]byte(raw)); err != nil {
- t.Fatal(err)
- }
- }))
- defer ts.Close()
-
- _, err := imgSecCheck(ts.URL+apiIMGSecCheck, "mock-access-token", testIMGName)
- if err != nil {
- t.Fatal(err)
- }
- }
-
- func TestMediaCheckAsync(t *testing.T) {
-
- localServer := http.NewServeMux()
- localServer.HandleFunc("/notify", func(w http.ResponseWriter, r *http.Request) {
- aesKey := base64.StdEncoding.EncodeToString([]byte("mock-aes-key"))
- srv, err := NewServer("mock-app-id", "mock-access-token", aesKey, "mock-mch-id", "mock-api-key", false)
- if err != nil {
- t.Fatal(err)
- }
-
- srv.OnMediaCheckAsync(func(mix *MediaCheckAsyncResult) {
- if mix.ToUserName == "" {
- t.Error("ToUserName can not be empty")
- }
-
- if mix.FromUserName == "" {
- t.Error("FromUserName can not be empty")
- }
- if mix.CreateTime == 0 {
- t.Error("CreateTime can not be empty")
- }
- if mix.MsgType != "event" {
- t.Error("Unexpected message type")
- }
- if mix.Event != "wxa_media_check" {
- t.Error("Unexpected message event")
- }
- if mix.AppID == "" {
- t.Error("AppID can not be empty")
- }
- if mix.TraceID == "" {
- t.Error("TraceID can not be empty")
- }
-
- })
-
- if err := srv.Serve(w, r); err != nil {
- t.Fatal(err)
- }
- })
-
- tls := httptest.NewServer(localServer)
- defer tls.Close()
-
- remoteServer := http.NewServeMux()
- remoteServer.HandleFunc(apiMediaCheckAsync, func(w http.ResponseWriter, r *http.Request) {
- if r.Method != "POST" {
- t.Fatalf("Expect 'POST' get '%s'", r.Method)
- }
-
- path := r.URL.EscapedPath()
- if path != apiMediaCheckAsync {
- t.Fatalf("Except to path '%s',get '%s'", apiMediaCheckAsync, path)
- }
-
- if err := r.ParseForm(); err != nil {
- t.Fatal(err)
- }
-
- if r.Form.Get("access_token") == "" {
- t.Fatalf("access_token can not be empty")
- }
-
- params := struct {
- MediaURL string `json:"media_url"`
- MediaType uint8 `json:"media_type"`
- }{}
-
- if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil {
- t.Fatal(err)
- }
-
- if params.MediaURL == "" {
- t.Error("Response column media_url can not be empty")
- }
-
- if params.MediaType == 0 {
- t.Error("Response column media_type can not be zero")
- }
-
- w.WriteHeader(http.StatusOK)
-
- raw := `{
- "errcode" : 0,
- "errmsg" : "ok",
- "trace_id" : "967e945cd8a3e458f3c74dcb886068e9"
- }`
- if _, err := w.Write([]byte(raw)); err != nil {
- t.Fatal(err)
- }
-
- raw = `{
- "ToUserName" : "gh_38cc49f9733b",
- "FromUserName" : "oH1fu0FdHqpToe2T6gBj0WyB8iS1",
- "CreateTime" : 1552465698,
- "MsgType" : "event",
- "Event" : "wxa_media_check",
- "isrisky" : 0,
- "extra_info_json" : "",
- "appid" : "wxd8c59133dfcbfc71",
- "trace_id" : "967e945cd8a3e458f3c74dcb886068e9",
- "status_code" : 0
- }`
- reader := strings.NewReader(raw)
- http.Post(tls.URL+"/notify", "application/json", reader)
- })
-
- remoteServer.HandleFunc("/mediaurl", func(w http.ResponseWriter, r *http.Request) {
- filename := testIMGName
- file, err := os.Open(filename)
- if err != nil {
- t.Fatal((err))
- }
- defer file.Close()
-
- ext := path.Ext(filename)
- ext = ext[1:len(ext)]
- w.Header().Set("Content-Type", "image/"+ext)
- w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", path.Base(filename)))
- w.WriteHeader(http.StatusOK)
-
- if _, err := io.Copy(w, file); err != nil {
- t.Fatal(err)
- }
- })
-
- trs := httptest.NewServer(remoteServer)
- defer trs.Close()
-
- _, err := mediaCheckAsync(trs.URL+apiMediaCheckAsync, "mock-access-token", trs.URL+"/mediaurl", MediaTypeImage)
- if err != nil {
- t.Fatal(err)
- }
- }
-
- func TestMSGSecCheck(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if r.Method != "POST" {
- t.Fatalf("Expect 'POST' get '%s'", r.Method)
- }
-
- path := r.URL.EscapedPath()
- if path != "/wxa/img_sec_check" {
- t.Error("Invalid request path")
- }
-
- if err := r.ParseForm(); err != nil {
- t.Fatal(err)
- }
-
- if r.Form.Get("access_token") == "" {
- t.Fatalf("access_token can not be empty")
- }
-
- params := struct {
- Content string `json:"content"`
- }{}
-
- if err := json.NewDecoder(r.Body).Decode(¶ms); err != nil {
- t.Fatal(err)
- }
-
- if params.Content == "" {
- t.Error("Response column content can not be empty")
- }
-
- w.WriteHeader(http.StatusOK)
-
- raw := `{
- "errcode": 0,
- "errmsg": "ok"
- }`
- if _, err := w.Write([]byte(raw)); err != nil {
- t.Fatal(err)
- }
- }))
- defer ts.Close()
-
- _, err := msgSecCheck(ts.URL+apiIMGSecCheck, "mock-access-token", "mock-content")
- if err != nil {
- t.Fatal(err)
- }
- }
|