* fixed: `identifier` is unused lint error

* make saveMultipleMembersT method saveMultipleMembers

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Mahmudul Haque
2021-02-04 11:38:05 +06:00
коммит произвёл GitHub
родитель 78ccf8a775
Коммит a63dea6c55
62 изменённых файлов: 257 добавлений и 245 удалений

Просмотреть файл

@@ -183,15 +183,15 @@ func getBots(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write(bots.ToJson()) w.Write(bots.ToJson())
} }
func disableBot(c *Context, w http.ResponseWriter, r *http.Request) { func disableBot(c *Context, w http.ResponseWriter, _ *http.Request) {
updateBotActive(c, w, r, false) updateBotActive(c, w, false)
} }
func enableBot(c *Context, w http.ResponseWriter, r *http.Request) { func enableBot(c *Context, w http.ResponseWriter, _ *http.Request) {
updateBotActive(c, w, r, true) updateBotActive(c, w, true)
} }
func updateBotActive(c *Context, w http.ResponseWriter, r *http.Request, active bool) { func updateBotActive(c *Context, w http.ResponseWriter, active bool) {
c.RequireBotUserId() c.RequireBotUserId()
if c.Err != nil { if c.Err != nil {
return return
@@ -220,7 +220,7 @@ func updateBotActive(c *Context, w http.ResponseWriter, r *http.Request, active
w.Write(bot.ToJson()) w.Write(bot.ToJson())
} }
func assignBot(c *Context, w http.ResponseWriter, r *http.Request) { func assignBot(c *Context, w http.ResponseWriter, _ *http.Request) {
c.RequireUserId() c.RequireUserId()
c.RequireBotUserId() c.RequireBotUserId()
if c.Err != nil { if c.Err != nil {

Просмотреть файл

@@ -372,7 +372,7 @@ func getPost(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(post.ToJson())) w.Write([]byte(post.ToJson()))
} }
func deletePost(c *Context, w http.ResponseWriter, r *http.Request) { func deletePost(c *Context, w http.ResponseWriter, _ *http.Request) {
c.RequirePostId() c.RequirePostId()
if c.Err != nil { if c.Err != nil {
return return
@@ -639,7 +639,7 @@ func patchPost(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(patchedPost.ToJson())) w.Write([]byte(patchedPost.ToJson()))
} }
func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) { func setPostUnread(c *Context, w http.ResponseWriter, _ *http.Request) {
c.RequirePostId().RequireUserId() c.RequirePostId().RequireUserId()
if c.Err != nil { if c.Err != nil {
return return
@@ -661,7 +661,7 @@ func setPostUnread(c *Context, w http.ResponseWriter, r *http.Request) {
w.Write([]byte(state.ToJson())) w.Write([]byte(state.ToJson()))
} }
func saveIsPinnedPost(c *Context, w http.ResponseWriter, r *http.Request, isPinned bool) { func saveIsPinnedPost(c *Context, w http.ResponseWriter, isPinned bool) {
c.RequirePostId() c.RequirePostId()
if c.Err != nil { if c.Err != nil {
return return
@@ -717,12 +717,12 @@ func saveIsPinnedPost(c *Context, w http.ResponseWriter, r *http.Request, isPinn
ReturnStatusOK(w) ReturnStatusOK(w)
} }
func pinPost(c *Context, w http.ResponseWriter, r *http.Request) { func pinPost(c *Context, w http.ResponseWriter, _ *http.Request) {
saveIsPinnedPost(c, w, r, true) saveIsPinnedPost(c, w, true)
} }
func unpinPost(c *Context, w http.ResponseWriter, r *http.Request) { func unpinPost(c *Context, w http.ResponseWriter, _ *http.Request) {
saveIsPinnedPost(c, w, r, false) saveIsPinnedPost(c, w, false)
} }
func getFileInfosForPost(c *Context, w http.ResponseWriter, r *http.Request) { func getFileInfosForPost(c *Context, w http.ResponseWriter, r *http.Request) {

Просмотреть файл

@@ -5754,7 +5754,8 @@ func TestMaintainUnreadMentionsInThread(t *testing.T) {
*cfg.ServiceSettings.ThreadAutoFollow = true *cfg.ServiceSettings.ThreadAutoFollow = true
*cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON *cfg.ServiceSettings.CollapsedThreads = model.COLLAPSED_THREADS_DEFAULT_ON
}) })
checkThreadList := func(client *model.Client4, userId string, expectedMentions, expectedThreads int) (*model.Threads, *model.Response) {
checkThreadList := func(client *model.Client4, userId string, expectedThreads int) (*model.Threads, *model.Response) {
uss, resp := client.GetUserThreads(userId, th.BasicTeam.Id, model.GetUserThreadsOpts{ uss, resp := client.GetUserThreads(userId, th.BasicTeam.Id, model.GetUserThreadsOpts{
Deleted: false, Deleted: false,
}) })
@@ -5776,34 +5777,33 @@ func TestMaintainUnreadMentionsInThread(t *testing.T) {
defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.SystemAdminUser.Id) defer th.App.Srv().Store.Post().PermanentDeleteByUser(th.SystemAdminUser.Id)
// basic user 1 was mentioned 1 time // basic user 1 was mentioned 1 time
checkThreadList(th.Client, th.BasicUser.Id, 1, 1) checkThreadList(th.Client, th.BasicUser.Id, 1)
// basic user 2 was mentioned 1 time // basic user 2 was mentioned 1 time
checkThreadList(th.SystemAdminClient, th.BasicUser2.Id, 1, 1) checkThreadList(th.SystemAdminClient, th.BasicUser2.Id, 1)
// test self mention, shouldn't increase mention count // test self mention, shouldn't increase mention count
postAndCheck(t, Client, &model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply @" + th.BasicUser.Username, RootId: rpost.Id}) postAndCheck(t, Client, &model.Post{ChannelId: th.BasicChannel.Id, Message: "testReply @" + th.BasicUser.Username, RootId: rpost.Id})
// count should increase // count should increase
checkThreadList(th.Client, th.BasicUser.Id, 1, 1) checkThreadList(th.Client, th.BasicUser.Id, 1)
// test DM // test DM
dm := th.CreateDmChannel(th.SystemAdminUser) dm := th.CreateDmChannel(th.SystemAdminUser)
dm_root_post, _ := postAndCheck(t, Client, &model.Post{ChannelId: dm.Id, Message: "hi @" + th.SystemAdminUser.Username}) dm_root_post, _ := postAndCheck(t, Client, &model.Post{ChannelId: dm.Id, Message: "hi @" + th.SystemAdminUser.Username})
// no changes // no changes
checkThreadList(th.Client, th.BasicUser.Id, 1, 1) checkThreadList(th.Client, th.BasicUser.Id, 1)
// post reply by the same user // post reply by the same user
postAndCheck(t, Client, &model.Post{ChannelId: dm.Id, Message: "how are you", RootId: dm_root_post.Id}) postAndCheck(t, Client, &model.Post{ChannelId: dm.Id, Message: "how are you", RootId: dm_root_post.Id})
// thread created // thread created
checkThreadList(th.Client, th.BasicUser.Id, 1, 2) checkThreadList(th.Client, th.BasicUser.Id, 2)
// post two replies by another user, without mentions. mention count should still increase since this is a DM // post two replies by another user, without mentions. mention count should still increase since this is a DM
postAndCheck(t, th.SystemAdminClient, &model.Post{ChannelId: dm.Id, Message: "msg1", RootId: dm_root_post.Id}) postAndCheck(t, th.SystemAdminClient, &model.Post{ChannelId: dm.Id, Message: "msg1", RootId: dm_root_post.Id})
postAndCheck(t, th.SystemAdminClient, &model.Post{ChannelId: dm.Id, Message: "msg2", RootId: dm_root_post.Id}) postAndCheck(t, th.SystemAdminClient, &model.Post{ChannelId: dm.Id, Message: "msg2", RootId: dm_root_post.Id})
// expect increment by two mentions // expect increment by two mentions
checkThreadList(th.Client, th.BasicUser.Id, 3, 2) checkThreadList(th.Client, th.BasicUser.Id, 2)
} }
func TestReadThreads(t *testing.T) { func TestReadThreads(t *testing.T) {

Просмотреть файл

@@ -459,7 +459,7 @@ func (a *App) WaitForChannelMembership(channelId string, userId string) {
} }
func (a *App) CreateGroupChannel(userIds []string, creatorId string) (*model.Channel, *model.AppError) { func (a *App) CreateGroupChannel(userIds []string, creatorId string) (*model.Channel, *model.AppError) {
channel, err := a.createGroupChannel(userIds, creatorId) channel, err := a.createGroupChannel(userIds)
if err != nil { if err != nil {
if err.Id == store.ChannelExistsError { if err.Id == store.ChannelExistsError {
return channel, nil return channel, nil
@@ -482,7 +482,7 @@ func (a *App) CreateGroupChannel(userIds []string, creatorId string) (*model.Cha
return channel, nil return channel, nil
} }
func (a *App) createGroupChannel(userIds []string, creatorId string) (*model.Channel, *model.AppError) { func (a *App) createGroupChannel(userIds []string) (*model.Channel, *model.AppError) {
if len(userIds) > model.CHANNEL_GROUP_MAX_USERS || len(userIds) < model.CHANNEL_GROUP_MIN_USERS { if len(userIds) > model.CHANNEL_GROUP_MAX_USERS || len(userIds) < model.CHANNEL_GROUP_MIN_USERS {
return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest) return nil, model.NewAppError("CreateGroupChannel", "api.channel.create_group.bad_size.app_error", nil, "", http.StatusBadRequest)
} }
@@ -1285,7 +1285,7 @@ func (a *App) DeleteChannel(channel *model.Channel, userId string) *model.AppErr
return nil return nil
} }
func (a *App) addUserToChannel(user *model.User, channel *model.Channel, teamMember *model.TeamMember) (*model.ChannelMember, *model.AppError) { func (a *App) addUserToChannel(user *model.User, channel *model.Channel) (*model.ChannelMember, *model.AppError) {
if channel.Type != model.CHANNEL_OPEN && channel.Type != model.CHANNEL_PRIVATE { if channel.Type != model.CHANNEL_OPEN && channel.Type != model.CHANNEL_PRIVATE {
return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest) return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user_to_channel.type.app_error", nil, "", http.StatusBadRequest)
} }
@@ -1359,7 +1359,7 @@ func (a *App) AddUserToChannel(user *model.User, channel *model.Channel) (*model
return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user.to.channel.failed.deleted.app_error", nil, "", http.StatusBadRequest) return nil, model.NewAppError("AddUserToChannel", "api.channel.add_user.to.channel.failed.deleted.app_error", nil, "", http.StatusBadRequest)
} }
newMember, err := a.addUserToChannel(user, channel, teamMember) newMember, err := a.addUserToChannel(user, channel)
if err != nil { if err != nil {
return nil, err return nil, err
} }

Просмотреть файл

@@ -75,7 +75,7 @@ func (es *EmailService) setupInviteEmailRateLimiting() error {
return nil return nil
} }
func (es *EmailService) sendChangeUsernameEmail(oldUsername, newUsername, email, locale, siteURL string) *model.AppError { func (es *EmailService) sendChangeUsernameEmail(newUsername, email, locale, siteURL string) *model.AppError {
T := utils.GetUserTranslations(locale) T := utils.GetUserTranslations(locale)
subject := T("api.templates.username_change_subject", subject := T("api.templates.username_change_subject",

Просмотреть файл

@@ -808,7 +808,7 @@ func (a *App) importUserTeams(user *model.User, data *[]UserTeamImportData) *mod
} }
} }
channelsToImport := channels[team.Id] channelsToImport := channels[team.Id]
if err := a.importUserChannels(user, team, teamMemberByTeamID[team.Id], &channelsToImport); err != nil { if err := a.importUserChannels(user, team, &channelsToImport); err != nil {
return err return err
} }
} }
@@ -816,7 +816,7 @@ func (a *App) importUserTeams(user *model.User, data *[]UserTeamImportData) *mod
return nil return nil
} }
func (a *App) importUserChannels(user *model.User, team *model.Team, teamMember *model.TeamMember, data *[]UserChannelImportData) *model.AppError { func (a *App) importUserChannels(user *model.User, team *model.Team, data *[]UserChannelImportData) *model.AppError {
if data == nil { if data == nil {
return nil return nil
} }
@@ -986,7 +986,7 @@ func (a *App) importUserChannels(user *model.User, team *model.Team, teamMember
return nil return nil
} }
func (a *App) importReaction(data *ReactionImportData, post *model.Post, dryRun bool) *model.AppError { func (a *App) importReaction(data *ReactionImportData, post *model.Post) *model.AppError {
if err := validateReactionImportData(data, post.CreateAt); err != nil { if err := validateReactionImportData(data, post.CreateAt); err != nil {
return err return err
} }
@@ -1016,7 +1016,7 @@ func (a *App) importReaction(data *ReactionImportData, post *model.Post, dryRun
return nil return nil
} }
func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId string, dryRun bool) *model.AppError { func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId string) *model.AppError {
var err *model.AppError var err *model.AppError
usernames := []string{} usernames := []string{}
for _, replyData := range data { for _, replyData := range data {
@@ -1064,7 +1064,7 @@ func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId str
reply.Message = *replyData.Message reply.Message = *replyData.Message
reply.CreateAt = *replyData.CreateAt reply.CreateAt = *replyData.CreateAt
fileIds, err := a.uploadAttachments(replyData.Attachments, reply, teamId, dryRun) fileIds, err := a.uploadAttachments(replyData.Attachments, reply, teamId)
if err != nil { if err != nil {
return err return err
} }
@@ -1112,7 +1112,7 @@ func (a *App) importReplies(data []ReplyImportData, post *model.Post, teamId str
return nil return nil
} }
func (a *App) importAttachment(data *AttachmentImportData, post *model.Post, teamId string, dryRun bool) (*model.FileInfo, *model.AppError) { func (a *App) importAttachment(data *AttachmentImportData, post *model.Post, teamId string) (*model.FileInfo, *model.AppError) {
file, err := os.Open(*data.Path) file, err := os.Open(*data.Path)
if file == nil || err != nil { if file == nil || err != nil {
return nil, model.NewAppError("BulkImport", "app.import.attachment.bad_file.error", map[string]interface{}{"FilePath": *data.Path}, "", http.StatusBadRequest) return nil, model.NewAppError("BulkImport", "app.import.attachment.bad_file.error", map[string]interface{}{"FilePath": *data.Path}, "", http.StatusBadRequest)
@@ -1319,7 +1319,7 @@ func (a *App) importMultiplePostLines(lines []LineImportWorkerData, dryRun bool)
post.Props = *line.Post.Props post.Props = *line.Post.Props
} }
fileIds, appErr := a.uploadAttachments(line.Post.Attachments, post, team.Id, dryRun) fileIds, appErr := a.uploadAttachments(line.Post.Attachments, post, team.Id)
if appErr != nil { if appErr != nil {
return line.LineNumber, appErr return line.LineNumber, appErr
} }
@@ -1403,14 +1403,14 @@ func (a *App) importMultiplePostLines(lines []LineImportWorkerData, dryRun bool)
if postWithData.postData.Reactions != nil { if postWithData.postData.Reactions != nil {
for _, reaction := range *postWithData.postData.Reactions { for _, reaction := range *postWithData.postData.Reactions {
reaction := reaction reaction := reaction
if err := a.importReaction(&reaction, postWithData.post, dryRun); err != nil { if err := a.importReaction(&reaction, postWithData.post); err != nil {
return postWithData.lineNumber, err return postWithData.lineNumber, err
} }
} }
} }
if postWithData.postData.Replies != nil && len(*postWithData.postData.Replies) > 0 { if postWithData.postData.Replies != nil && len(*postWithData.postData.Replies) > 0 {
err := a.importReplies(*postWithData.postData.Replies, postWithData.post, postWithData.team.Id, dryRun) err := a.importReplies(*postWithData.postData.Replies, postWithData.post, postWithData.team.Id)
if err != nil { if err != nil {
return postWithData.lineNumber, err return postWithData.lineNumber, err
} }
@@ -1421,14 +1421,14 @@ func (a *App) importMultiplePostLines(lines []LineImportWorkerData, dryRun bool)
} }
// uploadAttachments imports new attachments and returns current attachments of the post as a map // uploadAttachments imports new attachments and returns current attachments of the post as a map
func (a *App) uploadAttachments(attachments *[]AttachmentImportData, post *model.Post, teamId string, dryRun bool) (map[string]bool, *model.AppError) { func (a *App) uploadAttachments(attachments *[]AttachmentImportData, post *model.Post, teamId string) (map[string]bool, *model.AppError) {
if attachments == nil { if attachments == nil {
return nil, nil return nil, nil
} }
fileIds := make(map[string]bool) fileIds := make(map[string]bool)
for _, attachment := range *attachments { for _, attachment := range *attachments {
attachment := attachment attachment := attachment
fileInfo, err := a.importAttachment(&attachment, post, teamId, dryRun) fileInfo, err := a.importAttachment(&attachment, post, teamId)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1473,7 +1473,7 @@ func (a *App) importDirectChannel(data *DirectChannelImportData, dryRun bool) *m
} }
channel = ch channel = ch
} else { } else {
ch, err := a.createGroupChannel(userIds, userIds[0]) ch, err := a.createGroupChannel(userIds)
if err != nil && err.Id != store.ChannelExistsError { if err != nil && err.Id != store.ChannelExistsError {
return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_group_channel.error", nil, err.Error(), http.StatusBadRequest) return model.NewAppError("BulkImport", "app.import.import_direct_channel.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
} }
@@ -1578,7 +1578,7 @@ func (a *App) importMultipleDirectPostLines(lines []LineImportWorkerData, dryRun
} }
channel = ch channel = ch
} else { } else {
ch, err = a.createGroupChannel(userIds, userIds[0]) ch, err = a.createGroupChannel(userIds)
if err != nil && err.Id != store.ChannelExistsError { if err != nil && err.Id != store.ChannelExistsError {
return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_group_channel.error", nil, err.Error(), http.StatusBadRequest) return line.LineNumber, model.NewAppError("BulkImport", "app.import.import_direct_post.create_group_channel.error", nil, err.Error(), http.StatusBadRequest)
} }
@@ -1615,7 +1615,7 @@ func (a *App) importMultipleDirectPostLines(lines []LineImportWorkerData, dryRun
post.Props = *line.DirectPost.Props post.Props = *line.DirectPost.Props
} }
fileIds, err := a.uploadAttachments(line.DirectPost.Attachments, post, "noteam", dryRun) fileIds, err := a.uploadAttachments(line.DirectPost.Attachments, post, "noteam")
if err != nil { if err != nil {
return line.LineNumber, err return line.LineNumber, err
} }
@@ -1697,14 +1697,14 @@ func (a *App) importMultipleDirectPostLines(lines []LineImportWorkerData, dryRun
if postWithData.directPostData.Reactions != nil { if postWithData.directPostData.Reactions != nil {
for _, reaction := range *postWithData.directPostData.Reactions { for _, reaction := range *postWithData.directPostData.Reactions {
reaction := reaction reaction := reaction
if err := a.importReaction(&reaction, postWithData.post, dryRun); err != nil { if err := a.importReaction(&reaction, postWithData.post); err != nil {
return postWithData.lineNumber, err return postWithData.lineNumber, err
} }
} }
} }
if postWithData.directPostData.Replies != nil { if postWithData.directPostData.Replies != nil {
if err := a.importReplies(*postWithData.directPostData.Replies, postWithData.post, "noteam", dryRun); err != nil { if err := a.importReplies(*postWithData.directPostData.Replies, postWithData.post, "noteam"); err != nil {
return postWithData.lineNumber, err return postWithData.lineNumber, err
} }
} }

Просмотреть файл

@@ -1856,16 +1856,14 @@ func TestImportUserChannels(t *testing.T) {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
user := th.CreateUser() user := th.CreateUser()
th.App.joinUserToTeam(th.BasicTeam, user) th.App.joinUserToTeam(th.BasicTeam, user)
teamMember, err := th.App.GetTeamMember(th.BasicTeam.Id, user.Id)
require.Nil(t, err)
// Two times import must end with the same results // Two times import must end with the same results
for x := 0; x < 2; x++ { for x := 0; x < 2; x++ {
err = th.App.importUserChannels(user, th.BasicTeam, teamMember, tc.data) appErr := th.App.importUserChannels(user, th.BasicTeam, tc.data)
if tc.expectedError { if tc.expectedError {
require.NotNil(t, err) require.NotNil(t, appErr)
} else { } else {
require.Nil(t, err) require.Nil(t, appErr)
} }
channelMembers, err := th.App.Srv().Store.Channel().GetMembersForUser(th.BasicTeam.Id, user.Id) channelMembers, err := th.App.Srv().Store.Channel().GetMembersForUser(th.BasicTeam.Id, user.Id)
require.Nil(t, err) require.Nil(t, err)
@@ -3101,7 +3099,7 @@ func TestImportImportDirectChannel(t *testing.T) {
th.BasicUser2.Id, th.BasicUser2.Id,
user3.Id, user3.Id,
} }
channel, appErr := th.App.createGroupChannel(userIds, th.BasicUser.Id) channel, appErr := th.App.createGroupChannel(userIds)
require.Equal(t, appErr.Id, store.ChannelExistsError) require.Equal(t, appErr.Id, store.ChannelExistsError)
require.Equal(t, channel.Header, *data.Header) require.Equal(t, channel.Header, *data.Header)
@@ -3402,7 +3400,7 @@ func TestImportImportDirectPost(t *testing.T) {
th.BasicUser2.Id, th.BasicUser2.Id,
user3.Id, user3.Id,
} }
channel, appErr = th.App.createGroupChannel(userIds, th.BasicUser.Id) channel, appErr = th.App.createGroupChannel(userIds)
require.Equal(t, appErr.Id, store.ChannelExistsError) require.Equal(t, appErr.Id, store.ChannelExistsError)
groupChannel = channel groupChannel = channel
@@ -3893,14 +3891,14 @@ func TestImportAttachment(t *testing.T) {
userId := model.NewId() userId := model.NewId()
data := AttachmentImportData{Path: &testImage} data := AttachmentImportData{Path: &testImage}
_, err := th.App.importAttachment(&data, &model.Post{UserId: userId, ChannelId: "some-channel"}, "some-team", true) _, err := th.App.importAttachment(&data, &model.Post{UserId: userId, ChannelId: "some-channel"}, "some-team")
assert.Nil(t, err, "sample run without errors") assert.Nil(t, err, "sample run without errors")
attachments := GetAttachments(userId, th, t) attachments := GetAttachments(userId, th, t)
assert.Len(t, attachments, 1) assert.Len(t, attachments, 1)
data = AttachmentImportData{Path: &invalidPath} data = AttachmentImportData{Path: &invalidPath}
_, err = th.App.importAttachment(&data, &model.Post{UserId: model.NewId(), ChannelId: "some-channel"}, "some-team", true) _, err = th.App.importAttachment(&data, &model.Post{UserId: model.NewId(), ChannelId: "some-channel"}, "some-team")
assert.NotNil(t, err, "should have failed when opening the file") assert.NotNil(t, err, "should have failed when opening the file")
assert.Equal(t, err.Id, "app.import.attachment.bad_file.error") assert.Equal(t, err.Id, "app.import.attachment.bad_file.error")
} }

Просмотреть файл

@@ -160,8 +160,8 @@ func (a *App) sendPushNotification(notification *PostNotification, user *model.U
} }
} }
func (a *App) getPushNotificationMessage(contentsConfig, postMessage string, explicitMention, channelWideMention, hasFiles bool, func (a *App) getPushNotificationMessage(contentsConfig, postMessage string, explicitMention, channelWideMention,
senderName, channelName, channelType, replyToThreadType string, userLocale i18n.TranslateFunc) string { hasFiles bool, senderName, channelType, replyToThreadType string, userLocale i18n.TranslateFunc) string {
// If the post only has images then push an appropriate message // If the post only has images then push an appropriate message
if postMessage == "" && hasFiles { if postMessage == "" && hasFiles {
@@ -591,7 +591,17 @@ func (a *App) buildFullPushNotificationMessage(contentsConfig string, post *mode
userLocale := utils.GetUserTranslations(user.Locale) userLocale := utils.GetUserTranslations(user.Locale)
hasFiles := post.FileIds != nil && len(post.FileIds) > 0 hasFiles := post.FileIds != nil && len(post.FileIds) > 0
msg.Message = a.getPushNotificationMessage(contentsConfig, post.Message, explicitMention, channelWideMention, hasFiles, msg.SenderName, channelName, channel.Type, replyToThreadType, userLocale) msg.Message = a.getPushNotificationMessage(
contentsConfig,
post.Message,
explicitMention,
channelWideMention,
hasFiles,
msg.SenderName,
channel.Type,
replyToThreadType,
userLocale,
)
return msg return msg
} }

Просмотреть файл

@@ -912,7 +912,6 @@ func TestGetPushNotificationMessage(t *testing.T) {
tc.channelWideMention, tc.channelWideMention,
tc.HasFiles, tc.HasFiles,
"user", "user",
"channel",
tc.ChannelType, tc.ChannelType,
tc.replyToThreadType, tc.replyToThreadType,
utils.GetUserTranslations(locale), utils.GetUserTranslations(locale),

Просмотреть файл

@@ -175,7 +175,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
return token return token
} }
makeRequest := func(t *testing.T, cookie string) *http.Request { makeRequest := func(cookie string) *http.Request {
request, _ := http.NewRequest(http.MethodGet, "https://mattermost.example.com", nil) request, _ := http.NewRequest(http.MethodGet, "https://mattermost.example.com", nil)
if cookie != "" { if cookie != "" {
@@ -264,7 +264,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, "") request := makeRequest("")
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(nil, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(nil, request, model.SERVICE_GITLAB, "", state, "")
@@ -281,7 +281,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
token, err := th.App.CreateOAuthStateToken(model.NewId()) token, err := th.App.CreateOAuthStateToken(model.NewId())
require.Nil(t, err) require.Nil(t, err)
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(token) state := makeState(token)
_, _, _, _, err = th.App.AuthorizeOAuthUser(nil, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err = th.App.AuthorizeOAuthUser(nil, request, model.SERVICE_GITLAB, "", state, "")
@@ -294,7 +294,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -312,7 +312,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -331,7 +331,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -353,7 +353,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -374,7 +374,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -395,7 +395,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -423,7 +423,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -452,7 +452,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
defer th.TearDown() defer th.TearDown()
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
state := makeState(makeToken(th, cookie)) state := makeState(makeToken(th, cookie))
_, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "") _, _, _, _, err := th.App.AuthorizeOAuthUser(&httptest.ResponseRecorder{}, request, model.SERVICE_GITLAB, "", state, "")
@@ -496,7 +496,7 @@ func TestAuthorizeOAuthUser(t *testing.T) {
}) })
cookie := model.NewId() cookie := model.NewId()
request := makeRequest(t, cookie) request := makeRequest(cookie)
stateProps := map[string]string{ stateProps := map[string]string{
"team_id": model.NewId(), "team_id": model.NewId(),

Просмотреть файл

@@ -69,10 +69,10 @@ func TestExportPermissions(t *testing.T) {
} }
expectations := map[string]func(str string) string{ expectations := map[string]func(str string) string{
scheme.DisplayName: func(str string) string { return row["display_name"].(string) }, scheme.DisplayName: func(_ string) string { return row["display_name"].(string) },
scheme.Name: func(str string) string { return row["name"].(string) }, scheme.Name: func(_ string) string { return row["name"].(string) },
scheme.Description: func(str string) string { return row["description"].(string) }, scheme.Description: func(_ string) string { return row["description"].(string) },
scheme.Scope: func(str string) string { return row["scope"].(string) }, scheme.Scope: func(_ string) string { return row["scope"].(string) },
scheme.DefaultTeamAdminRole: func(str string) string { return getRoleByName(str) }, scheme.DefaultTeamAdminRole: func(str string) string { return getRoleByName(str) },
scheme.DefaultTeamUserRole: func(str string) string { return getRoleByName(str) }, scheme.DefaultTeamUserRole: func(str string) string { return getRoleByName(str) },
scheme.DefaultTeamGuestRole: func(str string) string { return getRoleByName(str) }, scheme.DefaultTeamGuestRole: func(str string) string { return getRoleByName(str) },

Просмотреть файл

@@ -13,7 +13,7 @@ type Plugin struct {
plugin.MattermostPlugin plugin.MattermostPlugin
} }
func (p *Plugin) ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) { func (p *Plugin) ServeHTTP(_ *plugin.Context, w http.ResponseWriter, _ *http.Request) {
hj, ok := w.(http.Hijacker) hj, ok := w.(http.Hijacker)
if !ok { if !ok {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)

Просмотреть файл

@@ -17,7 +17,7 @@ type Plugin struct {
plugin.MattermostPlugin plugin.MattermostPlugin
} }
func (p *Plugin) ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) { func (p *Plugin) ServeHTTP(_ *plugin.Context, w http.ResponseWriter, r *http.Request) {
upgrader := websocket.Upgrader{} upgrader := websocket.Upgrader{}
ws, err := upgrader.Upgrade(w, r, nil) ws, err := upgrader.Upgrade(w, r, nil)

Просмотреть файл

@@ -30,7 +30,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
if p.configuration.MyStringSetting != "override" { if p.configuration.MyStringSetting != "override" {
return nil, "MyStringSetting has invalid value" return nil, "MyStringSetting has invalid value"
} }

Просмотреть файл

@@ -33,7 +33,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
if p.configuration.MyStringSetting != "str" { if p.configuration.MyStringSetting != "str" {
return nil, "MyStringSetting has invalid value" return nil, "MyStringSetting has invalid value"
} }

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
createdBot, err := p.API.CreateBot(&model.Bot{ createdBot, err := p.API.CreateBot(&model.Bot{
Username: "bot", Username: "bot",
Description: "a plugin bot", Description: "a plugin bot",

Просмотреть файл

@@ -22,7 +22,7 @@ func main() {
plugin.ClientMain(&PluginUsingLogAPI{}) plugin.ClientMain(&PluginUsingLogAPI{})
} }
func (p *PluginUsingLogAPI) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *PluginUsingLogAPI) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
p.API.LogDebug("LogDebug", "one", 1, "two", "two", "foo", Foo{bar: 3.1416}) p.API.LogDebug("LogDebug", "one", 1, "two", "two", "foo", Foo{bar: 3.1416})
p.API.LogInfo("LogInfo", "one", 1, "two", "two", "foo", Foo{bar: 3.1416}) p.API.LogInfo("LogInfo", "one", 1, "two", "two", "foo", Foo{bar: 3.1416})
p.API.LogWarn("LogWarn", "one", 1, "two", "two", "foo", Foo{bar: 3.1416}) p.API.LogWarn("LogWarn", "one", 1, "two", "two", "foo", Foo{bar: 3.1416})

Просмотреть файл

@@ -24,7 +24,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
bundlePath, err := p.API.GetBundlePath() bundlePath, err := p.API.GetBundlePath()
if err != nil { if err != nil {
return nil, err.Error() + "failed get bundle path" return nil, err.Error() + "failed get bundle path"

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
channels, err := p.API.GetChannelsForTeamForUser(p.configuration.BasicTeamId, p.configuration.BasicUserId, false) channels, err := p.API.GetChannelsForTeamForUser(p.configuration.BasicTeamId, p.configuration.BasicUserId, false)
if err != nil { if err != nil {

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
dm1, err := p.API.GetDirectChannel(p.configuration.BasicUserId, p.configuration.BasicUser2Id) dm1, err := p.API.GetDirectChannel(p.configuration.BasicUserId, p.configuration.BasicUser2Id)
if err != nil { if err != nil {
return nil, err.Error() return nil, err.Error()

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
status, err := p.API.GetPluginStatus("test_get_plugin_status_plugin") status, err := p.API.GetPluginStatus("test_get_plugin_status_plugin")
if err != nil { if err != nil {
return nil, err.Error() return nil, err.Error()

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
// check existing user first // check existing user first
data, err := p.API.GetProfileImage(p.configuration.BasicUserId) data, err := p.API.GetProfileImage(p.configuration.BasicUserId)

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
channelMembers, err := p.API.GetChannelMembersForUser(p.configuration.BasicTeamId, p.configuration.BasicUserId, 0, 10) channelMembers, err := p.API.GetChannelMembersForUser(p.configuration.BasicTeamId, p.configuration.BasicUserId, 0, 10)
if err != nil { if err != nil {

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
teamMembers, err := p.API.GetTeamMembersForUser(p.configuration.BasicUserId, 0, 10) teamMembers, err := p.API.GetTeamMembersForUser(p.configuration.BasicUserId, 0, 10)
if err != nil { if err != nil {
return nil, err.Error() + "failed to get team members" return nil, err.Error() + "failed to get team members"

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
channels, err := p.API.SearchChannels(p.configuration.BasicTeamId, p.configuration.BasicChannelName) channels, err := p.API.SearchChannels(p.configuration.BasicTeamId, p.configuration.BasicChannelName)
if err != nil { if err != nil {

Просмотреть файл

@@ -23,7 +23,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
testCases := []struct { testCases := []struct {
description string description string
teamID string teamID string

Просмотреть файл

@@ -23,7 +23,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
teams, err := p.API.SearchTeams(p.configuration.BasicTeamName) teams, err := p.API.SearchTeams(p.configuration.BasicTeamName)
if err != nil { if err != nil {
return nil, "search failed: " + err.Message return nil, "search failed: " + err.Message

Просмотреть файл

@@ -25,7 +25,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
to := p.configuration.BasicUserEmail to := p.configuration.BasicUserEmail
subject := "testing plugin api sending email" subject := "testing plugin api sending email"
body := "this is a test." body := "this is a test."

Просмотреть файл

@@ -27,7 +27,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
// Create an 128 x 128 image // Create an 128 x 128 image
img := image.NewRGBA(image.Rect(0, 0, 128, 128)) img := image.NewRGBA(image.Rect(0, 0, 128, 128))

Просмотреть файл

@@ -21,7 +21,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
uid := p.configuration.BasicUserId uid := p.configuration.BasicUserId
if err := p.API.UpdateUserActive(uid, true); err != nil { if err := p.API.UpdateUserActive(uid, true); err != nil {
return nil, err.Error() return nil, err.Error()

Просмотреть файл

@@ -23,7 +23,7 @@ func (p *MyPlugin) OnConfigurationChange() error {
return nil return nil
} }
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) { func (p *MyPlugin) MessageWillBePosted(_ *plugin.Context, _ *model.Post) (*model.Post, string) {
uid := p.configuration.BasicUserId uid := p.configuration.BasicUserId
statuses := []string{model.STATUS_ONLINE, model.STATUS_AWAY, model.STATUS_DND, model.STATUS_OFFLINE} statuses := []string{model.STATUS_ONLINE, model.STATUS_AWAY, model.STATUS_DND, model.STATUS_OFFLINE}

Просмотреть файл

@@ -50,7 +50,9 @@ func cleanupVersion(originalVersion string) string {
return strings.Join(versionPartsOut, ".") return strings.Join(versionPartsOut, ".")
} }
func noticeMatchesConditions(config *model.Config, preferences store.PreferenceStore, userId string, client model.NoticeClientType, clientVersion, locale string, postCount, userCount int64, isSystemAdmin, isTeamAdmin bool, isCloud bool, sku string, notice *model.ProductNotice) (bool, error) { func noticeMatchesConditions(config *model.Config, preferences store.PreferenceStore, userId string,
client model.NoticeClientType, clientVersion string, postCount int64, userCount int64, isSystemAdmin bool,
isTeamAdmin bool, isCloud bool, sku string, notice *model.ProductNotice) (bool, error) {
cnd := notice.Conditions cnd := notice.Conditions
// check client type // check client type
@@ -248,11 +250,12 @@ func (a *App) GetProductNotices(userId, teamId string, client model.NoticeClient
continue continue
} }
} }
result, err := noticeMatchesConditions(a.Config(), a.Srv().Store.Preference(), result, err := noticeMatchesConditions(
a.Config(),
a.Srv().Store.Preference(),
userId, userId,
client, client,
clientVersion, clientVersion,
locale,
cachedPostCount, cachedPostCount,
cachedUserCount, cachedUserCount,
isSystemAdmin, isSystemAdmin,

Просмотреть файл

@@ -53,7 +53,6 @@ func TestNoticeValidation(t *testing.T) {
type args struct { type args struct {
client model.NoticeClientType client model.NoticeClientType
clientVersion string clientVersion string
locale string
sku string sku string
postCount, userCount int64 postCount, userCount int64
cloud bool cloud bool
@@ -550,7 +549,20 @@ func TestNoticeValidation(t *testing.T) {
if model.BuildNumber == "" { if model.BuildNumber == "" {
model.BuildNumber = "5.26.1" model.BuildNumber = "5.26.1"
} }
if ok, err := noticeMatchesConditions(th.App.Config(), th.App.Srv().Store.Preference(), "test", tt.args.client, clientVersion, tt.args.locale, tt.args.postCount, tt.args.userCount, tt.args.systemAdmin, tt.args.teamAdmin, tt.args.cloud, tt.args.sku, tt.args.notice); (err != nil) != tt.wantErr { if ok, err := noticeMatchesConditions(
th.App.Config(),
th.App.Srv().Store.Preference(),
"test",
tt.args.client,
clientVersion,
tt.args.postCount,
tt.args.userCount,
tt.args.systemAdmin,
tt.args.teamAdmin,
tt.args.cloud,
tt.args.sku,
tt.args.notice,
); (err != nil) != tt.wantErr {
t.Errorf("noticeMatchesConditions() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("noticeMatchesConditions() error = %v, wantErr %v", err, tt.wantErr)
} else if ok != tt.wantOk { } else if ok != tt.wantOk {
t.Errorf("noticeMatchesConditions() result = %v, wantOk %v", ok, tt.wantOk) t.Errorf("noticeMatchesConditions() result = %v, wantOk %v", ok, tt.wantOk)

Просмотреть файл

@@ -63,7 +63,7 @@ func (a *App) SaveReactionForPost(reaction *model.Reaction) (*model.Reaction, *m
} }
a.Srv().Go(func() { a.Srv().Go(func() {
a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_ADDED, reaction, post, true) a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_ADDED, reaction, post)
}) })
return reaction, nil return reaction, nil
@@ -131,11 +131,6 @@ func (a *App) DeleteReactionForPost(reaction *model.Reaction) *model.AppError {
} }
} }
hasReactions := true
if reactions, _ := a.GetReactionsForPost(post.Id); len(reactions) <= 1 {
hasReactions = false
}
if _, err := a.Srv().Store.Reaction().Delete(reaction); err != nil { if _, err := a.Srv().Store.Reaction().Delete(reaction); err != nil {
return model.NewAppError("DeleteReactionForPost", "app.reaction.delete_all_with_emoji_name.get_reactions.app_error", nil, err.Error(), http.StatusInternalServerError) return model.NewAppError("DeleteReactionForPost", "app.reaction.delete_all_with_emoji_name.get_reactions.app_error", nil, err.Error(), http.StatusInternalServerError)
} }
@@ -154,13 +149,13 @@ func (a *App) DeleteReactionForPost(reaction *model.Reaction) *model.AppError {
} }
a.Srv().Go(func() { a.Srv().Go(func() {
a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_REMOVED, reaction, post, hasReactions) a.sendReactionEvent(model.WEBSOCKET_EVENT_REACTION_REMOVED, reaction, post)
}) })
return nil return nil
} }
func (a *App) sendReactionEvent(event string, reaction *model.Reaction, post *model.Post, hasReactions bool) { func (a *App) sendReactionEvent(event string, reaction *model.Reaction, post *model.Post) {
// send out that a reaction has been added/removed // send out that a reaction has been added/removed
message := model.NewWebSocketEvent(event, "", post.ChannelId, "", nil) message := model.NewWebSocketEvent(event, "", post.ChannelId, "", nil)
message.Add("reaction", reaction.ToJson()) message.Add("reaction", reaction.ToJson())

Просмотреть файл

@@ -1302,7 +1302,7 @@ func (a *App) UpdateUser(user *model.User, sendNotifications bool) (*model.User,
if userUpdate.New.Username != userUpdate.Old.Username { if userUpdate.New.Username != userUpdate.Old.Username {
a.Srv().Go(func() { a.Srv().Go(func() {
if err := a.Srv().EmailService.sendChangeUsernameEmail(userUpdate.Old.Username, userUpdate.New.Username, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil { if err := a.Srv().EmailService.sendChangeUsernameEmail(userUpdate.New.Username, userUpdate.New.Email, userUpdate.New.Locale, a.GetSiteURL()); err != nil {
mlog.Error("Failed to send change username email", mlog.Err(err)) mlog.Error("Failed to send change username email", mlog.Err(err))
} }
}) })

Просмотреть файл

@@ -588,7 +588,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
} }
} }
waitUntilWebhookResposeIsCreatedAsPost := func(channel *model.Channel, th *TestHelper, t *testing.T, createdPost chan *model.Post) { waitUntilWebhookResposeIsCreatedAsPost := func(channel *model.Channel, th *TestHelper, createdPost chan *model.Post) {
go func() { go func() {
for i := 0; i < 5; i++ { for i := 0; i < 5; i++ {
time.Sleep(time.Second) time.Sleep(time.Second)
@@ -686,7 +686,7 @@ func TestTriggerOutGoingWebhookWithUsernameAndIconURL(t *testing.T) {
th.App.TriggerWebhook(payload, hook, th.BasicPost, channel) th.App.TriggerWebhook(payload, hook, th.BasicPost, channel)
waitUntilWebhookResposeIsCreatedAsPost(channel, th, t, createdPost) waitUntilWebhookResposeIsCreatedAsPost(channel, th, createdPost)
select { select {
case webhookPost := <-createdPost: case webhookPost := <-createdPost:

Просмотреть файл

@@ -334,6 +334,7 @@ func userDeactivateCmdF(command *cobra.Command, args []string) error {
return nil return nil
} }
//nolint:unparam
func userCreateCmdF(command *cobra.Command, args []string) error { func userCreateCmdF(command *cobra.Command, args []string) error {
a, err := InitDBCommandContextCobra(command) a, err := InitDBCommandContextCobra(command)
if err != nil { if err != nil {
@@ -426,7 +427,7 @@ func usersToBots(args []string, a *app.App) {
} }
} }
func getUpdatedPassword(command *cobra.Command, a *app.App, user *model.User) (string, error) { func getUpdatedPassword(command *cobra.Command) (string, error) {
password, err := command.Flags().GetString("password") password, err := command.Flags().GetString("password")
if err != nil { if err != nil {
return "", fmt.Errorf("Unable to read password. Error: %s", err.Error()) return "", fmt.Errorf("Unable to read password. Error: %s", err.Error())
@@ -500,7 +501,7 @@ func botToUser(command *cobra.Command, args []string, a *app.App) error {
return fmt.Errorf("Unable to find bot. Error: %s", appErr.Error()) return fmt.Errorf("Unable to find bot. Error: %s", appErr.Error())
} }
password, err := getUpdatedPassword(command, a, user) password, err := getUpdatedPassword(command)
if err != nil { if err != nil {
return err return err
} }

Просмотреть файл

@@ -9,7 +9,6 @@ import (
"github.com/mattermost/mattermost-server/v5/app" "github.com/mattermost/mattermost-server/v5/app"
"github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/mlog"
"github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/store"
) )
const ( const (
@@ -33,10 +32,11 @@ func (scheduler *Scheduler) JobType() string {
return model.JOB_TYPE_MIGRATIONS return model.JOB_TYPE_MIGRATIONS
} }
func (scheduler *Scheduler) Enabled(cfg *model.Config) bool { func (scheduler *Scheduler) Enabled(_ *model.Config) bool {
return true return true
} }
//nolint:unparam
func (scheduler *Scheduler) NextScheduleTime(cfg *model.Config, now time.Time, pendingJobs bool, lastSuccessfulJob *model.Job) *time.Time { func (scheduler *Scheduler) NextScheduleTime(cfg *model.Config, now time.Time, pendingJobs bool, lastSuccessfulJob *model.Job) *time.Time {
if scheduler.allMigrationsCompleted { if scheduler.allMigrationsCompleted {
return nil return nil
@@ -46,6 +46,7 @@ func (scheduler *Scheduler) NextScheduleTime(cfg *model.Config, now time.Time, p
return &nextTime return &nextTime
} }
//nolint:unparam
func (scheduler *Scheduler) ScheduleJob(cfg *model.Config, pendingJobs bool, lastSuccessfulJob *model.Job) (*model.Job, *model.AppError) { func (scheduler *Scheduler) ScheduleJob(cfg *model.Config, pendingJobs bool, lastSuccessfulJob *model.Job) (*model.Job, *model.AppError) {
mlog.Debug("Scheduling Job", mlog.String("scheduler", scheduler.Name())) mlog.Debug("Scheduling Job", mlog.String("scheduler", scheduler.Name()))
@@ -64,7 +65,7 @@ func (scheduler *Scheduler) ScheduleJob(cfg *model.Config, pendingJobs bool, las
if err := scheduler.srv.Jobs.SetJobError(job, nil); err != nil { if err := scheduler.srv.Jobs.SetJobError(job, nil); err != nil {
mlog.Error("Worker: Failed to set job error", mlog.String("scheduler", scheduler.Name()), mlog.String("job_id", job.Id), mlog.String("error", err.Error())) mlog.Error("Worker: Failed to set job error", mlog.String("scheduler", scheduler.Name()), mlog.String("job_id", job.Id), mlog.String("error", err.Error()))
} }
return scheduler.createJob(key, job, scheduler.srv.Store) return scheduler.createJob(key, job)
} }
return nil, nil return nil, nil
@@ -77,7 +78,7 @@ func (scheduler *Scheduler) ScheduleJob(cfg *model.Config, pendingJobs bool, las
if state == MigrationStateUnscheduled { if state == MigrationStateUnscheduled {
mlog.Debug("Scheduling a new job for migration.", mlog.String("scheduler", scheduler.Name()), mlog.String("migration_key", key)) mlog.Debug("Scheduling a new job for migration.", mlog.String("scheduler", scheduler.Name()), mlog.String("migration_key", key))
return scheduler.createJob(key, job, scheduler.srv.Store) return scheduler.createJob(key, job)
} }
mlog.Error("Unknown migration state. Not doing anything.", mlog.String("migration_state", state)) mlog.Error("Unknown migration state. Not doing anything.", mlog.String("migration_state", state))
@@ -91,7 +92,7 @@ func (scheduler *Scheduler) ScheduleJob(cfg *model.Config, pendingJobs bool, las
return nil, nil return nil, nil
} }
func (scheduler *Scheduler) createJob(migrationKey string, lastJob *model.Job, store store.Store) (*model.Job, *model.AppError) { func (scheduler *Scheduler) createJob(migrationKey string, lastJob *model.Job) (*model.Job, *model.AppError) {
var lastDone string var lastDone string
if lastJob != nil { if lastJob != nil {
lastDone = lastJob.Data[JobDataKeyMigration_LAST_DONE] lastDone = lastJob.Data[JobDataKeyMigration_LAST_DONE]

Просмотреть файл

@@ -75,7 +75,7 @@ func NewLogrTarget(name string, t *LogTarget) (logr.Target, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
filter, err := newFilter(name, t.Levels) filter, err := newFilter(t.Levels)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -99,7 +99,7 @@ func NewLogrTarget(name string, t *LogTarget) (logr.Target, error) {
return nil, fmt.Errorf("invalid type '%s' for target %s", t.Type, name) return nil, fmt.Errorf("invalid type '%s' for target %s", t.Type, name)
} }
func newFilter(name string, levels []LogLevel) (logr.Filter, error) { func newFilter(levels []LogLevel) (logr.Filter, error) {
filter := &logr.CustomFilter{} filter := &logr.CustomFilter{}
for _, lvl := range levels { for _, lvl := range levels {
filter.Add(logr.Level(lvl)) filter.Add(logr.Level(lvl))

Просмотреть файл

@@ -90,7 +90,7 @@ func (tcp *Tcp) getConn() (net.Conn, error) {
tcp.monitor = make(chan struct{}) tcp.monitor = make(chan struct{})
go monitor(tcp.conn, tcp.monitor) go monitor(tcp.conn, tcp.monitor)
} }
connChan <- result{conn: conn, err: err} ch <- result{conn: conn, err: err}
}(ctx, connChan) }(ctx, connChan)
select { select {

Просмотреть файл

@@ -3188,7 +3188,7 @@ func (o *Config) IsValid() *AppError {
return err return err
} }
if err := o.MessageExportSettings.isValid(o.FileSettings); err != nil { if err := o.MessageExportSettings.isValid(); err != nil {
return err return err
} }
@@ -3631,7 +3631,7 @@ func (s *LocalizationSettings) isValid() *AppError {
return nil return nil
} }
func (s *MessageExportSettings) isValid(fs FileSettings) *AppError { func (s *MessageExportSettings) isValid() *AppError {
if s.EnableExport == nil { if s.EnableExport == nil {
return NewAppError("Config.IsValid", "model.config.is_valid.message_export.enable.app_error", nil, "", http.StatusBadRequest) return NewAppError("Config.IsValid", "model.config.is_valid.message_export.enable.app_error", nil, "", http.StatusBadRequest)
} }

Просмотреть файл

@@ -388,63 +388,56 @@ func TestTeamSettingsIsValidSiteNameEmpty(t *testing.T) {
} }
func TestMessageExportSettingsIsValidEnableExportNotSet(t *testing.T) { func TestMessageExportSettingsIsValidEnableExportNotSet(t *testing.T) {
fs := &FileSettings{}
mes := &MessageExportSettings{} mes := &MessageExportSettings{}
// should fail fast because mes.EnableExport is not set // should fail fast because mes.EnableExport is not set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidEnableExportFalse(t *testing.T) { func TestMessageExportSettingsIsValidEnableExportFalse(t *testing.T) {
fs := &FileSettings{}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(false), EnableExport: NewBool(false),
} }
// should fail fast because message export isn't enabled // should fail fast because message export isn't enabled
require.Nil(t, mes.isValid(*fs)) require.Nil(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidExportFromTimestampInvalid(t *testing.T) { func TestMessageExportSettingsIsValidExportFromTimestampInvalid(t *testing.T) {
fs := &FileSettings{}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
} }
// should fail fast because export from timestamp isn't set // should fail fast because export from timestamp isn't set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
mes.ExportFromTimestamp = NewInt64(-1) mes.ExportFromTimestamp = NewInt64(-1)
// should fail fast because export from timestamp isn't valid // should fail fast because export from timestamp isn't valid
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
mes.ExportFromTimestamp = NewInt64(GetMillis() + 10000) mes.ExportFromTimestamp = NewInt64(GetMillis() + 10000)
// should fail fast because export from timestamp is greater than current time // should fail fast because export from timestamp is greater than current time
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidDailyRunTimeInvalid(t *testing.T) { func TestMessageExportSettingsIsValidDailyRunTimeInvalid(t *testing.T) {
fs := &FileSettings{}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFromTimestamp: NewInt64(0), ExportFromTimestamp: NewInt64(0),
} }
// should fail fast because daily runtime isn't set // should fail fast because daily runtime isn't set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
mes.DailyRunTime = NewString("33:33:33") mes.DailyRunTime = NewString("33:33:33")
// should fail fast because daily runtime is invalid format // should fail fast because daily runtime is invalid format
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidBatchSizeInvalid(t *testing.T) { func TestMessageExportSettingsIsValidBatchSizeInvalid(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFromTimestamp: NewInt64(0), ExportFromTimestamp: NewInt64(0),
@@ -452,13 +445,10 @@ func TestMessageExportSettingsIsValidBatchSizeInvalid(t *testing.T) {
} }
// should fail fast because batch size isn't set // should fail fast because batch size isn't set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidExportFormatInvalid(t *testing.T) { func TestMessageExportSettingsIsValidExportFormatInvalid(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFromTimestamp: NewInt64(0), ExportFromTimestamp: NewInt64(0),
@@ -467,13 +457,10 @@ func TestMessageExportSettingsIsValidExportFormatInvalid(t *testing.T) {
} }
// should fail fast because export format isn't set // should fail fast because export format isn't set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T) { func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
@@ -483,13 +470,10 @@ func TestMessageExportSettingsIsValidGlobalRelayEmailAddressInvalid(t *testing.T
} }
// should fail fast because global relay email address isn't set // should fail fast because global relay email address isn't set
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidActiance(t *testing.T) { func TestMessageExportSettingsIsValidActiance(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_ACTIANCE), ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_ACTIANCE),
@@ -499,13 +483,10 @@ func TestMessageExportSettingsIsValidActiance(t *testing.T) {
} }
// should pass because everything is valid // should pass because everything is valid
require.Nil(t, mes.isValid(*fs)) require.Nil(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) { func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
@@ -515,13 +496,10 @@ func TestMessageExportSettingsIsValidGlobalRelaySettingsMissing(t *testing.T) {
} }
// should fail because globalrelay settings are missing // should fail because globalrelay settings are missing
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *testing.T) { func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
mes := &MessageExportSettings{ mes := &MessageExportSettings{
EnableExport: NewBool(true), EnableExport: NewBool(true),
ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY), ExportFormat: NewString(COMPLIANCE_EXPORT_TYPE_GLOBALRELAY),
@@ -537,14 +515,11 @@ func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidCustomerType(t *t
} }
// should fail because customer type is invalid // should fail because customer type is invalid
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
// func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidEmailAddress(t *testing.T) { // func TestMessageExportSettingsIsValidGlobalRelaySettingsInvalidEmailAddress(t *testing.T) {
func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) { func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
fs := &FileSettings{
DriverName: NewString("foo"), // bypass file location check
}
tests := []struct { tests := []struct {
name string name string
value *GlobalRelayMessageExportSettings value *GlobalRelayMessageExportSettings
@@ -613,9 +588,9 @@ func TestMessageExportSettingsGlobalRelaySettings(t *testing.T) {
} }
if tt.success { if tt.success {
require.Nil(t, mes.isValid(*fs)) require.Nil(t, mes.isValid())
} else { } else {
require.Error(t, mes.isValid(*fs)) require.Error(t, mes.isValid())
} }
}) })
} }

Просмотреть файл

@@ -55,7 +55,7 @@ func FieldListToFuncList(fieldList *ast.FieldList, fileset *token.FileSet) strin
return "(" + strings.Join(result, ", ") + ")" return "(" + strings.Join(result, ", ") + ")"
} }
func FieldListToNames(fieldList *ast.FieldList, fileset *token.FileSet, variadicForm bool) string { func FieldListToNames(fieldList *ast.FieldList, variadicForm bool) string {
result := []string{} result := []string{}
if fieldList == nil || len(fieldList.List) == 0 { if fieldList == nil || len(fieldList.List) == 0 {
return "" return ""
@@ -141,7 +141,7 @@ func FieldListDestruct(structPrefix string, fieldList *ast.FieldList, fileset *t
return strings.Join(result, ", ") return strings.Join(result, ", ")
} }
func FieldListToRecordSuccess(structPrefix string, fieldList *ast.FieldList, fileset *token.FileSet) string { func FieldListToRecordSuccess(structPrefix string, fieldList *ast.FieldList) string {
if fieldList == nil || len(fieldList.List) == 0 { if fieldList == nil || len(fieldList.List) == 0 {
return "true" return "true"
} }
@@ -458,7 +458,7 @@ func generateHooksGlue(info *PluginInterfaceInfo) {
templateFunctions := map[string]interface{}{ templateFunctions := map[string]interface{}{
"funcStyle": func(fields *ast.FieldList) string { return FieldListToFuncList(fields, info.FileSet) }, "funcStyle": func(fields *ast.FieldList) string { return FieldListToFuncList(fields, info.FileSet) },
"structStyle": func(fields *ast.FieldList) string { return FieldListToStructList(fields, info.FileSet) }, "structStyle": func(fields *ast.FieldList) string { return FieldListToStructList(fields, info.FileSet) },
"valuesOnly": func(fields *ast.FieldList) string { return FieldListToNames(fields, info.FileSet, false) }, "valuesOnly": func(fields *ast.FieldList) string { return FieldListToNames(fields, false) },
"encodeErrors": func(structPrefix string, fields *ast.FieldList) string { "encodeErrors": func(structPrefix string, fields *ast.FieldList) string {
return FieldListToEncodedErrors(structPrefix, fields, info.FileSet) return FieldListToEncodedErrors(structPrefix, fields, info.FileSet)
}, },
@@ -466,7 +466,7 @@ func generateHooksGlue(info *PluginInterfaceInfo) {
return FieldListDestruct(structPrefix, fields, info.FileSet) return FieldListDestruct(structPrefix, fields, info.FileSet)
}, },
"shouldRecordSuccess": func(structPrefix string, fields *ast.FieldList) string { "shouldRecordSuccess": func(structPrefix string, fields *ast.FieldList) string {
return FieldListToRecordSuccess(structPrefix, fields, info.FileSet) return FieldListToRecordSuccess(structPrefix, fields)
}, },
"obscure": func(name string) string { "obscure": func(name string) string {
return "Z_" + name return "Z_" + name
@@ -510,12 +510,12 @@ func generatePluginTimerLayer(info *PluginInterfaceInfo) {
templateFunctions := map[string]interface{}{ templateFunctions := map[string]interface{}{
"funcStyle": func(fields *ast.FieldList) string { return FieldListToFuncList(fields, info.FileSet) }, "funcStyle": func(fields *ast.FieldList) string { return FieldListToFuncList(fields, info.FileSet) },
"structStyle": func(fields *ast.FieldList) string { return FieldListToStructList(fields, info.FileSet) }, "structStyle": func(fields *ast.FieldList) string { return FieldListToStructList(fields, info.FileSet) },
"valuesOnly": func(fields *ast.FieldList) string { return FieldListToNames(fields, info.FileSet, true) }, "valuesOnly": func(fields *ast.FieldList) string { return FieldListToNames(fields, true) },
"destruct": func(structPrefix string, fields *ast.FieldList) string { "destruct": func(structPrefix string, fields *ast.FieldList) string {
return FieldListDestruct(structPrefix, fields, info.FileSet) return FieldListDestruct(structPrefix, fields, info.FileSet)
}, },
"shouldRecordSuccess": func(structPrefix string, fields *ast.FieldList) string { "shouldRecordSuccess": func(structPrefix string, fields *ast.FieldList) string {
return FieldListToRecordSuccess(structPrefix, fields, info.FileSet) return FieldListToRecordSuccess(structPrefix, fields)
}, },
} }

Просмотреть файл

@@ -85,7 +85,7 @@ type Actions struct {
AddUserToChannel func(*model.User, *model.Channel) (*model.ChannelMember, *model.AppError) AddUserToChannel func(*model.User, *model.Channel) (*model.ChannelMember, *model.AppError)
JoinUserToTeam func(*model.Team, *model.User, string) *model.AppError JoinUserToTeam func(*model.Team, *model.User, string) *model.AppError
CreateDirectChannel func(string, string) (*model.Channel, *model.AppError) CreateDirectChannel func(string, string) (*model.Channel, *model.AppError)
CreateGroupChannel func([]string, string) (*model.Channel, *model.AppError) CreateGroupChannel func([]string) (*model.Channel, *model.AppError)
CreateChannel func(*model.Channel, bool) (*model.Channel, *model.AppError) CreateChannel func(*model.Channel, bool) (*model.Channel, *model.AppError)
DoUploadFile func(time.Time, string, string, string, string, []byte) (*model.FileInfo, *model.AppError) DoUploadFile func(time.Time, string, string, string, string, []byte) (*model.FileInfo, *model.AppError)
GenerateThumbnailImage func(image.Image, string) GenerateThumbnailImage func(image.Image, string)
@@ -736,7 +736,7 @@ func (si *SlackImporter) oldImportChannel(channel *model.Channel, sChannel slack
if creator == nil { if creator == nil {
return nil return nil
} }
sc, err := si.actions.CreateGroupChannel(members, creator.Id) sc, err := si.actions.CreateGroupChannel(members)
if err != nil { if err != nil {
return nil return nil
} }

Просмотреть файл

@@ -109,7 +109,8 @@ func channelMemberToSlice(member *model.ChannelMember) []interface{} {
type channelMemberWithSchemeRolesList []channelMemberWithSchemeRoles type channelMemberWithSchemeRolesList []channelMemberWithSchemeRoles
func getChannelRoles(schemeGuest, schemeUser, schemeAdmin bool, defaultTeamGuestRole, defaultTeamUserRole, defaultTeamAdminRole, defaultChannelGuestRole, defaultChannelUserRole, defaultChannelAdminRole string, roles []string) rolesInfo { func getChannelRoles(schemeGuest, schemeUser, schemeAdmin bool, defaultTeamGuestRole, defaultTeamUserRole, defaultTeamAdminRole, defaultChannelGuestRole, defaultChannelUserRole, defaultChannelAdminRole string,
roles []string) rolesInfo {
result := rolesInfo{ result := rolesInfo{
roles: []string{}, roles: []string{},
explicitRoles: []string{}, explicitRoles: []string{},
@@ -606,9 +607,9 @@ func (s SqlChannelStore) SaveDirectChannel(directchannel *model.Channel, member1
member2.ChannelId = newChannel.Id member2.ChannelId = newChannel.Id
if member1.UserId != member2.UserId { if member1.UserId != member2.UserId {
_, err = s.saveMultipleMembersT(transaction, []*model.ChannelMember{member1, member2}) _, err = s.saveMultipleMembers([]*model.ChannelMember{member1, member2})
} else { } else {
_, err = s.saveMemberT(transaction, member2) _, err = s.saveMemberT(member2)
} }
if err != nil { if err != nil {
return nil, err return nil, err
@@ -729,6 +730,7 @@ func (s SqlChannelStore) GetChannelUnread(channelId, userId string) (*model.Chan
return &unreadChannel, nil return &unreadChannel, nil
} }
//nolint:unparam
func (s SqlChannelStore) InvalidateChannel(id string) { func (s SqlChannelStore) InvalidateChannel(id string) {
} }
@@ -739,8 +741,9 @@ func (s SqlChannelStore) InvalidateChannelByName(teamId, name string) {
} }
} }
//nolint:unparam
func (s SqlChannelStore) Get(id string, allowFromCache bool) (*model.Channel, error) { func (s SqlChannelStore) Get(id string, allowFromCache bool) (*model.Channel, error) {
return s.get(id, false, allowFromCache) return s.get(id, false)
} }
func (s SqlChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) { func (s SqlChannelStore) GetPinnedPosts(channelId string) (*model.PostList, error) {
@@ -758,10 +761,10 @@ func (s SqlChannelStore) GetPinnedPosts(channelId string) (*model.PostList, erro
} }
func (s SqlChannelStore) GetFromMaster(id string) (*model.Channel, error) { func (s SqlChannelStore) GetFromMaster(id string) (*model.Channel, error) {
return s.get(id, true, false) return s.get(id, true)
} }
func (s SqlChannelStore) get(id string, master bool, allowFromCache bool) (*model.Channel, error) { func (s SqlChannelStore) get(id string, master bool) (*model.Channel, error) {
var db *gorp.DbMap var db *gorp.DbMap
if master { if master {
@@ -1392,7 +1395,7 @@ func (s SqlChannelStore) SaveMultipleMembers(members []*model.ChannelMember) ([]
} }
defer finalizeTransaction(transaction) defer finalizeTransaction(transaction)
newMembers, err := s.saveMultipleMembersT(transaction, members) newMembers, err := s.saveMultipleMembers(members)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1412,7 +1415,7 @@ func (s SqlChannelStore) SaveMember(member *model.ChannelMember) (*model.Channel
return newMembers[0], nil return newMembers[0], nil
} }
func (s SqlChannelStore) saveMultipleMembersT(transaction *gorp.Transaction, members []*model.ChannelMember) ([]*model.ChannelMember, error) { func (s SqlChannelStore) saveMultipleMembers(members []*model.ChannelMember) ([]*model.ChannelMember, error) {
newChannelMembers := map[string]int{} newChannelMembers := map[string]int{}
users := map[string]bool{} users := map[string]bool{}
for _, member := range members { for _, member := range members {
@@ -1553,8 +1556,8 @@ func (s SqlChannelStore) saveMultipleMembersT(transaction *gorp.Transaction, mem
return newMembers, nil return newMembers, nil
} }
func (s SqlChannelStore) saveMemberT(transaction *gorp.Transaction, member *model.ChannelMember) (*model.ChannelMember, error) { func (s SqlChannelStore) saveMemberT(member *model.ChannelMember) (*model.ChannelMember, error) {
members, err := s.saveMultipleMembersT(transaction, []*model.ChannelMember{member}) members, err := s.saveMultipleMembers([]*model.ChannelMember{member})
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -1843,6 +1846,7 @@ func (s SqlChannelStore) GetAllChannelMembersNotifyPropsForChannel(channelId str
return props, nil return props, nil
} }
//nolint:unparam
func (s SqlChannelStore) InvalidateMemberCount(channelId string) { func (s SqlChannelStore) InvalidateMemberCount(channelId string) {
} }
@@ -1851,6 +1855,7 @@ func (s SqlChannelStore) GetMemberCountFromCache(channelId string) int64 {
return count return count
} }
//nolint:unparam
func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) { func (s SqlChannelStore) GetMemberCount(channelId string, allowFromCache bool) (int64, error) {
count, err := s.GetReplica().SelectInt(` count, err := s.GetReplica().SelectInt(`
SELECT SELECT
@@ -1939,9 +1944,11 @@ func (s SqlChannelStore) GetMemberCountsByGroup(channelID string, includeTimezon
return data, nil return data, nil
} }
//nolint:unparam
func (s SqlChannelStore) InvalidatePinnedPostCount(channelId string) { func (s SqlChannelStore) InvalidatePinnedPostCount(channelId string) {
} }
//nolint:unparam
func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) { func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache bool) (int64, error) {
count, err := s.GetReplica().SelectInt(` count, err := s.GetReplica().SelectInt(`
SELECT count(*) SELECT count(*)
@@ -1958,9 +1965,11 @@ func (s SqlChannelStore) GetPinnedPostCount(channelId string, allowFromCache boo
return count, nil return count, nil
} }
//nolint:unparam
func (s SqlChannelStore) InvalidateGuestCount(channelId string) { func (s SqlChannelStore) InvalidateGuestCount(channelId string) {
} }
//nolint:unparam
func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) { func (s SqlChannelStore) GetGuestCount(channelId string, allowFromCache bool) (int64, error) {
count, err := s.GetReplica().SelectInt(` count, err := s.GetReplica().SelectInt(`
SELECT SELECT

Просмотреть файл

@@ -324,7 +324,7 @@ func (s SqlChannelStore) CreateSidebarCategory(userId, teamId string, newCategor
} }
// now we re-order the categories according to the new order // now we re-order the categories according to the new order
if err = s.updateSidebarCategoryOrderT(transaction, userId, teamId, newOrder); err != nil { if err = s.updateSidebarCategoryOrderT(transaction, newOrder); err != nil {
return nil, err return nil, err
} }
@@ -541,7 +541,7 @@ func (s SqlChannelStore) GetSidebarCategoryOrder(userId, teamId string) ([]strin
return ids, nil return ids, nil
} }
func (s SqlChannelStore) updateSidebarCategoryOrderT(transaction *gorp.Transaction, userId, teamId string, categoryOrder []string) error { func (s SqlChannelStore) updateSidebarCategoryOrderT(transaction *gorp.Transaction, categoryOrder []string) error {
var newOrder []interface{} var newOrder []interface{}
runningOrder := 0 runningOrder := 0
for _, categoryId := range categoryOrder { for _, categoryId := range categoryOrder {
@@ -595,7 +595,7 @@ func (s SqlChannelStore) UpdateSidebarCategoryOrder(userId, teamId string, categ
} }
} }
if err = s.updateSidebarCategoryOrderT(transaction, userId, teamId, categoryOrder); err != nil { if err = s.updateSidebarCategoryOrderT(transaction, categoryOrder); err != nil {
return err return err
} }
@@ -606,6 +606,7 @@ func (s SqlChannelStore) UpdateSidebarCategoryOrder(userId, teamId string, categ
return nil return nil
} }
//nolint:unparam
func (s SqlChannelStore) UpdateSidebarCategories(userId, teamId string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, []*model.SidebarCategoryWithChannels, error) { func (s SqlChannelStore) UpdateSidebarCategories(userId, teamId string, categories []*model.SidebarCategoryWithChannels) ([]*model.SidebarCategoryWithChannels, []*model.SidebarCategoryWithChannels, error) {
transaction, err := s.GetMaster().Begin() transaction, err := s.GetMaster().Begin()
if err != nil { if err != nil {
@@ -943,6 +944,7 @@ func (s SqlChannelStore) DeleteSidebarChannelsByPreferences(preferences *model.P
return nil return nil
} }
//nolint:unparam
func (s SqlChannelStore) UpdateSidebarChannelCategoryOnMove(channel *model.Channel, newTeamId string) error { func (s SqlChannelStore) UpdateSidebarChannelCategoryOnMove(channel *model.Channel, newTeamId string) error {
// if channel is being moved, remove it from the categories, since it's possible that there's no matching category in the new team // if channel is being moved, remove it from the categories, since it's possible that there's no matching category in the new team
if _, err := s.GetMaster().Exec("DELETE FROM SidebarChannels WHERE ChannelId=:ChannelId", map[string]interface{}{"ChannelId": channel.Id}); err != nil { if _, err := s.GetMaster().Exec("DELETE FROM SidebarChannels WHERE ChannelId=:ChannelId", map[string]interface{}{"ChannelId": channel.Id}); err != nil {

Просмотреть файл

@@ -58,11 +58,11 @@ func (es SqlEmojiStore) Save(emoji *model.Emoji) (*model.Emoji, error) {
} }
func (es SqlEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, error) { func (es SqlEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, error) {
return es.getBy("Id", id, allowFromCache) return es.getBy("Id", id)
} }
func (es SqlEmojiStore) GetByName(name string, allowFromCache bool) (*model.Emoji, error) { func (es SqlEmojiStore) GetByName(name string, allowFromCache bool) (*model.Emoji, error) {
return es.getBy("Name", name, allowFromCache) return es.getBy("Name", name)
} }
func (es SqlEmojiStore) GetMultipleByName(names []string) ([]*model.Emoji, error) { func (es SqlEmojiStore) GetMultipleByName(names []string) ([]*model.Emoji, error) {
@@ -146,7 +146,7 @@ func (es SqlEmojiStore) Search(name string, prefixOnly bool, limit int) ([]*mode
} }
// getBy returns one active (not deleted) emoji, found by any one column (what/key). // getBy returns one active (not deleted) emoji, found by any one column (what/key).
func (es SqlEmojiStore) getBy(what, key string, addToCache bool) (*model.Emoji, error) { func (es SqlEmojiStore) getBy(what, key string) (*model.Emoji, error) {
var emoji *model.Emoji var emoji *model.Emoji
err := es.GetReplica().SelectOne(&emoji, err := es.GetReplica().SelectOne(&emoji,

Просмотреть файл

@@ -998,7 +998,7 @@ func (s *SqlGroupStore) groupsBySyncableBaseQuery(st model.GroupSyncableType, t
return query return query
} }
func (s *SqlGroupStore) getGroupsAssociatedToChannelsByTeam(st model.GroupSyncableType, teamID string, opts model.GroupSearchOpts) sq.SelectBuilder { func (s *SqlGroupStore) getGroupsAssociatedToChannelsByTeam(teamID string, opts model.GroupSearchOpts) sq.SelectBuilder {
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("gc.ChannelId, ug.*, gc.SchemeAdmin AS SyncableSchemeAdmin"). Select("gc.ChannelId, ug.*, gc.SchemeAdmin AS SyncableSchemeAdmin").
From("UserGroups ug"). From("UserGroups ug").
@@ -1103,7 +1103,7 @@ func (s *SqlGroupStore) GetGroupsByTeam(teamId string, opts model.GroupSearchOpt
} }
func (s *SqlGroupStore) GetGroupsAssociatedToChannelsByTeam(teamId string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, error) { func (s *SqlGroupStore) GetGroupsAssociatedToChannelsByTeam(teamId string, opts model.GroupSearchOpts) (map[string][]*model.GroupWithSchemeAdmin, error) {
query := s.getGroupsAssociatedToChannelsByTeam(model.GroupSyncableTypeTeam, teamId, opts) query := s.getGroupsAssociatedToChannelsByTeam(teamId, opts)
if opts.PageOpts != nil { if opts.PageOpts != nil {
offset := uint64(opts.PageOpts.Page * opts.PageOpts.PerPage) offset := uint64(opts.PageOpts.Page * opts.PageOpts.PerPage)

Просмотреть файл

@@ -297,7 +297,7 @@ func createStatus(ss store.Store, userId string) *model.Status {
return &m return &m
} }
func createTeam(ss store.Store, userId string) *model.Team { func createTeam(ss store.Store) *model.Team {
m := model.Team{} m := model.Team{}
m.DisplayName = "DisplayName" m.DisplayName = "DisplayName"
m.Type = model.TEAM_OPEN m.Type = model.TEAM_OPEN
@@ -972,7 +972,7 @@ func TestCheckTeamsTeamMembersIntegrity(t *testing.T) {
}) })
t.Run("should generate a report with one record", func(t *testing.T) { t.Run("should generate a report with one record", func(t *testing.T) {
team := createTeam(ss, model.NewId()) team := createTeam(ss)
member := createTeamMember(ss, team.Id, model.NewId()) member := createTeamMember(ss, team.Id, model.NewId())
dbmap.Delete(team) dbmap.Delete(team)
result := checkTeamsTeamMembersIntegrity(store) result := checkTeamsTeamMembersIntegrity(store)
@@ -1569,7 +1569,7 @@ func TestCheckUsersTeamMembersIntegrity(t *testing.T) {
t.Run("should generate a report with one record", func(t *testing.T) { t.Run("should generate a report with one record", func(t *testing.T) {
user := createUser(ss) user := createUser(ss)
team := createTeam(ss, user.Id) team := createTeam(ss)
member := createTeamMember(ss, team.Id, user.Id) member := createTeamMember(ss, team.Id, user.Id)
dbmap.Delete(user) dbmap.Delete(user)
result := checkUsersTeamMembersIntegrity(store) result := checkUsersTeamMembersIntegrity(store)

Просмотреть файл

@@ -519,15 +519,18 @@ type etagPosts struct {
UpdateAt int64 UpdateAt int64
} }
//nolint:unparam
func (s *SqlPostStore) InvalidateLastPostTimeCache(channelId string) { func (s *SqlPostStore) InvalidateLastPostTimeCache(channelId string) {
} }
//nolint:unparam
func (s *SqlPostStore) GetEtag(channelId string, allowFromCache, collapsedThreads bool) string { func (s *SqlPostStore) GetEtag(channelId string, allowFromCache, collapsedThreads bool) string {
q := s.getQueryBuilder().Select("Id", "UpdateAt").From("Posts").Where(sq.Eq{"ChannelId": channelId}).OrderBy("UpdateAt DESC").Limit(1) q := s.getQueryBuilder().Select("Id", "UpdateAt").From("Posts").Where(sq.Eq{"ChannelId": channelId}).OrderBy("UpdateAt DESC").Limit(1)
if collapsedThreads { if collapsedThreads {
q.Where(sq.Eq{"RootId": ""}) q.Where(sq.Eq{"RootId": ""})
} }
sql, args, _ := q.ToSql() sql, args, _ := q.ToSql()
var et etagPosts var et etagPosts
err := s.GetReplica().SelectOne(&et, sql, args...) err := s.GetReplica().SelectOne(&et, sql, args...)
var result string var result string
@@ -558,7 +561,7 @@ func (s *SqlPostStore) Delete(postId string, time int64, deleteByID string) erro
return errors.Wrap(err, "failed to update Posts") return errors.Wrap(err, "failed to update Posts")
} }
return s.cleanupThreads(post.Id, post.RootId, post.UserId, false) return s.cleanupThreads(post.Id, post.RootId, false)
} }
func (s *SqlPostStore) permanentDelete(postId string) error { func (s *SqlPostStore) permanentDelete(postId string) error {
@@ -567,7 +570,7 @@ func (s *SqlPostStore) permanentDelete(postId string) error {
if err != nil && err != sql.ErrNoRows { if err != nil && err != sql.ErrNoRows {
return errors.Wrapf(err, "failed to get Post with id=%s", postId) return errors.Wrapf(err, "failed to get Post with id=%s", postId)
} }
if err = s.cleanupThreads(post.Id, post.RootId, post.UserId, true); err != nil { if err = s.cleanupThreads(post.Id, post.RootId, true); err != nil {
return errors.Wrapf(err, "failed to cleanup threads for Post with id=%s", postId) return errors.Wrapf(err, "failed to cleanup threads for Post with id=%s", postId)
} }
@@ -592,7 +595,7 @@ func (s *SqlPostStore) permanentDeleteAllCommentByUser(userId string) error {
} }
for _, ids := range results { for _, ids := range results {
if err = s.cleanupThreads(ids.Id, ids.RootId, userId, true); err != nil { if err = s.cleanupThreads(ids.Id, ids.RootId, true); err != nil {
return err return err
} }
} }
@@ -648,7 +651,7 @@ func (s *SqlPostStore) PermanentDeleteByChannel(channelId string) error {
} }
for _, ids := range results { for _, ids := range results {
if err = s.cleanupThreads(ids.Id, ids.RootId, ids.UserId, true); err != nil { if err = s.cleanupThreads(ids.Id, ids.RootId, true); err != nil {
return err return err
} }
} }
@@ -825,10 +828,12 @@ func (s *SqlPostStore) getPostsSinceCollapsedThreads(options model.GetPostsSince
return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false) return s.prepareThreadedResponse(posts, options.CollapsedThreadsExtended, false)
} }
//nolint:unparam
func (s *SqlPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) { func (s *SqlPostStore) GetPostsSince(options model.GetPostsSinceOptions, allowFromCache bool) (*model.PostList, error) {
if options.CollapsedThreads { if options.CollapsedThreads {
return s.getPostsSinceCollapsedThreads(options) return s.getPostsSinceCollapsedThreads(options)
} }
var posts []*model.Post var posts []*model.Post
replyCountQuery1 := "" replyCountQuery1 := ""
@@ -2026,6 +2031,7 @@ func (s *SqlPostStore) GetDirectPostParentsForExportAfter(limit int, afterId str
return posts, nil return posts, nil
} }
//nolint:unparam
func (s *SqlPostStore) SearchPostsInTeamForUser(paramsList []*model.SearchParams, userId, teamId string, page, perPage int) (*model.PostSearchResults, error) { func (s *SqlPostStore) SearchPostsInTeamForUser(paramsList []*model.SearchParams, userId, teamId string, page, perPage int) (*model.PostSearchResults, error) {
// Since we don't support paging for DB search, we just return nothing for later pages // Since we don't support paging for DB search, we just return nothing for later pages
if page > 0 { if page > 0 {
@@ -2093,7 +2099,7 @@ func (s *SqlPostStore) GetOldestEntityCreationTime() (int64, error) {
return oldest, nil return oldest, nil
} }
func (s *SqlPostStore) cleanupThreads(postId, rootId, userId string, permanent bool) error { func (s *SqlPostStore) cleanupThreads(postId, rootId string, permanent bool) error {
if permanent { if permanent {
if _, err := s.GetMaster().Exec("DELETE FROM Threads WHERE PostId = :Id", map[string]interface{}{"Id": postId}); err != nil { if _, err := s.GetMaster().Exec("DELETE FROM Threads WHERE PostId = :Id", map[string]interface{}{"Id": postId}); err != nil {
return errors.Wrap(err, "failed to delete Threads") return errors.Wrap(err, "failed to delete Threads")

Просмотреть файл

@@ -1055,7 +1055,7 @@ func (s SqlTeamStore) GetMembers(teamId string, offset int, limit int, teamMembe
query = query.OrderBy(model.USERNAME) query = query.OrderBy(model.USERNAME)
} }
query = applyTeamMemberViewRestrictionsFilter(query, teamId, teamMembersGetOptions.ViewRestrictions) query = applyTeamMemberViewRestrictionsFilter(query, teamMembersGetOptions.ViewRestrictions)
} }
queryString, args, err := query.ToSql() queryString, args, err := query.ToSql()
@@ -1082,7 +1082,7 @@ func (s SqlTeamStore) GetTotalMemberCount(teamId string, restrictions *model.Vie
Where("TeamMembers.UserId = Users.Id"). Where("TeamMembers.UserId = Users.Id").
Where(sq.Eq{"TeamMembers.TeamId": teamId}) Where(sq.Eq{"TeamMembers.TeamId": teamId})
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions) query = applyTeamMemberViewRestrictionsFilterForStats(query, restrictions)
queryString, args, err := query.ToSql() queryString, args, err := query.ToSql()
if err != nil { if err != nil {
return int64(0), errors.Wrap(err, "team_tosql") return int64(0), errors.Wrap(err, "team_tosql")
@@ -1106,7 +1106,7 @@ func (s SqlTeamStore) GetActiveMemberCount(teamId string, restrictions *model.Vi
Where("Users.DeleteAt = 0"). Where("Users.DeleteAt = 0").
Where(sq.Eq{"TeamMembers.TeamId": teamId}) Where(sq.Eq{"TeamMembers.TeamId": teamId})
query = applyTeamMemberViewRestrictionsFilterForStats(query, teamId, restrictions) query = applyTeamMemberViewRestrictionsFilterForStats(query, restrictions)
queryString, args, err := query.ToSql() queryString, args, err := query.ToSql()
if err != nil { if err != nil {
return 0, errors.Wrap(err, "team_tosql") return 0, errors.Wrap(err, "team_tosql")
@@ -1132,7 +1132,7 @@ func (s SqlTeamStore) GetMembersByIds(teamId string, userIds []string, restricti
Where(sq.Eq{"TeamMembers.UserId": userIds}). Where(sq.Eq{"TeamMembers.UserId": userIds}).
Where(sq.Eq{"TeamMembers.DeleteAt": 0}) Where(sq.Eq{"TeamMembers.DeleteAt": 0})
query = applyTeamMemberViewRestrictionsFilter(query, teamId, restrictions) query = applyTeamMemberViewRestrictionsFilter(query, restrictions)
queryString, args, err := query.ToSql() queryString, args, err := query.ToSql()
if err != nil { if err != nil {
@@ -1408,6 +1408,7 @@ func (s SqlTeamStore) ResetAllTeamSchemes() error {
func (s SqlTeamStore) ClearCaches() {} func (s SqlTeamStore) ClearCaches() {}
// InvalidateAllTeamIdsForUser does not execute anything because the store does not handle the cache. // InvalidateAllTeamIdsForUser does not execute anything because the store does not handle the cache.
//nolint:unparam
func (s SqlTeamStore) InvalidateAllTeamIdsForUser(userId string) {} func (s SqlTeamStore) InvalidateAllTeamIdsForUser(userId string) {}
// ClearAllCustomRoleAssignments removes all custom role assignments from TeamMembers. // ClearAllCustomRoleAssignments removes all custom role assignments from TeamMembers.
@@ -1505,6 +1506,7 @@ func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.
} }
// GetUserTeamIds get the team ids to which the user belongs to. allowFromCache parameter does not have any effect in this Store // GetUserTeamIds get the team ids to which the user belongs to. allowFromCache parameter does not have any effect in this Store
//nolint:unparam
func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) ([]string, error) { func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) ([]string, error) {
var teamIds []string var teamIds []string
query, args, err := s.getQueryBuilder(). query, args, err := s.getQueryBuilder().
@@ -1585,7 +1587,7 @@ func (s SqlTeamStore) UpdateMembersRole(teamID string, userIDs []string) error {
return nil return nil
} }
func applyTeamMemberViewRestrictionsFilter(query sq.SelectBuilder, teamId string, restrictions *model.ViewUsersRestrictions) sq.SelectBuilder { func applyTeamMemberViewRestrictionsFilter(query sq.SelectBuilder, restrictions *model.ViewUsersRestrictions) sq.SelectBuilder {
if restrictions == nil { if restrictions == nil {
return query return query
} }
@@ -1615,7 +1617,7 @@ func applyTeamMemberViewRestrictionsFilter(query sq.SelectBuilder, teamId string
return resultQuery.Distinct() return resultQuery.Distinct()
} }
func applyTeamMemberViewRestrictionsFilterForStats(query sq.SelectBuilder, teamId string, restrictions *model.ViewUsersRestrictions) sq.SelectBuilder { func applyTeamMemberViewRestrictionsFilterForStats(query sq.SelectBuilder, restrictions *model.ViewUsersRestrictions) sq.SelectBuilder {
if restrictions == nil { if restrictions == nil {
return query return query
} }

Просмотреть файл

@@ -36,7 +36,7 @@ func cleanupChannels(t *testing.T, ss store.Store) {
} }
func TestChannelStore(t *testing.T, ss store.Store, s SqlStore) { func TestChannelStore(t *testing.T, ss store.Store, s SqlStore) {
createDefaultRoles(t, ss) createDefaultRoles(ss)
t.Run("Save", func(t *testing.T) { testChannelStoreSave(t, ss) }) t.Run("Save", func(t *testing.T) { testChannelStoreSave(t, ss) })
t.Run("SaveDirectChannel", func(t *testing.T) { testChannelStoreSaveDirectChannel(t, ss, s) }) t.Run("SaveDirectChannel", func(t *testing.T) { testChannelStoreSaveDirectChannel(t, ss, s) })
@@ -79,7 +79,7 @@ func TestChannelStore(t *testing.T, ss store.Store, s SqlStore) {
t.Run("GetMemberCountsByGroup", func(t *testing.T) { testGetMemberCountsByGroup(t, ss) }) t.Run("GetMemberCountsByGroup", func(t *testing.T) { testGetMemberCountsByGroup(t, ss) })
t.Run("GetGuestCount", func(t *testing.T) { testGetGuestCount(t, ss) }) t.Run("GetGuestCount", func(t *testing.T) { testGetGuestCount(t, ss) })
t.Run("SearchMore", func(t *testing.T) { testChannelStoreSearchMore(t, ss) }) t.Run("SearchMore", func(t *testing.T) { testChannelStoreSearchMore(t, ss) })
t.Run("SearchInTeam", func(t *testing.T) { testChannelStoreSearchInTeam(t, ss, s) }) t.Run("SearchInTeam", func(t *testing.T) { testChannelStoreSearchInTeam(t, ss) })
t.Run("SearchArchivedInTeam", func(t *testing.T) { testChannelStoreSearchArchivedInTeam(t, ss, s) }) t.Run("SearchArchivedInTeam", func(t *testing.T) { testChannelStoreSearchArchivedInTeam(t, ss, s) })
t.Run("SearchForUserInTeam", func(t *testing.T) { testChannelStoreSearchForUserInTeam(t, ss) }) t.Run("SearchForUserInTeam", func(t *testing.T) { testChannelStoreSearchForUserInTeam(t, ss) })
t.Run("SearchAllChannels", func(t *testing.T) { testChannelStoreSearchAllChannels(t, ss) }) t.Run("SearchAllChannels", func(t *testing.T) { testChannelStoreSearchAllChannels(t, ss) })
@@ -107,7 +107,7 @@ func TestChannelStore(t *testing.T, ss store.Store, s SqlStore) {
t.Run("CreateSidebarCategory", func(t *testing.T) { testCreateSidebarCategory(t, ss) }) t.Run("CreateSidebarCategory", func(t *testing.T) { testCreateSidebarCategory(t, ss) })
t.Run("GetSidebarCategory", func(t *testing.T) { testGetSidebarCategory(t, ss, s) }) t.Run("GetSidebarCategory", func(t *testing.T) { testGetSidebarCategory(t, ss, s) })
t.Run("GetSidebarCategories", func(t *testing.T) { testGetSidebarCategories(t, ss) }) t.Run("GetSidebarCategories", func(t *testing.T) { testGetSidebarCategories(t, ss) })
t.Run("UpdateSidebarCategories", func(t *testing.T) { testUpdateSidebarCategories(t, ss, s) }) t.Run("UpdateSidebarCategories", func(t *testing.T) { testUpdateSidebarCategories(t, ss) })
t.Run("DeleteSidebarCategory", func(t *testing.T) { testDeleteSidebarCategory(t, ss, s) }) t.Run("DeleteSidebarCategory", func(t *testing.T) { testDeleteSidebarCategory(t, ss, s) })
t.Run("UpdateSidebarChannelsByPreferences", func(t *testing.T) { testUpdateSidebarChannelsByPreferences(t, ss) }) t.Run("UpdateSidebarChannelsByPreferences", func(t *testing.T) { testUpdateSidebarChannelsByPreferences(t, ss) })
} }
@@ -4971,7 +4971,7 @@ func testChannelStoreSearchArchivedInTeam(t *testing.T, ss store.Store, s SqlSto
}) })
} }
func testChannelStoreSearchInTeam(t *testing.T, ss store.Store, s SqlStore) { func testChannelStoreSearchInTeam(t *testing.T, ss store.Store) {
teamId := model.NewId() teamId := model.NewId()
otherTeamId := model.NewId() otherTeamId := model.NewId()

Просмотреть файл

@@ -21,8 +21,9 @@ func TestChannelStoreCategories(t *testing.T, ss store.Store, s SqlStore) {
t.Run("CreateSidebarCategory", func(t *testing.T) { testCreateSidebarCategory(t, ss) }) t.Run("CreateSidebarCategory", func(t *testing.T) { testCreateSidebarCategory(t, ss) })
t.Run("GetSidebarCategory", func(t *testing.T) { testGetSidebarCategory(t, ss, s) }) t.Run("GetSidebarCategory", func(t *testing.T) { testGetSidebarCategory(t, ss, s) })
t.Run("GetSidebarCategories", func(t *testing.T) { testGetSidebarCategories(t, ss) }) t.Run("GetSidebarCategories", func(t *testing.T) { testGetSidebarCategories(t, ss) })
t.Run("UpdateSidebarCategories", func(t *testing.T) { testUpdateSidebarCategories(t, ss, s) }) t.Run("UpdateSidebarCategories", func(t *testing.T) { testUpdateSidebarCategories(t, ss) })
t.Run("ClearSidebarOnTeamLeave", func(t *testing.T) { testClearSidebarOnTeamLeave(t, ss, s) }) t.Run("ClearSidebarOnTeamLeave", func(t *testing.T) { testClearSidebarOnTeamLeave(t, ss, s) })
t.Run("UpdateSidebarCategories", func(t *testing.T) { testUpdateSidebarCategories(t, ss) })
t.Run("DeleteSidebarCategory", func(t *testing.T) { testDeleteSidebarCategory(t, ss, s) }) t.Run("DeleteSidebarCategory", func(t *testing.T) { testDeleteSidebarCategory(t, ss, s) })
t.Run("UpdateSidebarChannelsByPreferences", func(t *testing.T) { testUpdateSidebarChannelsByPreferences(t, ss) }) t.Run("UpdateSidebarChannelsByPreferences", func(t *testing.T) { testUpdateSidebarChannelsByPreferences(t, ss) })
} }
@@ -869,7 +870,7 @@ func testGetSidebarCategories(t *testing.T, ss store.Store) {
}) })
} }
func testUpdateSidebarCategories(t *testing.T, ss store.Store, s SqlStore) { func testUpdateSidebarCategories(t *testing.T, ss store.Store) {
t.Run("ensure the query to update SidebarCategories hasn't been polluted by UpdateSidebarCategoryOrder", func(t *testing.T) { t.Run("ensure the query to update SidebarCategories hasn't been polluted by UpdateSidebarCategoryOrder", func(t *testing.T) {
userId := model.NewId() userId := model.NewId()
teamId := model.NewId() teamId := model.NewId()

Просмотреть файл

@@ -15,10 +15,10 @@ import (
) )
func TestPluginStore(t *testing.T, ss store.Store, s SqlStore) { func TestPluginStore(t *testing.T, ss store.Store, s SqlStore) {
t.Run("SaveOrUpdate", func(t *testing.T) { testPluginSaveOrUpdate(t, ss, s) }) t.Run("SaveOrUpdate", func(t *testing.T) { testPluginSaveOrUpdate(t, ss) })
t.Run("CompareAndSet", func(t *testing.T) { testPluginCompareAndSet(t, ss, s) }) t.Run("CompareAndSet", func(t *testing.T) { testPluginCompareAndSet(t, ss) })
t.Run("CompareAndDelete", func(t *testing.T) { testPluginCompareAndDelete(t, ss, s) }) t.Run("CompareAndDelete", func(t *testing.T) { testPluginCompareAndDelete(t, ss) })
t.Run("SetWithOptions", func(t *testing.T) { testPluginSetWithOptions(t, ss, s) }) t.Run("SetWithOptions", func(t *testing.T) { testPluginSetWithOptions(t, ss) })
t.Run("Get", func(t *testing.T) { testPluginGet(t, ss) }) t.Run("Get", func(t *testing.T) { testPluginGet(t, ss) })
t.Run("Delete", func(t *testing.T) { testPluginDelete(t, ss) }) t.Run("Delete", func(t *testing.T) { testPluginDelete(t, ss) })
t.Run("DeleteAllForPlugin", func(t *testing.T) { testPluginDeleteAllForPlugin(t, ss) }) t.Run("DeleteAllForPlugin", func(t *testing.T) { testPluginDeleteAllForPlugin(t, ss) })
@@ -63,7 +63,7 @@ func setupKVs(t *testing.T, ss store.Store) (string, func()) {
} }
} }
func doTestPluginSaveOrUpdate(t *testing.T, ss store.Store, s SqlStore, doer func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error)) { func doTestPluginSaveOrUpdate(t *testing.T, ss store.Store, doer func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error)) {
t.Run("invalid kv", func(t *testing.T) { t.Run("invalid kv", func(t *testing.T) {
_, tearDown := setupKVs(t, ss) _, tearDown := setupKVs(t, ss)
defer tearDown() defer tearDown()
@@ -219,15 +219,15 @@ func doTestPluginSaveOrUpdate(t *testing.T, ss store.Store, s SqlStore, doer fun
}) })
} }
func testPluginSaveOrUpdate(t *testing.T, ss store.Store, s SqlStore) { func testPluginSaveOrUpdate(t *testing.T, ss store.Store) {
doTestPluginSaveOrUpdate(t, ss, s, func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error) { doTestPluginSaveOrUpdate(t, ss, func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error) {
return ss.Plugin().SaveOrUpdate(kv) return ss.Plugin().SaveOrUpdate(kv)
}) })
} }
// doTestPluginCompareAndSet exercises the CompareAndSet functionality, but abstracts the actual // doTestPluginCompareAndSet exercises the CompareAndSet functionality, but abstracts the actual
// call to same to allow reuse with SetWithOptions // call to same to allow reuse with SetWithOptions
func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compareAndSet func(kv *model.PluginKeyValue, oldValue []byte) (bool, error)) { func doTestPluginCompareAndSet(t *testing.T, ss store.Store, compareAndSet func(kv *model.PluginKeyValue, oldValue []byte) (bool, error)) {
t.Run("invalid kv", func(t *testing.T) { t.Run("invalid kv", func(t *testing.T) {
_, tearDown := setupKVs(t, ss) _, tearDown := setupKVs(t, ss)
defer tearDown() defer tearDown()
@@ -419,7 +419,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
} }
for description, setToSameValue := range testCases { for description, setToSameValue := range testCases {
makeKV := func(t *testing.T, existingKV *model.PluginKeyValue) *model.PluginKeyValue { makeKV := func(existingKV *model.PluginKeyValue) *model.PluginKeyValue {
kv := &model.PluginKeyValue{ kv := &model.PluginKeyValue{
PluginId: existingKV.PluginId, PluginId: existingKV.PluginId,
Key: existingKV.Key, Key: existingKV.Key,
@@ -446,7 +446,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
assertUnchanged(t, kv, existingKV, oldValue) assertUnchanged(t, kv, existingKV, oldValue)
}) })
} }
@@ -456,7 +456,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
assertChanged(t, kv, existingKV.Value) assertChanged(t, kv, existingKV.Value)
}) })
@@ -465,7 +465,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
kv.ExpireAt = model.GetMillis() + 15*1000 kv.ExpireAt = model.GetMillis() + 15*1000
assertChanged(t, kv, existingKV.Value) assertChanged(t, kv, existingKV.Value)
@@ -475,7 +475,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
kv.ExpireAt = model.GetMillis() - 15*1000 kv.ExpireAt = model.GetMillis() - 15*1000
assertRemoved(t, kv, existingKV.Value) assertRemoved(t, kv, existingKV.Value)
@@ -484,7 +484,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
} }
t.Run("setting a nil value", func(t *testing.T) { t.Run("setting a nil value", func(t *testing.T) {
makeKV := func(t *testing.T, existingKV *model.PluginKeyValue) *model.PluginKeyValue { makeKV := func(existingKV *model.PluginKeyValue) *model.PluginKeyValue {
kv := &model.PluginKeyValue{ kv := &model.PluginKeyValue{
PluginId: existingKV.PluginId, PluginId: existingKV.PluginId,
Key: existingKV.Key, Key: existingKV.Key,
@@ -507,7 +507,7 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
assertUnchanged(t, kv, existingKV, oldValue) assertUnchanged(t, kv, existingKV, oldValue)
}) })
} }
@@ -517,20 +517,20 @@ func doTestPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore, compare
existingKV, tearDown := setup(t) existingKV, tearDown := setup(t)
defer tearDown() defer tearDown()
kv := makeKV(t, existingKV) kv := makeKV(existingKV)
assertRemoved(t, kv, existingKV.Value) assertRemoved(t, kv, existingKV.Value)
}) })
}) })
}) })
} }
func testPluginCompareAndSet(t *testing.T, ss store.Store, s SqlStore) { func testPluginCompareAndSet(t *testing.T, ss store.Store) {
doTestPluginCompareAndSet(t, ss, s, func(kv *model.PluginKeyValue, oldValue []byte) (bool, error) { doTestPluginCompareAndSet(t, ss, func(kv *model.PluginKeyValue, oldValue []byte) (bool, error) {
return ss.Plugin().CompareAndSet(kv, oldValue) return ss.Plugin().CompareAndSet(kv, oldValue)
}) })
} }
func testPluginCompareAndDelete(t *testing.T, ss store.Store, s SqlStore) { func testPluginCompareAndDelete(t *testing.T, ss store.Store) {
t.Run("invalid kv", func(t *testing.T) { t.Run("invalid kv", func(t *testing.T) {
_, tearDown := setupKVs(t, ss) _, tearDown := setupKVs(t, ss)
defer tearDown() defer tearDown()
@@ -660,7 +660,7 @@ func testPluginCompareAndDelete(t *testing.T, ss store.Store, s SqlStore) {
}) })
} }
func testPluginSetWithOptions(t *testing.T, ss store.Store, s SqlStore) { func testPluginSetWithOptions(t *testing.T, ss store.Store) {
t.Run("invalid options", func(t *testing.T) { t.Run("invalid options", func(t *testing.T) {
_, tearDown := setupKVs(t, ss) _, tearDown := setupKVs(t, ss)
defer tearDown() defer tearDown()
@@ -699,7 +699,7 @@ func testPluginSetWithOptions(t *testing.T, ss store.Store, s SqlStore) {
}) })
t.Run("atomic", func(t *testing.T) { t.Run("atomic", func(t *testing.T) {
doTestPluginCompareAndSet(t, ss, s, func(kv *model.PluginKeyValue, oldValue []byte) (bool, error) { doTestPluginCompareAndSet(t, ss, func(kv *model.PluginKeyValue, oldValue []byte) (bool, error) {
now := model.GetMillis() now := model.GetMillis()
options := model.PluginKVSetOptions{ options := model.PluginKVSetOptions{
Atomic: true, Atomic: true,
@@ -715,7 +715,7 @@ func testPluginSetWithOptions(t *testing.T, ss store.Store, s SqlStore) {
}) })
t.Run("non-atomic", func(t *testing.T) { t.Run("non-atomic", func(t *testing.T) {
doTestPluginSaveOrUpdate(t, ss, s, func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error) { doTestPluginSaveOrUpdate(t, ss, func(kv *model.PluginKeyValue) (*model.PluginKeyValue, error) {
now := model.GetMillis() now := model.GetMillis()
options := model.PluginKVSetOptions{ options := model.PluginKVSetOptions{
Atomic: false, Atomic: false,

Просмотреть файл

@@ -361,7 +361,7 @@ func testRoleStorePermanentDeleteAll(t *testing.T, ss store.Store) {
} }
func testRoleStoreLowerScopedChannelSchemeRoles(t *testing.T, ss store.Store) { func testRoleStoreLowerScopedChannelSchemeRoles(t *testing.T, ss store.Store) {
createDefaultRoles(t, ss) createDefaultRoles(ss)
teamScheme1 := &model.Scheme{ teamScheme1 := &model.Scheme{
DisplayName: model.NewId(), DisplayName: model.NewId(),

Просмотреть файл

@@ -14,7 +14,7 @@ import (
) )
func TestSchemeStore(t *testing.T, ss store.Store) { func TestSchemeStore(t *testing.T, ss store.Store) {
createDefaultRoles(t, ss) createDefaultRoles(ss)
t.Run("Save", func(t *testing.T) { testSchemeStoreSave(t, ss) }) t.Run("Save", func(t *testing.T) { testSchemeStoreSave(t, ss) })
t.Run("Get", func(t *testing.T) { testSchemeStoreGet(t, ss) }) t.Run("Get", func(t *testing.T) { testSchemeStoreGet(t, ss) })
@@ -26,7 +26,7 @@ func TestSchemeStore(t *testing.T, ss store.Store) {
t.Run("CountWithoutPermission", func(t *testing.T) { testCountWithoutPermission(t, ss) }) t.Run("CountWithoutPermission", func(t *testing.T) { testCountWithoutPermission(t, ss) })
} }
func createDefaultRoles(t *testing.T, ss store.Store) { func createDefaultRoles(ss store.Store) {
ss.Role().Save(&model.Role{ ss.Role().Save(&model.Role{
Name: model.TEAM_ADMIN_ROLE_ID, Name: model.TEAM_ADMIN_ROLE_ID,
DisplayName: model.TEAM_ADMIN_ROLE_ID, DisplayName: model.TEAM_ADMIN_ROLE_ID,

Просмотреть файл

@@ -26,7 +26,7 @@ func cleanupTeamStore(t *testing.T, ss store.Store) {
} }
func TestTeamStore(t *testing.T, ss store.Store) { func TestTeamStore(t *testing.T, ss store.Store) {
createDefaultRoles(t, ss) createDefaultRoles(ss)
t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) }) t.Run("Save", func(t *testing.T) { testTeamStoreSave(t, ss) })
t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) }) t.Run("Update", func(t *testing.T) { testTeamStoreUpdate(t, ss) })

Просмотреть файл

@@ -214,7 +214,7 @@ func (b *blockReader) close() error {
} }
// decode reads a GIF image from r and stores the result in d. // decode reads a GIF image from r and stores the result in d.
func (d *decoder) decode(r io.Reader, configOnly, keepAllFrames bool) error { func (d *decoder) decode(r io.Reader, configOnly bool) error {
// Add buffering if r does not provide ReadByte. // Add buffering if r does not provide ReadByte.
if rr, ok := r.(reader); ok { if rr, ok := r.(reader); ok {
d.r = rr d.r = rr
@@ -244,7 +244,7 @@ func (d *decoder) decode(r io.Reader, configOnly, keepAllFrames bool) error {
} }
case sImageDescriptor: case sImageDescriptor:
if err = d.readImageDescriptor(keepAllFrames); err != nil { if err = d.readImageDescriptor(); err != nil {
return err return err
} }
@@ -370,7 +370,7 @@ func (d *decoder) readGraphicControl() error {
return nil return nil
} }
func (d *decoder) readImageDescriptor(keepAllFrames bool) error { func (d *decoder) readImageDescriptor() error {
m, err := d.newImageFromDescriptor() m, err := d.newImageFromDescriptor()
if err != nil { if err != nil {
return err return err
@@ -503,7 +503,7 @@ func (d *decoder) readBlock() (int, error) {
func CountFrames(r io.Reader) (int, error) { func CountFrames(r io.Reader) (int, error) {
var d decoder var d decoder
if err := d.decode(r, false, true); err != nil { if err := d.decode(r, false); err != nil {
return -1, err return -1, err
} }
return d.imageCount, nil return d.imageCount, nil

Просмотреть файл

@@ -34,7 +34,7 @@ func (b *BlockQuote) AddChild(openBlocks []Block) []Block {
return openBlocks return openBlocks
} }
func blockQuoteStart(markdown string, indent int, r Range, matchedBlocks, unmatchedBlocks []Block) []Block { func blockQuoteStart(markdown string, indent int, r Range) []Block {
if indent > 3 { if indent > 3 {
return nil return nil
} }

Просмотреть файл

@@ -130,13 +130,13 @@ func blockStart(markdown string, indentation int, r Range, matchedBlocks, unmatc
return nil return nil
} }
if start := blockQuoteStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil { if start := blockQuoteStart(markdown, indentation, r); start != nil {
return start return start
} else if start := listStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil { } else if start := listStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil {
return start return start
} else if start := indentedCodeStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil { } else if start := indentedCodeStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil {
return start return start
} else if start := fencedCodeStart(markdown, indentation, r, matchedBlocks, unmatchedBlocks); start != nil { } else if start := fencedCodeStart(markdown, indentation, r); start != nil {
return start return start
} }

Просмотреть файл

@@ -78,7 +78,7 @@ func (b *FencedCode) AllowsBlockStarts() bool {
return false return false
} }
func fencedCodeStart(markdown string, indentation int, r Range, matchedBlocks, unmatchedBlocks []Block) []Block { func fencedCodeStart(markdown string, indentation int, r Range) []Block {
s := markdown[r.Position:r.End] s := markdown[r.Position:r.End]
if !strings.HasPrefix(s, "```") && !strings.HasPrefix(s, "~~~") { if !strings.HasPrefix(s, "```") && !strings.HasPrefix(s, "~~~") {

Просмотреть файл

@@ -21,10 +21,8 @@ import (
"github.com/mattermost/mattermost-server/v5/mlog" "github.com/mattermost/mattermost-server/v5/mlog"
"github.com/mattermost/mattermost-server/v5/model" "github.com/mattermost/mattermost-server/v5/model"
"github.com/mattermost/mattermost-server/v5/plugin" "github.com/mattermost/mattermost-server/v5/plugin"
"github.com/mattermost/mattermost-server/v5/store"
"github.com/mattermost/mattermost-server/v5/store/localcachelayer" "github.com/mattermost/mattermost-server/v5/store/localcachelayer"
"github.com/mattermost/mattermost-server/v5/store/storetest/mocks" "github.com/mattermost/mattermost-server/v5/store/storetest/mocks"
"github.com/mattermost/mattermost-server/v5/testlib"
"github.com/mattermost/mattermost-server/v5/utils" "github.com/mattermost/mattermost-server/v5/utils"
) )
@@ -51,8 +49,8 @@ func SetupWithStoreMock(tb testing.TB) *TestHelper {
if testing.Short() { if testing.Short() {
tb.SkipNow() tb.SkipNow()
} }
store := testlib.GetMockStoreForSetupFunctions()
th := setupTestHelper(tb, store, false) th := setupTestHelper(false)
emptyMockStore := mocks.Store{} emptyMockStore := mocks.Store{}
emptyMockStore.On("Close").Return(nil) emptyMockStore.On("Close").Return(nil)
th.App.Srv().Store = &emptyMockStore th.App.Srv().Store = &emptyMockStore
@@ -65,10 +63,10 @@ func Setup(tb testing.TB) *TestHelper {
} }
store := mainHelper.GetStore() store := mainHelper.GetStore()
store.DropAllTables() store.DropAllTables()
return setupTestHelper(tb, store, true) return setupTestHelper(true)
} }
func setupTestHelper(t testing.TB, store store.Store, includeCacheLayer bool) *TestHelper { func setupTestHelper(includeCacheLayer bool) *TestHelper {
memoryStore := config.NewTestMemoryStore() memoryStore := config.NewTestMemoryStore()
newConfig := memoryStore.Get().Clone() newConfig := memoryStore.Get().Clone()
*newConfig.AnnouncementSettings.AdminNoticesEnabled = false *newConfig.AnnouncementSettings.AdminNoticesEnabled = false