From 1bd19f006d11651413fe584e4fa0d953e8b12a2f Mon Sep 17 00:00:00 2001 From: Carlos Tadeu Panato Junior Date: Fri, 7 Apr 2017 19:05:14 +0200 Subject: implement GET /emoji for apiV4 (#6007) --- api/emoji.go | 8 ++++---- api4/emoji.go | 31 +++++++++++++++++++++---------- api4/emoji_test.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ app/emoji.go | 8 ++++++++ model/client4.go | 10 ++++++++++ 5 files changed, 94 insertions(+), 14 deletions(-) diff --git a/api/emoji.go b/api/emoji.go index 267644fc0..c2719c562 100644 --- a/api/emoji.go +++ b/api/emoji.go @@ -37,12 +37,12 @@ func getEmoji(c *Context, w http.ResponseWriter, r *http.Request) { return } - if result := <-app.Srv.Store.Emoji().GetAll(); result.Err != nil { - c.Err = result.Err + listEmoji, err := app.GetEmojiList() + if err != nil { + c.Err = err return } else { - emoji := result.Data.([]*model.Emoji) - w.Write([]byte(model.EmojiListToJson(emoji))) + w.Write([]byte(model.EmojiListToJson(listEmoji))) } } diff --git a/api4/emoji.go b/api4/emoji.go index a32436b64..282d0f086 100644 --- a/api4/emoji.go +++ b/api4/emoji.go @@ -19,37 +19,33 @@ func InitEmoji() { l4g.Debug(utils.T("api.emoji.init.debug")) BaseRoutes.Emojis.Handle("", ApiSessionRequired(createEmoji)).Methods("POST") + BaseRoutes.Emojis.Handle("", ApiSessionRequired(getEmojiList)).Methods("GET") } func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { if !*utils.Cfg.ServiceSettings.EnableCustomEmoji { - c.Err = model.NewLocAppError("createEmoji", "api.emoji.disabled.app_error", nil, "") - c.Err.StatusCode = http.StatusNotImplemented + c.Err = model.NewAppError("createEmoji", "api.emoji.disabled.app_error", nil, "", http.StatusNotImplemented) return } if emojiInterface := einterfaces.GetEmojiInterface(); emojiInterface != nil && !emojiInterface.CanUserCreateEmoji(c.Session.Roles, c.Session.TeamMembers) { - c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.permissions.app_error", nil, "user_id="+c.Session.UserId) - c.Err.StatusCode = http.StatusUnauthorized + c.Err = model.NewAppError("getEmoji", "api.emoji.disabled.app_error", nil, "user_id="+c.Session.UserId, http.StatusUnauthorized) return } if len(utils.Cfg.FileSettings.DriverName) == 0 { - c.Err = model.NewLocAppError("createEmoji", "api.emoji.storage.app_error", nil, "") - c.Err.StatusCode = http.StatusNotImplemented + c.Err = model.NewAppError("createEmoji", "api.emoji.storage.app_error", nil, "", http.StatusNotImplemented) return } if r.ContentLength > app.MaxEmojiFileSize { - c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.too_large.app_error", nil, "") - c.Err.StatusCode = http.StatusRequestEntityTooLarge + c.Err = model.NewAppError("createEmoji", "api.emoji.create.too_large.app_error", nil, "", http.StatusRequestEntityTooLarge) return } if err := r.ParseMultipartForm(app.MaxEmojiFileSize); err != nil { - c.Err = model.NewLocAppError("createEmoji", "api.emoji.create.parse.app_error", nil, err.Error()) - c.Err.StatusCode = http.StatusBadRequest + c.Err = model.NewAppError("createEmoji", "api.emoji.create.parse.app_error", nil, err.Error(), http.StatusBadRequest) return } @@ -70,3 +66,18 @@ func createEmoji(c *Context, w http.ResponseWriter, r *http.Request) { w.Write([]byte(newEmoji.ToJson())) } } + +func getEmojiList(c *Context, w http.ResponseWriter, r *http.Request) { + if !*utils.Cfg.ServiceSettings.EnableCustomEmoji { + c.Err = model.NewAppError("getEmoji", "api.emoji.disabled.app_error", nil, "", http.StatusNotImplemented) + return + } + + listEmoji, err := app.GetEmojiList() + if err != nil { + c.Err = err + return + } else { + w.Write([]byte(model.EmojiListToJson(listEmoji))) + } +} diff --git a/api4/emoji_test.go b/api4/emoji_test.go index 9db231d4a..e5faf548c 100644 --- a/api4/emoji_test.go +++ b/api4/emoji_test.go @@ -137,3 +137,54 @@ func TestCreateEmoji(t *testing.T) { _, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") CheckForbiddenStatus(t, resp) } + +func TestGetEmojiList(t *testing.T) { + th := Setup().InitBasic() + defer TearDown() + Client := th.Client + + EnableCustomEmoji := *utils.Cfg.ServiceSettings.EnableCustomEmoji + defer func() { + *utils.Cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji + }() + *utils.Cfg.ServiceSettings.EnableCustomEmoji = true + + emojis := []*model.Emoji{ + { + CreatorId: th.BasicUser.Id, + Name: model.NewId(), + }, + { + CreatorId: th.BasicUser.Id, + Name: model.NewId(), + }, + { + CreatorId: th.BasicUser.Id, + Name: model.NewId(), + }, + } + + for idx, emoji := range emojis { + emoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") + CheckNoError(t, resp) + emojis[idx] = emoji + } + + listEmoji, resp := Client.GetEmojiList() + CheckNoError(t, resp) + for _, emoji := range emojis { + found := false + for _, savedEmoji := range listEmoji { + if emoji.Id == savedEmoji.Id { + found = true + break + } + } + if !found { + t.Fatalf("failed to get emoji with id %v", emoji.Id) + } + } + + // ADD delete test when create the delete endpoint + +} diff --git a/app/emoji.go b/app/emoji.go index 0815b7e54..666da5c89 100644 --- a/app/emoji.go +++ b/app/emoji.go @@ -59,6 +59,14 @@ func CreateEmoji(sessionUserId string, emoji *model.Emoji, multiPartImageData *m } } +func GetEmojiList() ([]*model.Emoji, *model.AppError) { + if result := <-Srv.Store.Emoji().GetAll(); result.Err != nil { + return nil, result.Err + } else { + return result.Data.([]*model.Emoji), nil + } +} + func UploadEmojiImage(id string, imageData *multipart.FileHeader) *model.AppError { file, err := imageData.Open() if err != nil { diff --git a/model/client4.go b/model/client4.go index 9505fb79c..e2f609589 100644 --- a/model/client4.go +++ b/model/client4.go @@ -2267,3 +2267,13 @@ func (c *Client4) CreateEmoji(emoji *Emoji, image []byte, filename string) (*Emo return c.DoEmojiUploadFile(c.GetEmojisRoute(), body.Bytes(), writer.FormDataContentType()) } + +// GetEmojiList returns a list of custom emoji in the system. +func (c *Client4) GetEmojiList() ([]*Emoji, *Response) { + if r, err := c.DoApiGet(c.GetEmojisRoute(), ""); err != nil { + return nil, &Response{StatusCode: r.StatusCode, Error: err} + } else { + defer closeBody(r) + return EmojiListFromJson(r.Body), BuildResponse(r) + } +} -- cgit v1.2.3-1-g7c22