1
0
mirror of synced 2024-11-23 20:46:01 +03:00
mg-transport-telegram/src/routing_test.go

204 lines
5.2 KiB
Go
Raw Normal View History

2018-05-22 01:59:24 +03:00
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
2018-05-22 01:59:24 +03:00
"net/http"
"net/http/httptest"
2018-05-25 18:09:38 +03:00
"net/url"
2018-08-23 13:11:40 +03:00
"os"
2018-05-22 01:59:24 +03:00
"strings"
"testing"
2018-05-22 01:59:24 +03:00
2018-08-15 17:56:36 +03:00
"github.com/gin-gonic/gin"
2018-05-22 01:59:24 +03:00
"github.com/h2non/gock"
2018-08-23 13:11:40 +03:00
"github.com/retailcrm/mg-transport-api-client-go/v1"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
2018-05-22 01:59:24 +03:00
)
2018-08-15 17:56:36 +03:00
var router *gin.Engine
func init() {
2018-08-23 13:11:40 +03:00
os.Chdir("../")
2018-05-31 15:03:57 +03:00
config = LoadConfig("config_test.yml")
orm = NewDb(config)
logger = newLogger()
2018-08-15 17:56:36 +03:00
router = setup()
c := Connection{
2018-05-29 10:08:38 +03:00
ID: 1,
ClientID: "123123",
APIKEY: "test",
APIURL: "https://test.retailcrm.ru",
MGURL: "https://test.retailcrm.pro",
MGToken: "test-token",
Active: true,
}
c.createConnection()
2018-05-31 18:17:19 +03:00
orm.DB.Delete(Bot{}, "token = ?", "123123:Qwerty")
}
2018-05-22 01:59:24 +03:00
func TestRouting_connectHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
2018-05-22 01:59:24 +03:00
assert.Equal(t, http.StatusOK, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK))
2018-05-22 01:59:24 +03:00
}
func TestRouting_addBotHandler(t *testing.T) {
defer gock.Off()
2018-08-23 13:11:40 +03:00
ch := v1.Channel{
Type: "telegram",
Settings: v1.ChannelSettings{
SpamAllowed: false,
Status: v1.Status{
Delivered: v1.ChannelFeatureNone,
Read: v1.ChannelFeatureNone,
},
Text: v1.ChannelSettingsText{
Creating: v1.ChannelFeatureBoth,
Editing: v1.ChannelFeatureBoth,
Quoting: v1.ChannelFeatureBoth,
Deleting: v1.ChannelFeatureSend,
},
},
}
outgoing, _ := json.Marshal(ch)
2018-05-31 18:17:19 +03:00
p := url.Values{"url": {"https://" + config.HTTPServer.Host + "/telegram/123123:Qwerty"}}
2018-05-25 18:09:38 +03:00
2018-05-22 01:59:24 +03:00
gock.New("https://api.telegram.org").
Post("/bot123123:Qwerty/getMe").
2018-05-22 01:59:24 +03:00
Reply(200).
2018-05-22 18:02:33 +03:00
BodyString(`{"ok":true,"result":{"id":123,"is_bot":true,"first_name":"Test","username":"TestBot"}}`)
2018-05-22 01:59:24 +03:00
gock.New("https://api.telegram.org").
Post("/bot123123:Qwerty/setWebhook").
MatchType("url").
2018-05-25 18:09:38 +03:00
BodyString(p.Encode()).
Reply(201).
BodyString(`{"ok":true}`)
2018-05-22 01:59:24 +03:00
gock.New("https://api.telegram.org").
Post("/bot123123:Qwerty/getWebhookInfo").
Reply(200).
2018-05-31 18:17:19 +03:00
BodyString(`{"ok":true,"result":{"url":"https://` + config.HTTPServer.Host + `/telegram/123123:Qwerty","has_custom_certificate":false,"pending_update_count":0}}`)
gock.New("https://test.retailcrm.pro").
2018-07-21 23:54:28 +03:00
Post("/api/transport/v1/channels").
2018-08-23 13:11:40 +03:00
JSON([]byte(outgoing)).
2018-05-22 01:59:24 +03:00
MatchHeader("Content-Type", "application/json").
MatchHeader("X-Transport-Token", "test-token").
Reply(201).
2018-05-22 01:59:24 +03:00
BodyString(`{"id": 1}`)
2018-05-29 10:08:38 +03:00
req, err := http.NewRequest("POST", "/add-bot/", strings.NewReader(`{"token": "123123:Qwerty", "connectionId": 1}`))
2018-05-22 01:59:24 +03:00
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
require.Equal(t, http.StatusCreated, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusCreated))
bytes, err := ioutil.ReadAll(rr.Body)
if err != nil {
t.Fatal(err)
2018-05-22 01:59:24 +03:00
}
var res map[string]interface{}
err = json.Unmarshal(bytes, &res)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, "123123:Qwerty", res["token"])
2018-05-22 01:59:24 +03:00
}
func TestRouting_deleteBotHandler(t *testing.T) {
defer gock.Off()
gock.New("https://test.retailcrm.pro").
2018-07-21 23:54:28 +03:00
Post("/api/transport/v1/channels").
BodyString(`{"ID":1,"Type":"telegram","Events":["message_sent","message_updated","message_deleted","message_read"]}`).
MatchHeader("Content-Type", "application/json").
MatchHeader("X-Transport-Token", "123123").
Reply(200).
BodyString(`{"id": 1}`)
req, err := http.NewRequest("POST", "/delete-bot/", strings.NewReader(`{"token": "123123:Qwerty", "active": false, "connectionId": 1}`))
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK))
}
func TestRouting_settingsHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/settings/123123", nil)
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK))
}
func TestRouting_saveHandler(t *testing.T) {
2018-05-29 10:08:38 +03:00
defer gock.Off()
gock.New("https://test.retailcrm.ru").
Get("/api/credentials").
Reply(200).
BodyString(`{"success": true, "credentials": ["/api/integration-modules/{code}", "/api/integration-modules/{code}/edit"]}`)
req, err := http.NewRequest("POST", "/save/",
strings.NewReader(
`{"clientId": "123123",
"api_url": "https://test.retailcrm.ru",
"api_key": "test"}`,
))
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK))
}
func TestRouting_activityHandler(t *testing.T) {
req, err := http.NewRequest("POST", "/actions/activity",
strings.NewReader(
`{"clientId": "123123","activity": {"active": true}}`,
))
if err != nil {
t.Fatal(err)
}
rr := httptest.NewRecorder()
2018-08-15 17:56:36 +03:00
router.ServeHTTP(rr, req)
assert.Equal(t, http.StatusOK, rr.Code,
fmt.Sprintf("handler returned wrong status code: got %v want %v", rr.Code, http.StatusOK))
}