You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pingme/service/zulip/zulip_test.go

182 lines
3.7 KiB

package zulip_test
import (
"bytes"
"encoding/json"
"io/ioutil"
"net/http"
"testing"
"github.com/kha7iq/pingme/service/zulip"
"github.com/stretchr/testify/assert"
)
// MockDoType
type MockDoType func(req *http.Request) (*http.Response, error)
// MockClient is the mock client
type MockClient struct {
MockDo MockDoType
}
// Overriding what the Do function should "do" in our MockClient
func (m *MockClient) Do(req *http.Request) (*http.Response, error) {
return m.MockDo(req)
}
func TestSendMessage_Success(t *testing.T) {
// build our response JSON
successResponse, _ := json.Marshal(zulip.ZResponse{
ID: 1,
Message: "",
Result: "success",
Code: "",
})
// create a new reader with that JSON
r := ioutil.NopCloser(bytes.NewReader(successResponse))
zulip.Client = &MockClient{
MockDo: func(*http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: 200,
Body: r,
}, nil
},
}
z := zulip.Zulip{
ZBot: zulip.ZBot{
EmailID: "test@test.com",
APIKey: "api-key",
},
Type: "stream",
To: "general",
Topic: "test",
Content: "test content",
Domain: "user.zulipchat.com",
}
resp, err := zulip.SendZulipMessage(z.Domain, z)
assert.Nil(t, err)
assert.Equal(t, "success", resp.Result)
}
func TestSendMessageStream_Fail(t *testing.T) {
// build our response JSON
failureResponse, _ := json.Marshal(zulip.ZResponse{
Message: "Stream 'nonexistent_stream' does not exist",
Result: "error",
Code: "STREAM_DOES_NOT_EXIST",
})
// create a new reader with that JSON
r := ioutil.NopCloser(bytes.NewReader(failureResponse))
zulip.Client = &MockClient{
MockDo: func(*http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: 404,
Body: r,
}, nil
},
}
z := zulip.Zulip{
ZBot: zulip.ZBot{
EmailID: "test@test.com",
APIKey: "api-key",
},
Type: "stream",
To: "general",
Topic: "test",
Content: "test content",
Domain: "user.zulipchat.com",
}
resp, err := zulip.SendZulipMessage(z.Domain, z)
assert.Nil(t, err)
assert.Equal(t, "error", resp.Result)
}
func TestSendMessagePrivate_Fail(t *testing.T) {
// build our response JSON
failureResponse, _ := json.Marshal(zulip.ZResponse{
Message: "some error",
Result: "error",
Code: "BAD_REQUEST",
})
// create a new reader with that JSON
r := ioutil.NopCloser(bytes.NewReader(failureResponse))
zulip.Client = &MockClient{
MockDo: func(*http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: 404,
Body: r,
}, nil
},
}
z := zulip.Zulip{
ZBot: zulip.ZBot{
EmailID: "test@test.com",
APIKey: "api-key",
},
Type: "private",
To: "1,2",
Topic: "test",
Content: "test content",
Domain: "user.zulipchat.com",
}
resp, err := zulip.SendZulipMessage(z.Domain, z)
assert.Nil(t, err)
assert.Equal(t, "error", resp.Result)
}
func TestSendMessagePrivate_Success(t *testing.T) {
// build our response JSON
successResponse, _ := json.Marshal(zulip.ZResponse{
Message: "",
Result: "success",
ID: 1,
})
// create a new reader with that JSON
r := ioutil.NopCloser(bytes.NewReader(successResponse))
zulip.Client = &MockClient{
MockDo: func(*http.Request) (*http.Response, error) {
return &http.Response{
StatusCode: 200,
Body: r,
}, nil
},
}
z := zulip.Zulip{
ZBot: zulip.ZBot{
EmailID: "test@test.com",
APIKey: "api-key",
},
Type: "private",
To: "1,2",
Topic: "test",
Content: "test content",
Domain: "user.zulipchat.com",
}
resp, err := zulip.SendZulipMessage(z.Domain, z)
assert.Nil(t, err)
assert.Equal(t, "success", resp.Result)
}