119 lines
2.3 KiB
Go
119 lines
2.3 KiB
Go
package notifications
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"io/ioutil"
|
||
"net/http"
|
||
"strings"
|
||
"testing"
|
||
)
|
||
|
||
const (
|
||
port = 5000
|
||
)
|
||
|
||
func TestNotificationServer(t *testing.T) {
|
||
testCases := []struct {
|
||
request string
|
||
response string
|
||
}{
|
||
// PING
|
||
{
|
||
`{
|
||
"message_type": "string",
|
||
"time": "2019-08-24T14:15:22Z"
|
||
}`,
|
||
`{
|
||
"version": "1.0",
|
||
"name": "Ozon Seller API"
|
||
}`,
|
||
},
|
||
// REGISTERED HANDLER
|
||
{
|
||
`{
|
||
"message_type": "TYPE_CHAT_CLOSED",
|
||
"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
|
||
"chat_type": "Buyer_Seller",
|
||
"user": {
|
||
"id": "115568",
|
||
"type": "Сustomer"
|
||
},
|
||
"seller_id": "7"
|
||
}`,
|
||
`{
|
||
"result": true
|
||
}`,
|
||
},
|
||
// UNREGISTERED HANDLER
|
||
{
|
||
`{
|
||
"message_type": "TYPE_MESSAGE_READ",
|
||
"chat_id": "b646d975-0c9c-4872-9f41-8b1e57181063",
|
||
"chat_type": "Buyer_Seller",
|
||
"message_id": "3000000000817031942",
|
||
"created_at": "2022-07-18T20:58:04.528Z",
|
||
"user": {
|
||
"id": "115568",
|
||
"type": "Сustomer"
|
||
},
|
||
"last_read_message_id": "3000000000817031942",
|
||
"seller_id": "7"
|
||
}`,
|
||
`{
|
||
"result": false
|
||
}`,
|
||
},
|
||
}
|
||
|
||
client := http.Client{}
|
||
server := NewNotificationServer(port)
|
||
server.Register(ChatClosedType, func(req interface{}) error {
|
||
_, ok := req.(*ChatClosed)
|
||
if !ok {
|
||
return fmt.Errorf("req is not of ChatClosed type")
|
||
}
|
||
return nil
|
||
})
|
||
go func() {
|
||
if err := server.Run(); err != nil {
|
||
t.Fatalf("notification server is down: %s", err)
|
||
}
|
||
}()
|
||
|
||
for _, testCase := range testCases {
|
||
httpResp, err := client.Post(fmt.Sprintf("http://127.0.0.1:%d/", port), "application/json", strings.NewReader(testCase.request))
|
||
if err != nil {
|
||
t.Error(err)
|
||
continue
|
||
}
|
||
|
||
gotJson, err := ioutil.ReadAll(httpResp.Body)
|
||
if err != nil {
|
||
t.Error(err)
|
||
continue
|
||
}
|
||
|
||
expected := map[string]string{}
|
||
got := map[string]string{}
|
||
json.Unmarshal(gotJson, got)
|
||
json.Unmarshal([]byte(testCase.response), expected)
|
||
|
||
if err := compare(expected, got); err != nil {
|
||
t.Error(err)
|
||
continue
|
||
}
|
||
}
|
||
}
|
||
|
||
func compare(expected map[string]string, got map[string]string) error {
|
||
for k, v := range expected {
|
||
if gotValue, ok := got[k]; !ok {
|
||
return fmt.Errorf("key %s is expected to present", k)
|
||
} else if gotValue != v {
|
||
return fmt.Errorf("key %s is not equal, got: %s, want: %s", k, gotValue, v)
|
||
}
|
||
}
|
||
return nil
|
||
}
|