From 5ee308bd8331d2929e6ac2f255ea6349daa4eded Mon Sep 17 00:00:00 2001 From: Ben Schumacher Date: Tue, 29 Apr 2025 08:50:47 +0200 Subject: [PATCH] [MM-61467] Fix errcheck linter issues in post_test.go (#30686) --- server/.golangci.yml | 1 - server/channels/app/post_test.go | 333 +++++++++++++++++-------------- 2 files changed, 184 insertions(+), 150 deletions(-) diff --git a/server/.golangci.yml b/server/.golangci.yml index e70d701f5f..d4f6f21c15 100644 --- a/server/.golangci.yml +++ b/server/.golangci.yml @@ -99,7 +99,6 @@ issues: channels/app/platform/session.go|\ channels/app/platform/status.go|\ channels/app/platform/web_hub_test.go|\ - channels/app/post_test.go|\ channels/app/slashcommands/command_test.go|\ channels/app/slashcommands/helper_test.go|\ channels/app/team.go|\ diff --git a/server/channels/app/post_test.go b/server/channels/app/post_test.go index 4fef95eeb4..5f67cb5f6f 100644 --- a/server/channels/app/post_test.go +++ b/server/channels/app/post_test.go @@ -324,7 +324,8 @@ func TestUpdatePostInArchivedChannel(t *testing.T) { archivedChannel := th.CreateChannel(th.Context, th.BasicTeam) post := th.CreatePost(archivedChannel) - th.App.DeleteChannel(th.Context, archivedChannel, "") + appErr := th.App.DeleteChannel(th.Context, archivedChannel, "") + require.Nil(t, appErr) _, err := th.App.UpdatePost(th.Context, post, &model.UpdatePostOptions{SafeUpdate: true}) require.NotNil(t, err) @@ -560,6 +561,10 @@ func TestPostChannelMentions(t *testing.T) { TeamId: th.BasicTeam.Id, }, false) require.Nil(t, err) + defer func() { + appErr := th.App.PermanentDeleteChannel(th.Context, channelToMention) + require.Nil(t, appErr) + }() channelToMention2, err := th.App.CreateChannel(th.Context, &model.Channel{ DisplayName: "Mention Test2", Name: "mention-test2", @@ -567,8 +572,10 @@ func TestPostChannelMentions(t *testing.T) { TeamId: th.BasicTeam.Id, }, false) require.Nil(t, err) - defer th.App.PermanentDeleteChannel(th.Context, channelToMention) - defer th.App.PermanentDeleteChannel(th.Context, channelToMention2) + defer func() { + appErr := th.App.PermanentDeleteChannel(th.Context, channelToMention2) + require.Nil(t, appErr) + }() _, err = th.App.AddUserToChannel(th.Context, user, channel, false) require.Nil(t, err) @@ -743,8 +750,10 @@ func TestDeletePostWithFileAttachments(t *testing.T) { info1, err := th.App.DoUploadFile(th.Context, time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelID, userID, filename, data, true) require.Nil(t, err) defer func() { - th.App.Srv().Store().FileInfo().PermanentDelete(th.Context, info1.Id) - th.App.RemoveFile(info1.Path) + err := th.App.Srv().Store().FileInfo().PermanentDelete(th.Context, info1.Id) + require.NoError(t, err) + appErr := th.App.RemoveFile(info1.Path) + require.Nil(t, appErr) }() post := &model.Post{ @@ -777,7 +786,8 @@ func TestDeletePostInArchivedChannel(t *testing.T) { archivedChannel := th.CreateChannel(th.Context, th.BasicTeam) post := th.CreatePost(archivedChannel) - th.App.DeleteChannel(th.Context, archivedChannel, "") + appErr := th.App.DeleteChannel(th.Context, archivedChannel, "") + require.Nil(t, appErr) _, err := th.App.DeletePost(th.Context, post.Id, "") require.NotNil(t, err) @@ -1007,8 +1017,8 @@ func TestCreatePost(t *testing.T) { user1 := th.CreateUser() user2 := th.CreateUser() - dm, err := th.App.createDirectChannel(th.Context, user1.Id, user2.Id) - require.Nil(t, err) + dm, appErr := th.App.createDirectChannel(th.Context, user1.Id, user2.Id) + require.Nil(t, appErr) require.NotNil(t, dm) // we can't create direct channels with remote users, so we @@ -1027,16 +1037,16 @@ func TestCreatePost(t *testing.T) { // and we update the channel to mark it as shared dm.Shared = model.NewPointer(true) - _, cErr := th.Server.Store().Channel().Update(th.Context, dm) - require.NoError(t, cErr) + _, err := th.Server.Store().Channel().Update(th.Context, dm) + require.NoError(t, err) newPost := &model.Post{ ChannelId: dm.Id, Message: "hello world", UserId: user1.Id, } - createdPost, err := th.App.CreatePost(th.Context, newPost, dm, model.CreatePostFlags{}) - require.NotNil(t, err) + createdPost, appErr := th.App.CreatePost(th.Context, newPost, dm, model.CreatePostFlags{}) + require.NotNil(t, appErr) require.Nil(t, createdPost) }) @@ -1047,8 +1057,8 @@ func TestCreatePost(t *testing.T) { user1 := th.CreateUser() user2 := th.CreateUser() user3 := th.CreateUser() - gm, gErr := th.App.createGroupChannel(th.Context, []string{user1.Id, user2.Id, user3.Id}) - require.Nil(t, gErr) + gm, appErr := th.App.createGroupChannel(th.Context, []string{user1.Id, user2.Id, user3.Id}) + require.Nil(t, appErr) require.NotNil(t, gm) // we can't create group channels with remote users, so we @@ -1062,21 +1072,21 @@ func TestCreatePost(t *testing.T) { CreatorId: user1.Id, RemoteId: model.NewId(), } - _, scErr := th.Server.Store().SharedChannel().Save(sc) - require.NoError(t, scErr) + _, err := th.Server.Store().SharedChannel().Save(sc) + require.NoError(t, err) // and we update the channel to mark it as shared gm.Shared = model.NewPointer(true) - _, cErr := th.Server.Store().Channel().Update(th.Context, gm) - require.NoError(t, cErr) + _, err = th.Server.Store().Channel().Update(th.Context, gm) + require.NoError(t, err) newPost := &model.Post{ ChannelId: gm.Id, Message: "hello world", UserId: user1.Id, } - createdPost, err := th.App.CreatePost(th.Context, newPost, gm, model.CreatePostFlags{}) - require.NotNil(t, err) + createdPost, appErr := th.App.CreatePost(th.Context, newPost, gm, model.CreatePostFlags{}) + require.NotNil(t, appErr) require.Nil(t, createdPost) }) @@ -1123,7 +1133,8 @@ func TestCreatePost(t *testing.T) { go func() { defer wg.Done() post := previewPost.Clone() - th.App.UpdatePost(th.Context, post, nil) + _, appErr := th.App.UpdatePost(th.Context, post, nil) + require.Nil(t, appErr) }() } @@ -1315,15 +1326,15 @@ func TestCreatePostAsUser(t *testing.T) { UserId: bot.UserId, } - channelMemberBefore, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberBefore, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) time.Sleep(1 * time.Millisecond) _, appErr = th.App.CreatePostAsUser(th.Context, post, "", true) require.Nil(t, appErr) - channelMemberAfter, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberAfter, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) require.Equal(t, channelMemberAfter.LastViewedAt, channelMemberBefore.LastViewedAt) }) @@ -1369,8 +1380,8 @@ func TestCreatePostAsUser(t *testing.T) { rootPost, appErr := th.App.CreatePostAsUser(th.Context, post, "", true) require.Nil(t, appErr) - channelMemberBefore, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberBefore, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) time.Sleep(1 * time.Millisecond) replyPost := &model.Post{ @@ -1382,8 +1393,8 @@ func TestCreatePostAsUser(t *testing.T) { _, appErr = th.App.CreatePostAsUser(th.Context, replyPost, "", true) require.Nil(t, appErr) - channelMemberAfter, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberAfter, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) require.NotEqual(t, channelMemberAfter.LastViewedAt, channelMemberBefore.LastViewedAt) }) @@ -1405,8 +1416,8 @@ func TestCreatePostAsUser(t *testing.T) { rootPost, appErr := th.App.CreatePostAsUser(th.Context, post, "", true) require.Nil(t, appErr) - channelMemberBefore, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberBefore, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) time.Sleep(1 * time.Millisecond) replyPost := &model.Post{ @@ -1418,8 +1429,8 @@ func TestCreatePostAsUser(t *testing.T) { _, appErr = th.App.CreatePostAsUser(th.Context, replyPost, "", true) require.Nil(t, appErr) - channelMemberAfter, nErr := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) - require.NoError(t, nErr) + channelMemberAfter, err := th.App.Srv().Store().Channel().GetMember(context.Background(), th.BasicChannel.Id, th.BasicUser.Id) + require.NoError(t, err) require.Equal(t, channelMemberAfter.LastViewedAt, channelMemberBefore.LastViewedAt) }) @@ -1431,7 +1442,8 @@ func TestPatchPostInArchivedChannel(t *testing.T) { archivedChannel := th.CreateChannel(th.Context, th.BasicTeam) post := th.CreatePost(archivedChannel) - th.App.DeleteChannel(th.Context, archivedChannel, "") + appErr := th.App.DeleteChannel(th.Context, archivedChannel, "") + require.Nil(t, appErr) _, err := th.App.PatchPost(th.Context, post.Id, &model.PostPatch{IsPinned: model.NewPointer(true)}, nil) require.NotNil(t, err) @@ -2780,33 +2792,34 @@ func TestFollowThreadSkipsParticipants(t *testing.T) { appErr = th.App.JoinChannel(th.Context, channel, sysadmin.Id) require.Nil(t, appErr) - p1, err := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + sysadmin.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + p1, appErr := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + sysadmin.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) - threadMembership, err := th.App.GetThreadMembershipForUser(user.Id, p1.Id) - require.Nil(t, err) - thread, err := th.App.GetThreadForUser(threadMembership, false) - require.Nil(t, err) + threadMembership, appErr := th.App.GetThreadMembershipForUser(user.Id, p1.Id) + require.Nil(t, appErr) + thread, appErr := th.App.GetThreadForUser(threadMembership, false) + require.Nil(t, appErr) require.Len(t, thread.Participants, 1) // length should be 1, the original poster, since sysadmin was just mentioned but didn't post - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: sysadmin.Id, ChannelId: channel.Id, Message: "sysadmin reply"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: sysadmin.Id, ChannelId: channel.Id, Message: "sysadmin reply"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) - threadMembership, err = th.App.GetThreadMembershipForUser(user.Id, p1.Id) - require.Nil(t, err) - thread, err = th.App.GetThreadForUser(threadMembership, false) - require.Nil(t, err) + threadMembership, appErr = th.App.GetThreadMembershipForUser(user.Id, p1.Id) + require.Nil(t, appErr) + thread, appErr = th.App.GetThreadForUser(threadMembership, false) + require.Nil(t, appErr) require.Len(t, thread.Participants, 2) // length should be 2, the original poster and sysadmin, since sysadmin participated now // another user follows the thread - th.App.UpdateThreadFollowForUser(user2.Id, th.BasicTeam.Id, p1.Id, true) + appErr = th.App.UpdateThreadFollowForUser(user2.Id, th.BasicTeam.Id, p1.Id, true) + require.Nil(t, appErr) - threadMembership, err = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) - require.Nil(t, err) - thread, err = th.App.GetThreadForUser(threadMembership, false) - require.Nil(t, err) + threadMembership, appErr = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) + require.Nil(t, appErr) + thread, appErr = th.App.GetThreadForUser(threadMembership, false) + require.Nil(t, appErr) require.Len(t, thread.Participants, 2) // length should be 2, since follow shouldn't update participant list, only user1 and sysadmin are participants for _, p := range thread.Participants { require.True(t, p.Id == sysadmin.Id || p.Id == user.Id) @@ -2814,15 +2827,15 @@ func TestFollowThreadSkipsParticipants(t *testing.T) { oldID := threadMembership.PostId threadMembership.PostId = "notfound" - _, err = th.App.GetThreadForUser(threadMembership, false) - require.NotNil(t, err) - assert.Equal(t, http.StatusNotFound, err.StatusCode) + _, appErr = th.App.GetThreadForUser(threadMembership, false) + require.NotNil(t, appErr) + assert.Equal(t, http.StatusNotFound, appErr.StatusCode) threadMembership.Following = false threadMembership.PostId = oldID - _, err = th.App.GetThreadForUser(threadMembership, false) - require.NotNil(t, err) - assert.Equal(t, http.StatusNotFound, err.StatusCode) + _, appErr = th.App.GetThreadForUser(threadMembership, false) + require.NotNil(t, appErr) + assert.Equal(t, http.StatusNotFound, appErr.StatusCode) } func TestAutofollowBasedOnRootPost(t *testing.T) { @@ -2841,15 +2854,15 @@ func TestAutofollowBasedOnRootPost(t *testing.T) { require.Nil(t, appErr) appErr = th.App.JoinChannel(th.Context, channel, user2.Id) require.Nil(t, appErr) - p1, err := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - m, e := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) - require.NoError(t, e) + p1, appErr := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + m, err := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) + require.NoError(t, err) require.Len(t, m, 0) - _, err2 := th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) - require.Nil(t, err2) - m, e = th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) - require.NoError(t, e) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + m, err = th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) + require.NoError(t, err) require.Len(t, m, 1) } @@ -2869,20 +2882,21 @@ func TestViewChannelShouldNotUpdateThreads(t *testing.T) { require.Nil(t, appErr) appErr = th.App.JoinChannel(th.Context, channel, user2.Id) require.Nil(t, appErr) - p1, err := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - _, err2 := th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) - require.Nil(t, err2) - m, e := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) - require.NoError(t, e) + p1, appErr := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + m, err := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) + require.NoError(t, err) - th.App.ViewChannel(th.Context, &model.ChannelView{ + _, appErr = th.App.ViewChannel(th.Context, &model.ChannelView{ ChannelId: channel.Id, PrevChannelId: "", }, user2.Id, "", true) + require.Nil(t, appErr) - m1, e1 := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) - require.NoError(t, e1) + m1, err := th.App.GetThreadMembershipsForUser(user2.Id, th.BasicTeam.Id) + require.NoError(t, err) require.Equal(t, m[0].LastViewed, m1[0].LastViewed) // opening the channel shouldn't update threads } @@ -2900,28 +2914,32 @@ func TestCollapsedThreadFetch(t *testing.T) { t.Run("should only return root posts, enriched", func(t *testing.T) { channel := th.CreateChannel(th.Context, th.BasicTeam) th.AddUserToChannel(user2, channel) - defer th.App.DeleteChannel(th.Context, channel, user1.Id) + defer func() { + appErr := th.App.DeleteChannel(th.Context, channel, user1.Id) + require.Nil(t, appErr) + }() - postRoot, err := th.App.CreatePost(th.Context, &model.Post{ + postRoot, appErr := th.App.CreatePost(th.Context, &model.Post{ UserId: user1.Id, ChannelId: channel.Id, Message: "root post", }, channel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, err) + require.Nil(t, appErr) - _, err = th.App.CreatePost(th.Context, &model.Post{ + _, appErr = th.App.CreatePost(th.Context, &model.Post{ UserId: user1.Id, ChannelId: channel.Id, RootId: postRoot.Id, Message: fmt.Sprintf("@%s", user2.Username), }, channel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, err) - thread, nErr := th.App.Srv().Store().Thread().Get(postRoot.Id) - require.NoError(t, nErr) + require.Nil(t, appErr) + thread, err := th.App.Srv().Store().Thread().Get(postRoot.Id) + require.NoError(t, err) require.Len(t, thread.Participants, 1) - th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true) - l, err := th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, false) - require.Nil(t, err) + _, appErr = th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true) + require.Nil(t, appErr) + l, appErr := th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, false) + require.Nil(t, appErr) require.Len(t, l.Order, 1) require.EqualValues(t, 1, l.Posts[postRoot.Id].ReplyCount) require.EqualValues(t, []string{user1.Id}, []string{l.Posts[postRoot.Id].Participants[0].Id}) @@ -2930,8 +2948,8 @@ func TestCollapsedThreadFetch(t *testing.T) { require.True(t, *l.Posts[postRoot.Id].IsFollowing) // try extended fetch - l, err = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true) - require.Nil(t, err) + l, appErr = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true) + require.Nil(t, appErr) require.Len(t, l.Order, 1) require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email) }) @@ -2939,7 +2957,10 @@ func TestCollapsedThreadFetch(t *testing.T) { t.Run("Should not panic on unexpected db error", func(t *testing.T) { channel := th.CreateChannel(th.Context, th.BasicTeam) th.AddUserToChannel(user2, channel) - defer th.App.DeleteChannel(th.Context, channel, user1.Id) + defer func() { + appErr := th.App.DeleteChannel(th.Context, channel, user1.Id) + require.Nil(t, appErr) + }() postRoot, err := th.App.CreatePost(th.Context, &model.Post{ UserId: user1.Id, @@ -2953,11 +2974,14 @@ func TestCollapsedThreadFetch(t *testing.T) { wg.Add(1) go func() { defer wg.Done() - th.Server.Store().Post().PermanentDeleteByUser(th.Context, user1.Id) + err := th.Server.Store().Post().PermanentDeleteByUser(th.Context, user1.Id) + require.NoError(t, err) }() require.NotPanics(t, func() { - th.App.CreatePost(th.Context, &model.Post{ + // We're only testing that this doesn't panic, not checking the error + // #nosec G104 - purposely not checking error as we're in a NotPanics block + _, _ = th.App.CreatePost(th.Context, &model.Post{ UserId: user1.Id, ChannelId: channel.Id, RootId: postRoot.Id, @@ -2970,7 +2994,7 @@ func TestCollapsedThreadFetch(t *testing.T) { t.Run("should sanitize participant data", func(t *testing.T) { id := model.NewId() - user3, err := th.App.CreateUser(th.Context, &model.User{ + user3, appErr := th.App.CreateUser(th.Context, &model.User{ Email: "success+" + id + "@simulator.amazonses.com", Username: "un_" + id, Nickname: "nn_" + id, @@ -2978,34 +3002,41 @@ func TestCollapsedThreadFetch(t *testing.T) { AuthService: "saml", EmailVerified: true, }) - require.Nil(t, err) + require.Nil(t, appErr) + defer func() { + appErr = th.App.PermanentDeleteUser(th.Context, user3) + require.Nil(t, appErr) + }() channel := th.CreateChannel(th.Context, th.BasicTeam) + defer func() { + appErr = th.App.DeleteChannel(th.Context, channel, user1.Id) + require.Nil(t, appErr) + }() + th.LinkUserToTeam(user3, th.BasicTeam) th.AddUserToChannel(user3, channel) - defer th.App.DeleteChannel(th.Context, channel, user1.Id) - defer th.App.PermanentDeleteUser(th.Context, user3) - postRoot, err := th.App.CreatePost(th.Context, &model.Post{ + postRoot, appErr := th.App.CreatePost(th.Context, &model.Post{ UserId: user1.Id, ChannelId: channel.Id, Message: "root post", }, channel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, err) + require.Nil(t, appErr) - _, err = th.App.CreatePost(th.Context, &model.Post{ + _, appErr = th.App.CreatePost(th.Context, &model.Post{ UserId: user3.Id, ChannelId: channel.Id, RootId: postRoot.Id, Message: "reply", }, channel, model.CreatePostFlags{SetOnline: true}) - require.Nil(t, err) - thread, nErr := th.App.Srv().Store().Thread().Get(postRoot.Id) - require.NoError(t, nErr) + require.Nil(t, appErr) + thread, err := th.App.Srv().Store().Thread().Get(postRoot.Id) + require.NoError(t, err) require.Len(t, thread.Participants, 1) // extended fetch posts page - l, err := th.App.GetPostsPage(model.GetPostsOptions{ + l, appErr := th.App.GetPostsPage(model.GetPostsOptions{ UserId: user1.Id, ChannelId: channel.Id, PerPage: int(10), @@ -3013,16 +3044,17 @@ func TestCollapsedThreadFetch(t *testing.T) { CollapsedThreads: true, CollapsedThreadsExtended: true, }) - require.Nil(t, err) + require.Nil(t, appErr) require.Len(t, l.Order, 1) require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email) require.Empty(t, l.Posts[postRoot.Id].Participants[0].AuthData) - th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true) + _, appErr = th.App.MarkChannelAsUnreadFromPost(th.Context, postRoot.Id, user1.Id, true) + require.Nil(t, appErr) // extended fetch posts around - l, err = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true) - require.Nil(t, err) + l, appErr = th.App.GetPostsForChannelAroundLastUnread(th.Context, channel.Id, user1.Id, 10, 10, true, true, true) + require.Nil(t, appErr) require.Len(t, l.Order, 1) require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email) require.Empty(t, l.Posts[postRoot.Id].Participants[0].AuthData) @@ -3034,8 +3066,8 @@ func TestCollapsedThreadFetch(t *testing.T) { CollapsedThreadsExtended: true, } - l, err = th.App.GetPostThread(postRoot.Id, opts, user1.Id) - require.Nil(t, err) + l, appErr = th.App.GetPostThread(postRoot.Id, opts, user1.Id) + require.Nil(t, appErr) require.Len(t, l.Order, 2) require.NotEmpty(t, l.Posts[postRoot.Id].Participants[0].Email) require.Empty(t, l.Posts[postRoot.Id].Participants[0].AuthData) @@ -3059,7 +3091,10 @@ func TestReplyToPostWithLag(t *testing.T) { t.Run("replication lag time great than reply time", func(t *testing.T) { err := mainHelper.SetReplicationLagForTesting(5) require.NoError(t, err) - defer mainHelper.SetReplicationLagForTesting(0) + defer func() { + err := mainHelper.SetReplicationLagForTesting(0) + require.NoError(t, err) + }() mainHelper.ToggleReplicasOn() defer mainHelper.ToggleReplicasOff() @@ -3181,28 +3216,28 @@ func TestAutofollowOnPostingAfterUnfollow(t *testing.T) { require.Nil(t, appErr) appErr = th.App.JoinChannel(th.Context, channel, user2.Id) require.Nil(t, appErr) - p1, err := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user2.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "reply"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + p1, appErr := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user2.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "reply"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) // unfollow thread - m, nErr := th.App.Srv().Store().Thread().MaintainMembership(user.Id, p1.Id, store.ThreadMembershipOpts{ + m, err := th.App.Srv().Store().Thread().MaintainMembership(user.Id, p1.Id, store.ThreadMembershipOpts{ Following: false, UpdateFollowing: true, }) - require.NoError(t, nErr) + require.NoError(t, err) require.False(t, m.Following) - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "another reply"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "another reply"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) // User should be following thread after posting in it, even after previously // unfollowing it, if ThreadAutoFollow is true - m, err = th.App.GetThreadMembershipForUser(user.Id, p1.Id) - require.Nil(t, err) + m, appErr = th.App.GetThreadMembershipForUser(user.Id, p1.Id) + require.Nil(t, appErr) require.True(t, m.Following) } @@ -3286,36 +3321,36 @@ func TestShouldNotRefollowOnOthersReply(t *testing.T) { require.Nil(t, appErr) appErr = th.App.JoinChannel(th.Context, channel, user2.Id) require.Nil(t, appErr) - p1, err := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user2.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + p1, appErr := th.App.CreatePost(th.Context, &model.Post{UserId: user.Id, ChannelId: channel.Id, Message: "Hi @" + user2.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user2.Id, ChannelId: channel.Id, Message: "Hola"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) // User2 unfollows thread - m, nErr := th.App.Srv().Store().Thread().MaintainMembership(user2.Id, p1.Id, store.ThreadMembershipOpts{ + m, err := th.App.Srv().Store().Thread().MaintainMembership(user2.Id, p1.Id, store.ThreadMembershipOpts{ Following: false, UpdateFollowing: true, }) - require.NoError(t, nErr) + require.NoError(t, err) require.False(t, m.Following) // user posts in the thread - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "another reply"}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "another reply"}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) // User2 should still not be following the thread because they manually // unfollowed the thread - m, err = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) - require.Nil(t, err) + m, appErr = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) + require.Nil(t, appErr) require.False(t, m.Following) // user posts in the thread mentioning user2 - _, err = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "reply with mention @" + user2.Username}, channel, model.CreatePostFlags{}) - require.Nil(t, err) + _, appErr = th.App.CreatePost(th.Context, &model.Post{RootId: p1.Id, UserId: user.Id, ChannelId: channel.Id, Message: "reply with mention @" + user2.Username}, channel, model.CreatePostFlags{}) + require.Nil(t, appErr) // User2 should now be following the thread because they were explicitly mentioned - m, err = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) - require.Nil(t, err) + m, appErr = th.App.GetThreadMembershipForUser(user2.Id, p1.Id) + require.Nil(t, appErr) require.True(t, m.Following) } @@ -3777,8 +3812,8 @@ func TestPermanentDeletePost(t *testing.T) { filename := "test" data := []byte("abcd") - info1, err := th.App.DoUploadFile(th.Context, time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelID, userID, filename, data, true) - require.Nil(t, err) + info1, appErr := th.App.DoUploadFile(th.Context, time.Date(2007, 2, 4, 1, 2, 3, 4, time.Local), teamID, channelID, userID, filename, data, true) + require.Nil(t, appErr) post := &model.Post{ Message: "asd", @@ -3789,30 +3824,30 @@ func TestPermanentDeletePost(t *testing.T) { FileIds: []string{info1.Id}, } - post, err = th.App.CreatePost(th.Context, post, th.BasicChannel, model.CreatePostFlags{SetOnline: true}) - assert.Nil(t, err) + post, appErr = th.App.CreatePost(th.Context, post, th.BasicChannel, model.CreatePostFlags{SetOnline: true}) + assert.Nil(t, appErr) - infos, sErr := th.App.Srv().Store().FileInfo().GetForPost(post.Id, true, true, false) - require.NoError(t, sErr) + infos, err := th.App.Srv().Store().FileInfo().GetForPost(post.Id, true, true, false) + require.NoError(t, err) assert.Len(t, infos, 1) // Soft delete the post. - _, err = th.App.DeletePost(th.Context, post.Id, userID) - assert.Nil(t, err) + _, appErr = th.App.DeletePost(th.Context, post.Id, userID) + assert.Nil(t, appErr) // Wait for the cleanup routine to finish. time.Sleep(time.Millisecond * 100) // Delete the post. - err = th.App.PermanentDeletePost(th.Context, post.Id, userID) - assert.Nil(t, err) + appErr = th.App.PermanentDeletePost(th.Context, post.Id, userID) + assert.Nil(t, appErr) // Check that the post can no longer be reached. - _, err = th.App.GetSinglePost(th.Context, post.Id, true) - assert.NotNil(t, err) + _, appErr = th.App.GetSinglePost(th.Context, post.Id, true) + assert.NotNil(t, appErr) - infos, sErr = th.App.Srv().Store().FileInfo().GetForPost(post.Id, true, true, false) - require.NoError(t, sErr) + infos, err = th.App.Srv().Store().FileInfo().GetForPost(post.Id, true, true, false) + require.NoError(t, err) assert.Len(t, infos, 0) }) }