diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-01-30 08:30:02 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-30 08:30:02 -0500 |
commit | c01d9ad6cf3f8bb2ad4145441816598d8ffa2d9e (patch) | |
tree | f995a08e296b5088df2a882ab70251c7b2b8cfe7 /api4/apitestlib.go | |
parent | 3e2f879b77b9b9d089bc8f83304b8b21b83c5bd9 (diff) | |
download | chat-c01d9ad6cf3f8bb2ad4145441816598d8ffa2d9e.tar.gz chat-c01d9ad6cf3f8bb2ad4145441816598d8ffa2d9e.tar.bz2 chat-c01d9ad6cf3f8bb2ad4145441816598d8ffa2d9e.zip |
Implement APIv4 infrastructure (#5191)
* Implement APIv4 infrastructure
* Update parameter requirement functions per feedback
Diffstat (limited to 'api4/apitestlib.go')
-rw-r--r-- | api4/apitestlib.go | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/api4/apitestlib.go b/api4/apitestlib.go new file mode 100644 index 000000000..05e8d76fe --- /dev/null +++ b/api4/apitestlib.go @@ -0,0 +1,211 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api4 + +import ( + "net/http" + "reflect" + "strconv" + "strings" + "testing" + + "github.com/mattermost/platform/app" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/store" + "github.com/mattermost/platform/utils" +) + +type TestHelper struct { + Client *model.Client4 + BasicUser *model.User + SystemAdminUser *model.User +} + +func Setup() *TestHelper { + if app.Srv == nil { + utils.TranslationsPreInit() + utils.LoadConfig("config.json") + utils.InitTranslations(utils.Cfg.LocalizationSettings) + utils.Cfg.TeamSettings.MaxUsersPerTeam = 50 + *utils.Cfg.RateLimitSettings.Enable = false + utils.Cfg.EmailSettings.SendEmailNotifications = true + utils.Cfg.EmailSettings.SMTPServer = "dockerhost" + utils.Cfg.EmailSettings.SMTPPort = "2500" + utils.Cfg.EmailSettings.FeedbackEmail = "test@example.com" + utils.DisableDebugLogForTest() + app.NewServer() + app.InitStores() + InitRouter() + app.StartServer() + InitApi(true) + utils.EnableDebugLogForTest() + app.Srv.Store.MarkSystemRanUnitTests() + + *utils.Cfg.TeamSettings.EnableOpenServer = true + } + + th := &TestHelper{} + th.Client = th.CreateClient() + return th +} + +func (me *TestHelper) InitBasic() *TestHelper { + me.BasicUser = me.CreateUser() + app.UpdateUserRoles(me.BasicUser.Id, model.ROLE_SYSTEM_USER.Id) + me.LoginBasic() + + return me +} + +func (me *TestHelper) InitSystemAdmin() *TestHelper { + me.SystemAdminUser = me.CreateUser() + app.UpdateUserRoles(me.SystemAdminUser.Id, model.ROLE_SYSTEM_USER.Id+" "+model.ROLE_SYSTEM_ADMIN.Id) + + return me +} + +func (me *TestHelper) CreateClient() *model.Client4 { + return model.NewAPIv4Client("http://localhost" + utils.Cfg.ServiceSettings.ListenAddress) +} + +func (me *TestHelper) CreateUser() *model.User { + id := model.NewId() + + user := &model.User{ + Email: GenerateTestEmail(), + Username: GenerateTestUsername(), + Nickname: "nn_" + id, + FirstName: "f_" + id, + LastName: "l_" + id, + Password: "Password1", + } + + utils.DisableDebugLogForTest() + ruser, _ := me.Client.CreateUser(user) + ruser.Password = "Password1" + VerifyUserEmail(ruser.Id) + utils.EnableDebugLogForTest() + return ruser +} + +func (me *TestHelper) LoginBasic() { + utils.DisableDebugLogForTest() + me.Client.Login(me.BasicUser.Email, me.BasicUser.Password) + utils.EnableDebugLogForTest() +} + +func (me *TestHelper) LoginSystemAdmin() { + utils.DisableDebugLogForTest() + me.Client.Login(me.SystemAdminUser.Email, me.SystemAdminUser.Password) + utils.EnableDebugLogForTest() +} + +func GenerateTestEmail() string { + return strings.ToLower("success+" + model.NewId() + "@simulator.amazonses.com") +} + +func GenerateTestUsername() string { + return "n" + model.NewId() +} + +func VerifyUserEmail(userId string) { + store.Must(app.Srv.Store.User().VerifyEmail(userId)) +} + +func CheckUserSanitization(t *testing.T, user *model.User) { + if user.Password != "" { + t.Fatal("password wasn't blank") + } + + if user.AuthData != nil && *user.AuthData != "" { + t.Fatal("auth data wasn't blank") + } + + if user.MfaSecret != "" { + t.Fatal("mfa secret wasn't blank") + } +} + +func CheckEtag(t *testing.T, data interface{}, resp *model.Response) { + if !reflect.ValueOf(data).IsNil() { + t.Fatal("etag data was not nil") + } + + if resp.StatusCode != http.StatusNotModified { + t.Log("actual: " + strconv.Itoa(resp.StatusCode)) + t.Log("expected: " + strconv.Itoa(http.StatusNotModified)) + t.Fatal("wrong status code for etag") + } +} + +func CheckNoError(t *testing.T, resp *model.Response) { + if resp.Error != nil { + t.Fatal(resp.Error) + } +} + +func CheckForbiddenStatus(t *testing.T, resp *model.Response) { + if resp.Error == nil { + t.Fatal("should have errored with status:" + strconv.Itoa(http.StatusForbidden)) + return + } + + if resp.StatusCode != http.StatusForbidden { + t.Log("actual: " + strconv.Itoa(resp.StatusCode)) + t.Log("expected: " + strconv.Itoa(http.StatusForbidden)) + t.Fatal("wrong status code") + } +} + +func CheckUnauthorizedStatus(t *testing.T, resp *model.Response) { + if resp.Error == nil { + t.Fatal("should have errored with status:" + strconv.Itoa(http.StatusUnauthorized)) + return + } + + if resp.StatusCode != http.StatusUnauthorized { + t.Log("actual: " + strconv.Itoa(resp.StatusCode)) + t.Log("expected: " + strconv.Itoa(http.StatusUnauthorized)) + t.Fatal("wrong status code") + } +} + +func CheckNotFoundStatus(t *testing.T, resp *model.Response) { + if resp.Error == nil { + t.Fatal("should have errored with status:" + strconv.Itoa(http.StatusNotFound)) + return + } + + if resp.StatusCode != http.StatusNotFound { + t.Log("actual: " + strconv.Itoa(resp.StatusCode)) + t.Log("expected: " + strconv.Itoa(http.StatusNotFound)) + t.Fatal("wrong status code") + } +} + +func CheckBadRequestStatus(t *testing.T, resp *model.Response) { + if resp.Error == nil { + t.Fatal("should have errored with status:" + strconv.Itoa(http.StatusBadRequest)) + return + } + + if resp.StatusCode != http.StatusBadRequest { + t.Log("actual: " + strconv.Itoa(resp.StatusCode)) + t.Log("expected: " + strconv.Itoa(http.StatusBadRequest)) + t.Fatal("wrong status code") + } +} + +func CheckErrorMessage(t *testing.T, resp *model.Response, message string) { + if resp.Error == nil { + t.Fatal("should have errored with message:" + message) + return + } + + if resp.Error.Message != message { + t.Log("actual: " + resp.Error.Message) + t.Log("expected: " + message) + t.Fatal("incorrect error message") + } +} |