github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/api4/status_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package api4 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 12 "github.com/masterhung0112/hk_server/v5/model" 13 ) 14 15 func TestGetUserStatus(t *testing.T) { 16 th := Setup(t).InitBasic() 17 defer th.TearDown() 18 Client := th.Client 19 20 t.Run("offline status", func(t *testing.T) { 21 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 22 CheckNoError(t, resp) 23 assert.Equal(t, "offline", userStatus.Status) 24 }) 25 26 t.Run("online status", func(t *testing.T) { 27 th.App.SetStatusOnline(th.BasicUser.Id, true) 28 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 29 CheckNoError(t, resp) 30 assert.Equal(t, "online", userStatus.Status) 31 }) 32 33 t.Run("away status", func(t *testing.T) { 34 th.App.SetStatusAwayIfNeeded(th.BasicUser.Id, true) 35 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 36 CheckNoError(t, resp) 37 assert.Equal(t, "away", userStatus.Status) 38 }) 39 40 t.Run("dnd status", func(t *testing.T) { 41 th.App.SetStatusDoNotDisturb(th.BasicUser.Id) 42 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 43 CheckNoError(t, resp) 44 assert.Equal(t, "dnd", userStatus.Status) 45 }) 46 47 t.Run("dnd status timed", func(t *testing.T) { 48 th.App.SetStatusDoNotDisturbTimed(th.BasicUser.Id, time.Now().Add(10*time.Minute).Unix()) 49 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 50 CheckNoError(t, resp) 51 assert.Equal(t, "dnd", userStatus.Status) 52 }) 53 54 t.Run("dnd status timed restore after time interval", func(t *testing.T) { 55 task := model.CreateRecurringTaskFromNextIntervalTime("Unset DND Statuses From Test", th.App.UpdateDNDStatusOfUsers, 1*time.Second) 56 defer task.Cancel() 57 th.App.SetStatusOnline(th.BasicUser.Id, true) 58 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 59 CheckNoError(t, resp) 60 assert.Equal(t, "online", userStatus.Status) 61 th.App.SetStatusDoNotDisturbTimed(th.BasicUser.Id, time.Now().Add(2*time.Second).Unix()) 62 userStatus, resp = Client.GetUserStatus(th.BasicUser.Id, "") 63 CheckNoError(t, resp) 64 assert.Equal(t, "dnd", userStatus.Status) 65 time.Sleep(3 * time.Second) 66 userStatus, resp = Client.GetUserStatus(th.BasicUser.Id, "") 67 CheckNoError(t, resp) 68 assert.Equal(t, "online", userStatus.Status) 69 }) 70 t.Run("back to offline status", func(t *testing.T) { 71 th.App.SetStatusOffline(th.BasicUser.Id, true) 72 userStatus, resp := Client.GetUserStatus(th.BasicUser.Id, "") 73 CheckNoError(t, resp) 74 assert.Equal(t, "offline", userStatus.Status) 75 }) 76 77 t.Run("get other user status", func(t *testing.T) { 78 //Get user2 status logged as user1 79 userStatus, resp := Client.GetUserStatus(th.BasicUser2.Id, "") 80 CheckNoError(t, resp) 81 assert.Equal(t, "offline", userStatus.Status) 82 }) 83 84 t.Run("get status from logged out user", func(t *testing.T) { 85 Client.Logout() 86 _, resp := Client.GetUserStatus(th.BasicUser2.Id, "") 87 CheckUnauthorizedStatus(t, resp) 88 }) 89 90 t.Run("get status from other user", func(t *testing.T) { 91 th.LoginBasic2() 92 userStatus, resp := Client.GetUserStatus(th.BasicUser2.Id, "") 93 CheckNoError(t, resp) 94 assert.Equal(t, "offline", userStatus.Status) 95 }) 96 } 97 98 func TestGetUsersStatusesByIds(t *testing.T) { 99 th := Setup(t).InitBasic() 100 defer th.TearDown() 101 Client := th.Client 102 103 usersIds := []string{th.BasicUser.Id, th.BasicUser2.Id} 104 105 t.Run("empty userIds list", func(t *testing.T) { 106 _, resp := Client.GetUsersStatusesByIds([]string{}) 107 CheckBadRequestStatus(t, resp) 108 }) 109 110 t.Run("completely invalid userIds list", func(t *testing.T) { 111 _, resp := Client.GetUsersStatusesByIds([]string{"invalid_user_id", "invalid_user_id"}) 112 CheckBadRequestStatus(t, resp) 113 }) 114 115 t.Run("partly invalid userIds list", func(t *testing.T) { 116 _, resp := Client.GetUsersStatusesByIds([]string{th.BasicUser.Id, "invalid_user_id"}) 117 CheckBadRequestStatus(t, resp) 118 }) 119 120 t.Run("offline status", func(t *testing.T) { 121 usersStatuses, resp := Client.GetUsersStatusesByIds(usersIds) 122 CheckNoError(t, resp) 123 for _, userStatus := range usersStatuses { 124 assert.Equal(t, "offline", userStatus.Status) 125 } 126 }) 127 128 t.Run("online status", func(t *testing.T) { 129 th.App.SetStatusOnline(th.BasicUser.Id, true) 130 th.App.SetStatusOnline(th.BasicUser2.Id, true) 131 usersStatuses, resp := Client.GetUsersStatusesByIds(usersIds) 132 CheckNoError(t, resp) 133 for _, userStatus := range usersStatuses { 134 assert.Equal(t, "online", userStatus.Status) 135 } 136 }) 137 138 t.Run("away status", func(t *testing.T) { 139 th.App.SetStatusAwayIfNeeded(th.BasicUser.Id, true) 140 th.App.SetStatusAwayIfNeeded(th.BasicUser2.Id, true) 141 usersStatuses, resp := Client.GetUsersStatusesByIds(usersIds) 142 CheckNoError(t, resp) 143 for _, userStatus := range usersStatuses { 144 assert.Equal(t, "away", userStatus.Status) 145 } 146 }) 147 148 t.Run("dnd status", func(t *testing.T) { 149 th.App.SetStatusDoNotDisturb(th.BasicUser.Id) 150 th.App.SetStatusDoNotDisturb(th.BasicUser2.Id) 151 usersStatuses, resp := Client.GetUsersStatusesByIds(usersIds) 152 CheckNoError(t, resp) 153 for _, userStatus := range usersStatuses { 154 assert.Equal(t, "dnd", userStatus.Status) 155 } 156 }) 157 158 t.Run("dnd status", func(t *testing.T) { 159 th.App.SetStatusDoNotDisturbTimed(th.BasicUser.Id, time.Now().Add(10*time.Minute).Unix()) 160 th.App.SetStatusDoNotDisturbTimed(th.BasicUser2.Id, time.Now().Add(15*time.Minute).Unix()) 161 usersStatuses, resp := Client.GetUsersStatusesByIds(usersIds) 162 CheckNoError(t, resp) 163 for _, userStatus := range usersStatuses { 164 assert.Equal(t, "dnd", userStatus.Status) 165 } 166 }) 167 168 t.Run("get statuses from logged out user", func(t *testing.T) { 169 Client.Logout() 170 171 _, resp := Client.GetUsersStatusesByIds(usersIds) 172 CheckUnauthorizedStatus(t, resp) 173 }) 174 } 175 176 func TestUpdateUserStatus(t *testing.T) { 177 th := Setup(t).InitBasic() 178 defer th.TearDown() 179 Client := th.Client 180 181 t.Run("set online status", func(t *testing.T) { 182 toUpdateUserStatus := &model.Status{Status: "online", UserId: th.BasicUser.Id} 183 updateUserStatus, resp := Client.UpdateUserStatus(th.BasicUser.Id, toUpdateUserStatus) 184 CheckNoError(t, resp) 185 assert.Equal(t, "online", updateUserStatus.Status) 186 }) 187 188 t.Run("set away status", func(t *testing.T) { 189 toUpdateUserStatus := &model.Status{Status: "away", UserId: th.BasicUser.Id} 190 updateUserStatus, resp := Client.UpdateUserStatus(th.BasicUser.Id, toUpdateUserStatus) 191 CheckNoError(t, resp) 192 assert.Equal(t, "away", updateUserStatus.Status) 193 }) 194 195 t.Run("set dnd status timed", func(t *testing.T) { 196 toUpdateUserStatus := &model.Status{Status: "dnd", UserId: th.BasicUser.Id, DNDEndTime: time.Now().Add(10 * time.Minute).Unix()} 197 updateUserStatus, resp := Client.UpdateUserStatus(th.BasicUser.Id, toUpdateUserStatus) 198 CheckNoError(t, resp) 199 assert.Equal(t, "dnd", updateUserStatus.Status) 200 }) 201 202 t.Run("set offline status", func(t *testing.T) { 203 toUpdateUserStatus := &model.Status{Status: "offline", UserId: th.BasicUser.Id} 204 updateUserStatus, resp := Client.UpdateUserStatus(th.BasicUser.Id, toUpdateUserStatus) 205 CheckNoError(t, resp) 206 assert.Equal(t, "offline", updateUserStatus.Status) 207 }) 208 209 t.Run("set status for other user as regular user", func(t *testing.T) { 210 toUpdateUserStatus := &model.Status{Status: "online", UserId: th.BasicUser2.Id} 211 _, resp := Client.UpdateUserStatus(th.BasicUser2.Id, toUpdateUserStatus) 212 CheckForbiddenStatus(t, resp) 213 }) 214 215 t.Run("set status for other user as admin user", func(t *testing.T) { 216 toUpdateUserStatus := &model.Status{Status: "online", UserId: th.BasicUser2.Id} 217 updateUserStatus, _ := th.SystemAdminClient.UpdateUserStatus(th.BasicUser2.Id, toUpdateUserStatus) 218 assert.Equal(t, "online", updateUserStatus.Status) 219 }) 220 221 t.Run("not matching status user id and the user id passed in the function", func(t *testing.T) { 222 toUpdateUserStatus := &model.Status{Status: "online", UserId: th.BasicUser2.Id} 223 _, resp := Client.UpdateUserStatus(th.BasicUser.Id, toUpdateUserStatus) 224 CheckBadRequestStatus(t, resp) 225 }) 226 227 t.Run("get statuses from logged out user", func(t *testing.T) { 228 toUpdateUserStatus := &model.Status{Status: "online", UserId: th.BasicUser2.Id} 229 Client.Logout() 230 231 _, resp := Client.UpdateUserStatus(th.BasicUser2.Id, toUpdateUserStatus) 232 CheckUnauthorizedStatus(t, resp) 233 }) 234 }