From b138d4b8c4656fb14d7f7ab02022b3a08c68a6eb Mon Sep 17 00:00:00 2001 From: Shobhit Gupta Date: Tue, 2 Jul 2019 13:26:09 -0700 Subject: [PATCH] Migrate Emoji.GetMultipleByName to Sync by default (#11315) * Migrate Emoji.GetMultipleByName to Sync by default * Fix indentation * Fixing mocks --- app/emoji.go | 6 +----- store/sqlstore/emoji_store.go | 31 +++++++++++++---------------- store/store.go | 2 +- store/storetest/emoji_store.go | 24 +++++++++++----------- store/storetest/mocks/EmojiStore.go | 20 +++++++++++++------ 5 files changed, 42 insertions(+), 41 deletions(-) diff --git a/app/emoji.go b/app/emoji.go index 09cff60de2..5550d15c93 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -194,11 +194,7 @@ func (a *App) GetMultipleEmojiByName(names []string) ([]*model.Emoji, *model.App return nil, model.NewAppError("GetMultipleEmojiByName", "api.emoji.disabled.app_error", nil, "", http.StatusNotImplemented) } - if result := <-a.Srv.Store.Emoji().GetMultipleByName(names); result.Err != nil { - return nil, result.Err - } else { - return result.Data.([]*model.Emoji), nil - } + return a.Srv.Store.Emoji().GetMultipleByName(names) } func (a *App) GetEmojiImage(emojiId string) ([]byte, string, *model.AppError) { diff --git a/store/sqlstore/emoji_store.go b/store/sqlstore/emoji_store.go index 76c519f6d6..67791734b0 100644 --- a/store/sqlstore/emoji_store.go +++ b/store/sqlstore/emoji_store.go @@ -123,25 +123,22 @@ func (es SqlEmojiStore) GetByName(name string) (*model.Emoji, *model.AppError) { return emoji, nil } -func (es SqlEmojiStore) GetMultipleByName(names []string) store.StoreChannel { - return store.Do(func(result *store.StoreResult) { - keys, params := MapStringsToQueryParams(names, "Emoji") +func (es SqlEmojiStore) GetMultipleByName(names []string) ([]*model.Emoji, *model.AppError) { + keys, params := MapStringsToQueryParams(names, "Emoji") - var emojis []*model.Emoji + var emojis []*model.Emoji - if _, err := es.GetReplica().Select(&emojis, - `SELECT - * - FROM - Emoji - WHERE - Name IN `+keys+` - AND DeleteAt = 0`, params); err != nil { - result.Err = model.NewAppError("SqlEmojiStore.GetByName", "store.sql_emoji.get_by_name.app_error", nil, fmt.Sprintf("names=%v, %v", names, err.Error()), http.StatusInternalServerError) - } else { - result.Data = emojis - } - }) + if _, err := es.GetReplica().Select(&emojis, + `SELECT + * + FROM + Emoji + WHERE + Name IN `+keys+` + AND DeleteAt = 0`, params); err != nil { + return nil, model.NewAppError("SqlEmojiStore.GetByName", "store.sql_emoji.get_by_name.app_error", nil, fmt.Sprintf("names=%v, %v", names, err.Error()), http.StatusInternalServerError) + } + return emojis, nil } func (es SqlEmojiStore) GetList(offset, limit int, sort string) ([]*model.Emoji, *model.AppError) { diff --git a/store/store.go b/store/store.go index b472511834..a06fb0048b 100644 --- a/store/store.go +++ b/store/store.go @@ -461,7 +461,7 @@ type EmojiStore interface { Save(emoji *model.Emoji) (*model.Emoji, *model.AppError) Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError) GetByName(name string) (*model.Emoji, *model.AppError) - GetMultipleByName(names []string) StoreChannel + GetMultipleByName(names []string) ([]*model.Emoji, *model.AppError) GetList(offset, limit int, sort string) ([]*model.Emoji, *model.AppError) Delete(id string, time int64) *model.AppError Search(name string, prefixOnly bool, limit int) ([]*model.Emoji, *model.AppError) diff --git a/store/storetest/emoji_store.go b/store/storetest/emoji_store.go index 0f37aa3054..072d5eed89 100644 --- a/store/storetest/emoji_store.go +++ b/store/storetest/emoji_store.go @@ -169,33 +169,33 @@ func testEmojiGetMultipleByName(t *testing.T, ss store.Store) { }() t.Run("one emoji", func(t *testing.T) { - if result := <-ss.Emoji().GetMultipleByName([]string{emojis[0].Name}); result.Err != nil { - t.Fatal("could not get emoji", result.Err) - } else if received := result.Data.([]*model.Emoji); len(received) != 1 || *received[0] != emojis[0] { + if received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name}); err != nil { + t.Fatal("could not get emoji", err) + } else if len(received) != 1 || *received[0] != emojis[0] { t.Fatal("got incorrect emoji") } }) t.Run("multiple emojis", func(t *testing.T) { - if result := <-ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name}); result.Err != nil { - t.Fatal("could not get emojis", result.Err) - } else if received := result.Data.([]*model.Emoji); len(received) != 3 { + if received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name}); err != nil { + t.Fatal("could not get emojis", err) + } else if len(received) != 3 { t.Fatal("got incorrect emojis") } }) t.Run("one nonexistent emoji", func(t *testing.T) { - if result := <-ss.Emoji().GetMultipleByName([]string{"ab"}); result.Err != nil { - t.Fatal("could not get emoji", result.Err) - } else if received := result.Data.([]*model.Emoji); len(received) != 0 { + if received, err := ss.Emoji().GetMultipleByName([]string{"ab"}); err != nil { + t.Fatal("could not get emoji", err) + } else if len(received) != 0 { t.Fatal("got incorrect emoji") } }) t.Run("multiple emojis with nonexistent names", func(t *testing.T) { - if result := <-ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name, "abcd", "1234"}); result.Err != nil { - t.Fatal("could not get emojis", result.Err) - } else if received := result.Data.([]*model.Emoji); len(received) != 3 { + if received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name, "abcd", "1234"}); err != nil { + t.Fatal("could not get emojis", err) + } else if len(received) != 3 { t.Fatal("got incorrect emojis") } }) diff --git a/store/storetest/mocks/EmojiStore.go b/store/storetest/mocks/EmojiStore.go index a2f83c2fca..2ce84b0570 100644 --- a/store/storetest/mocks/EmojiStore.go +++ b/store/storetest/mocks/EmojiStore.go @@ -6,7 +6,6 @@ package mocks import mock "github.com/stretchr/testify/mock" import model "github.com/mattermost/mattermost-server/model" -import store "github.com/mattermost/mattermost-server/store" // EmojiStore is an autogenerated mock type for the EmojiStore type type EmojiStore struct { @@ -105,19 +104,28 @@ func (_m *EmojiStore) GetList(offset int, limit int, sort string) ([]*model.Emoj } // GetMultipleByName provides a mock function with given fields: names -func (_m *EmojiStore) GetMultipleByName(names []string) store.StoreChannel { +func (_m *EmojiStore) GetMultipleByName(names []string) ([]*model.Emoji, *model.AppError) { ret := _m.Called(names) - var r0 store.StoreChannel - if rf, ok := ret.Get(0).(func([]string) store.StoreChannel); ok { + var r0 []*model.Emoji + if rf, ok := ret.Get(0).(func([]string) []*model.Emoji); ok { r0 = rf(names) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(store.StoreChannel) + r0 = ret.Get(0).([]*model.Emoji) } } - return r0 + var r1 *model.AppError + if rf, ok := ret.Get(1).(func([]string) *model.AppError); ok { + r1 = rf(names) + } else { + if ret.Get(1) != nil { + r1 = ret.Get(1).(*model.AppError) + } + } + + return r0, r1 } // Save provides a mock function with given fields: emoji