From b1cf8e14de49ec78a2df12ff691e88c331459f59 Mon Sep 17 00:00:00 2001 From: Artyom Belousov Date: Sat, 6 Feb 2021 20:36:05 +0300 Subject: [PATCH] Covered ApiiSender with tests --- go.mod | 1 + go.sum | 8 +++++ internal/vk/sender.go | 7 +++-- internal/vk/sender_test.go | 60 ++++++++++++++++++++++++++++++++++++-- 4 files changed, 71 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 43d56e7..af7542e 100644 --- a/go.mod +++ b/go.mod @@ -14,4 +14,5 @@ require ( github.com/stretchr/testify v1.5.1 github.com/texttheater/golang-levenshtein/levenshtein v0.0.0-20200805054039-cae8b0eaed6c github.com/yuin/gopher-lua v0.0.0-20200816102855-ee81675732da // indirect + gopkg.in/h2non/gock.v1 v1.0.16 ) diff --git a/go.sum b/go.sum index 3d55a66..9676ca6 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,8 @@ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4er github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= +github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= @@ -36,6 +38,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4= +github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -61,6 +65,7 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20191021144547-ec77196f6094/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd h1:QPwSajcTUrFriMF1nJ3XzgoqakqQEsnZf9LdXdi2nkI= golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -81,6 +86,9 @@ gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXa gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= +gopkg.in/h2non/gentleman.v1 v1.0.4/go.mod h1:JYuHVdFzS4MKOXe0o+chKJ4hCe6tqKKw9XH9YP6WFrg= +gopkg.in/h2non/gock.v1 v1.0.16 h1:F11k+OafeuFENsjei5t2vMTSTs9L62AdyTe4E1cgdG8= +gopkg.in/h2non/gock.v1 v1.0.16/go.mod h1:XVuDAssexPLwgxCLMvDTWNU5eqklsydR6I5phZ9oPB8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/internal/vk/sender.go b/internal/vk/sender.go index 3535bb7..114f68f 100644 --- a/internal/vk/sender.go +++ b/internal/vk/sender.go @@ -18,7 +18,8 @@ type Sender interface { } type ApiSender struct { - Token string + Token string + Logger *log.Logger } type sendMessageResponse struct { @@ -43,13 +44,13 @@ func (s *ApiSender) Send(userId int64, message string) { reqUrl := SendMessageUrl + "?" + joined resp, err := http.Get(reqUrl) if err != nil || resp.StatusCode != http.StatusOK { - log.Printf("[error] Could not Send message. User: %d", userId) + s.Logger.Printf("[error] Could not Send message. User: %d", userId) return } respContent, _ := ioutil.ReadAll(resp.Body) var unmarshalled sendMessageResponse _ = json.Unmarshal(respContent, &unmarshalled) if unmarshalled.Error.ErrorCode != 0 { - log.Printf("[error] Message was not sent. User: %d error message: %s", userId, unmarshalled.Error.ErrorMsg) + s.Logger.Printf("[error] Message was not sent. User: %d error message: %s", userId, unmarshalled.Error.ErrorMsg) } } diff --git a/internal/vk/sender_test.go b/internal/vk/sender_test.go index 75b9900..5e2c5c1 100644 --- a/internal/vk/sender_test.go +++ b/internal/vk/sender_test.go @@ -1,7 +1,63 @@ package vk -import "testing" +import ( + "bytes" + "github.com/stretchr/testify/assert" + "gopkg.in/h2non/gock.v1" + "log" + "net/http" + "strings" + "testing" +) -func TestApiSender_Send(t *testing.T) { +func TestApiSender_Send_OK(t *testing.T) { + defer gock.Off() + gock.New(SendMessageUrl).MatchParams( + map[string]string{ + "access_token": "token", + "peer_id": "1", + "message": "msg", + "v": "5.95", + }, + ).ParamPresent("random_id").Reply(http.StatusOK) + + sender := ApiSender{Token: "token"} + sender.Send(1, "msg") + assert.False(t, gock.HasUnmatchedRequest()) +} + +func TestApiSender_Send_NotOK(t *testing.T) { + defer gock.Off() + + gock.New(SendMessageUrl).Reply(http.StatusInternalServerError) + + b := &bytes.Buffer{} + sender := ApiSender{ + Token: "token", + Logger: log.New(b, "", 0), + } + sender.Send(1, "msg") + assert.True(t, strings.Contains(b.String(), "[error]")) +} + +func TestApiSender_Send_ErrorCode(t *testing.T) { + defer gock.Off() + + gock.New(SendMessageUrl).Reply(http.StatusOK).JSON( + map[string]interface{}{ + "error": map[string]interface{}{ + "error_code": 100, + "error_msg": "bad user", + }, + }, + ) + + b := &bytes.Buffer{} + sender := ApiSender{ + Token: "token", + Logger: log.New(b, "", 0), + } + sender.Send(1, "msg") + assert.True(t, strings.Contains(b.String(), "[error]")) }