From 5bf6ae04dfedc2e504ea8af5c71b2e9a8287e2b5 Mon Sep 17 00:00:00 2001 From: Carlos Tadeu Panato Junior Date: Fri, 24 Mar 2017 18:23:32 +0100 Subject: [APIV4] GET /users/{user_id}/status - user status endpoint for apiV4 (#5824) --- api4/api.go | 1 + api4/status.go | 40 ++++++++++++++++++++++++++++++++++++++ api4/status_test.go | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 api4/status.go create mode 100644 api4/status_test.go (limited to 'api4') diff --git a/api4/api.go b/api4/api.go index 1ff4fa10e..6a55fbcbb 100644 --- a/api4/api.go +++ b/api4/api.go @@ -171,6 +171,7 @@ func InitApi(full bool) { InitLdap() InitBrand() InitCommand() + InitStatus() app.Srv.Router.Handle("/api/v4/{anything:.*}", http.HandlerFunc(Handle404)) diff --git a/api4/status.go b/api4/status.go new file mode 100644 index 000000000..5cd6a4536 --- /dev/null +++ b/api4/status.go @@ -0,0 +1,40 @@ +// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package api4 + +import ( + "net/http" + + l4g "github.com/alecthomas/log4go" + + "github.com/mattermost/platform/app" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" +) + +func InitStatus() { + l4g.Debug(utils.T("api.status.init.debug")) + + BaseRoutes.User.Handle("/status", ApiHandler(getUserStatus)).Methods("GET") + +} + +func getUserStatus(c *Context, w http.ResponseWriter, r *http.Request) { + c.RequireUserId() + if c.Err != nil { + return + } + + if statusMap, err := app.GetUserStatusesByIds([]string{c.Params.UserId}); err != nil { + c.Err = err + return + } else { + if len(statusMap) == 0 { + c.Err = model.NewAppError("UserStatus", "api.status.user_not_found.app_error", nil, "", http.StatusNotFound) + return + } else { + w.Write([]byte(statusMap[0].ToJson())) + } + } +} diff --git a/api4/status_test.go b/api4/status_test.go new file mode 100644 index 000000000..da56ae435 --- /dev/null +++ b/api4/status_test.go @@ -0,0 +1,55 @@ +package api4 + +import ( + "testing" + + "github.com/mattermost/platform/app" +) + +func TestGetUserStatus(t *testing.T) { + th := Setup().InitBasic() + defer TearDown() + Client := th.Client + + userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "offline" { + t.Fatal("Should return offline status") + } + + app.SetStatusOnline(th.BasicUser.Id, "", true) + userStatus, resp = Client.GetUserStatus(th.BasicUser.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "online" { + t.Fatal("Should return online status") + } + + app.SetStatusAwayIfNeeded(th.BasicUser.Id, true) + userStatus, resp = Client.GetUserStatus(th.BasicUser.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "away" { + t.Fatal("Should return away status") + } + + app.SetStatusOffline(th.BasicUser.Id, true) + userStatus, resp = Client.GetUserStatus(th.BasicUser.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "offline" { + t.Fatal("Should return offline status") + } + + //Get user2 status logged as user1 + userStatus, resp = Client.GetUserStatus(th.BasicUser2.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "offline" { + t.Fatal("Should return offline status") + } + + Client.Logout() + th.LoginBasic2() + userStatus, resp = Client.GetUserStatus(th.BasicUser2.Id, "") + CheckNoError(t, resp) + if userStatus.Status != "offline" { + t.Fatal("Should return offline status") + } +} -- cgit v1.2.3-1-g7c22