[MM-15194] Store: Migrate Emoji.Save to Sync as default #10642 (#10955)

* Store: Migrate Emoji.Save to Sync as default #10642

* Store: use require.Nil helper function to assert nil
Этот коммит содержится в:
Jesper Hansen
2019-05-29 20:32:54 +02:00
коммит произвёл Harrison Healey
родитель 9f4c703f1e
Коммит 58363d3455
7 изменённых файлов: 55 добавлений и 38 удалений

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

@@ -67,15 +67,15 @@ func (a *App) CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartIma
return nil, err return nil, err
} }
result := <-a.Srv.Store.Emoji().Save(emoji) emoji, err := a.Srv.Store.Emoji().Save(emoji)
if result.Err != nil { if err != nil {
return nil, result.Err return nil, err
} }
message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_EMOJI_ADDED, "", "", "", nil) message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_EMOJI_ADDED, "", "", "", nil)
message.Add("emoji", emoji.ToJson()) message.Add("emoji", emoji.ToJson())
a.Publish(message) a.Publish(message)
return result.Data.(*model.Emoji), nil return emoji, nil
} }
func (a *App) GetEmojiList(page, perPage int, sort string) ([]*model.Emoji, *model.AppError) { func (a *App) GetEmojiList(page, perPage int, sort string) ([]*model.Emoji, *model.AppError) {

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

@@ -387,17 +387,17 @@ func (me *TestHelper) CreateGroup() *model.Group {
func (me *TestHelper) CreateEmoji() *model.Emoji { func (me *TestHelper) CreateEmoji() *model.Emoji {
utils.DisableDebugLogForTest() utils.DisableDebugLogForTest()
result := <-me.App.Srv.Store.Emoji().Save(&model.Emoji{ emoji, err := me.App.Srv.Store.Emoji().Save(&model.Emoji{
CreatorId: me.BasicUser.Id, CreatorId: me.BasicUser.Id,
Name: model.NewRandomString(10), Name: model.NewRandomString(10),
}) })
if result.Err != nil { if err != nil {
panic(result.Err) panic(err)
} }
utils.EnableDebugLogForTest() utils.EnableDebugLogForTest()
return result.Data.(*model.Emoji) return emoji
} }
func (me *TestHelper) AddReactionToPost(post *model.Post, user *model.User, emojiName string) *model.Reaction { func (me *TestHelper) AddReactionToPost(post *model.Post, user *model.User, emojiName string) *model.Reaction {

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

@@ -1314,8 +1314,8 @@ func (a *App) ImportEmoji(data *EmojiImportData, dryRun bool) *model.AppError {
} }
if !alreadyExists { if !alreadyExists {
if result := <-a.Srv.Store.Emoji().Save(emoji); result.Err != nil { if _, err := a.Srv.Store.Emoji().Save(emoji); err != nil {
return result.Err return err
} }
} }

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

@@ -51,19 +51,16 @@ func (es SqlEmojiStore) CreateIndexesIfNotExists() {
es.CreateIndexIfNotExists("idx_emoji_name", "Emoji", "Name") es.CreateIndexIfNotExists("idx_emoji_name", "Emoji", "Name")
} }
func (es SqlEmojiStore) Save(emoji *model.Emoji) store.StoreChannel { func (es SqlEmojiStore) Save(emoji *model.Emoji) (*model.Emoji, *model.AppError) {
return store.Do(func(result *store.StoreResult) { emoji.PreSave()
emoji.PreSave() if err := emoji.IsValid(); err != nil {
if result.Err = emoji.IsValid(); result.Err != nil { return nil, err
return }
}
if err := es.GetMaster().Insert(emoji); err != nil { if err := es.GetMaster().Insert(emoji); err != nil {
result.Err = model.NewAppError("SqlEmojiStore.Save", "store.sql_emoji.save.app_error", nil, "id="+emoji.Id+", "+err.Error(), http.StatusInternalServerError) return nil, model.NewAppError("SqlEmojiStore.Save", "store.sql_emoji.save.app_error", nil, "id="+emoji.Id+", "+err.Error(), http.StatusInternalServerError)
} else { }
result.Data = emoji return emoji, nil
}
})
} }
func (es SqlEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError) { func (es SqlEmojiStore) Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError) {

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

@@ -454,7 +454,7 @@ type TokenStore interface {
} }
type EmojiStore interface { type EmojiStore interface {
Save(emoji *model.Emoji) StoreChannel Save(emoji *model.Emoji) (*model.Emoji, *model.AppError)
Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError) Get(id string, allowFromCache bool) (*model.Emoji, *model.AppError)
GetByName(name string) StoreChannel GetByName(name string) StoreChannel
GetMultipleByName(names []string) StoreChannel GetMultipleByName(names []string) StoreChannel

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

@@ -11,6 +11,7 @@ import (
"github.com/mattermost/mattermost-server/store" "github.com/mattermost/mattermost-server/store"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
func TestEmojiStore(t *testing.T, ss store.Store) { func TestEmojiStore(t *testing.T, ss store.Store) {
@@ -28,8 +29,8 @@ func testEmojiSaveDelete(t *testing.T, ss store.Store) {
Name: model.NewId(), Name: model.NewId(),
} }
if result := <-ss.Emoji().Save(emoji1); result.Err != nil { if _, err := ss.Emoji().Save(emoji1); err != nil {
t.Fatal(result.Err) t.Fatal(err)
} }
if len(emoji1.Id) != 26 { if len(emoji1.Id) != 26 {
@@ -40,7 +41,7 @@ func testEmojiSaveDelete(t *testing.T, ss store.Store) {
CreatorId: model.NewId(), CreatorId: model.NewId(),
Name: emoji1.Name, Name: emoji1.Name,
} }
if result := <-ss.Emoji().Save(&emoji2); result.Err == nil { if _, err := ss.Emoji().Save(&emoji2); err == nil {
t.Fatal("shouldn't be able to save emoji with duplicate name") t.Fatal("shouldn't be able to save emoji with duplicate name")
} }
@@ -48,8 +49,8 @@ func testEmojiSaveDelete(t *testing.T, ss store.Store) {
t.Fatal(result.Err) t.Fatal(result.Err)
} }
if result := <-ss.Emoji().Save(&emoji2); result.Err != nil { if _, err := ss.Emoji().Save(&emoji2); err != nil {
t.Fatal("should be able to save emoji with duplicate name now that original has been deleted", result.Err) t.Fatal("should be able to save emoji with duplicate name now that original has been deleted", err)
} }
if result := <-ss.Emoji().Delete(emoji2.Id, time.Now().Unix()+1); result.Err != nil { if result := <-ss.Emoji().Delete(emoji2.Id, time.Now().Unix()+1); result.Err != nil {
@@ -74,7 +75,9 @@ func testEmojiGet(t *testing.T, ss store.Store) {
} }
for i, emoji := range emojis { for i, emoji := range emojis {
emojis[i] = *store.Must(ss.Emoji().Save(&emoji)).(*model.Emoji) data, err := ss.Emoji().Save(&emoji)
require.Nil(t, err)
emojis[i] = *data
} }
defer func() { defer func() {
for _, emoji := range emojis { for _, emoji := range emojis {
@@ -118,7 +121,9 @@ func testEmojiGetByName(t *testing.T, ss store.Store) {
} }
for i, emoji := range emojis { for i, emoji := range emojis {
emojis[i] = *store.Must(ss.Emoji().Save(&emoji)).(*model.Emoji) data, err := ss.Emoji().Save(&emoji)
require.Nil(t, err)
emojis[i] = *data
} }
defer func() { defer func() {
for _, emoji := range emojis { for _, emoji := range emojis {
@@ -150,7 +155,9 @@ func testEmojiGetMultipleByName(t *testing.T, ss store.Store) {
} }
for i, emoji := range emojis { for i, emoji := range emojis {
emojis[i] = *store.Must(ss.Emoji().Save(&emoji)).(*model.Emoji) data, err := ss.Emoji().Save(&emoji)
require.Nil(t, err)
emojis[i] = *data
} }
defer func() { defer func() {
for _, emoji := range emojis { for _, emoji := range emojis {
@@ -208,7 +215,9 @@ func testEmojiGetList(t *testing.T, ss store.Store) {
} }
for i, emoji := range emojis { for i, emoji := range emojis {
emojis[i] = *store.Must(ss.Emoji().Save(&emoji)).(*model.Emoji) data, err := ss.Emoji().Save(&emoji)
require.Nil(t, err)
emojis[i] = *data
} }
defer func() { defer func() {
for _, emoji := range emojis { for _, emoji := range emojis {
@@ -273,7 +282,9 @@ func testEmojiSearch(t *testing.T, ss store.Store) {
} }
for i, emoji := range emojis { for i, emoji := range emojis {
emojis[i] = *store.Must(ss.Emoji().Save(&emoji)).(*model.Emoji) data, err := ss.Emoji().Save(&emoji)
require.Nil(t, err)
emojis[i] = *data
} }
defer func() { defer func() {
for _, emoji := range emojis { for _, emoji := range emojis {

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

@@ -103,19 +103,28 @@ func (_m *EmojiStore) GetMultipleByName(names []string) store.StoreChannel {
} }
// Save provides a mock function with given fields: emoji // Save provides a mock function with given fields: emoji
func (_m *EmojiStore) Save(emoji *model.Emoji) store.StoreChannel { func (_m *EmojiStore) Save(emoji *model.Emoji) (*model.Emoji, *model.AppError) {
ret := _m.Called(emoji) ret := _m.Called(emoji)
var r0 store.StoreChannel var r0 *model.Emoji
if rf, ok := ret.Get(0).(func(*model.Emoji) store.StoreChannel); ok { if rf, ok := ret.Get(0).(func(*model.Emoji) *model.Emoji); ok {
r0 = rf(emoji) r0 = rf(emoji)
} else { } else {
if ret.Get(0) != nil { 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(*model.Emoji) *model.AppError); ok {
r1 = rf(emoji)
} else {
if ret.Get(1) != nil {
r1 = ret.Get(1).(*model.AppError)
}
}
return r0, r1
} }
// Search provides a mock function with given fields: name, prefixOnly, limit // Search provides a mock function with given fields: name, prefixOnly, limit