There was already a cache present for emoji names. But we weren't using it for the GetMultipleByName method. Now we implement that method to look up the cache for every emoji name passed. Secondly, a bigger problem was that we were making the DB call for system emojis as well. Since system emojis aren't stored in the DB, it would fall through the cache layer and always make a redundant DB call. In the profiles, this should up as taking 16% of the total time to serve a getPostsForChannel API endpoint. We fix this by filtering the emojis to only custom emojis before making the call. https://mattermost.atlassian.net/browse/MM-53669 ```release-note NONE ```
30 строки
813 B
Go
30 строки
813 B
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package app
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestGetMultipleEmojiByName(t *testing.T) {
|
|
// The fact that we use mock store ensures that
|
|
// the call to the DB does not happen. If it did, we would have needed
|
|
// to provide the mock explicitly.
|
|
th := SetupWithStoreMock(t)
|
|
defer th.TearDown()
|
|
|
|
th.App.UpdateConfig(func(cfg *model.Config) {
|
|
*cfg.ServiceSettings.EnableCustomEmoji = true
|
|
})
|
|
|
|
// Ensure it returns empty for system emojis
|
|
emojis, appErr := th.App.GetMultipleEmojiByName(th.Context, []string{"+1"})
|
|
require.Nil(t, appErr)
|
|
assert.Empty(t, emojis)
|
|
}
|