diff options
Diffstat (limited to 'internal/api')
| -rw-r--r-- | internal/api/client/admin/emojicreate.go | 10 | ||||
| -rw-r--r-- | internal/api/client/admin/emojicreate_test.go | 50 | 
2 files changed, 50 insertions, 10 deletions
diff --git a/internal/api/client/admin/emojicreate.go b/internal/api/client/admin/emojicreate.go index de7a2979a..ef42d0a13 100644 --- a/internal/api/client/admin/emojicreate.go +++ b/internal/api/client/admin/emojicreate.go @@ -73,6 +73,8 @@ import (  //      description: forbidden  //   '400':  //      description: bad request +//   '409': +//      description: conflict -- domain/shortcode combo for emoji already exists  func (m *Module) EmojiCreatePOSTHandler(c *gin.Context) {  	l := logrus.WithFields(logrus.Fields{  		"func":        "emojiCreatePOSTHandler", @@ -116,10 +118,10 @@ func (m *Module) EmojiCreatePOSTHandler(c *gin.Context) {  		return  	} -	apiEmoji, err := m.processor.AdminEmojiCreate(c.Request.Context(), authed, form) -	if err != nil { -		l.Debugf("error creating emoji: %s", err) -		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) +	apiEmoji, errWithCode := m.processor.AdminEmojiCreate(c.Request.Context(), authed, form) +	if errWithCode != nil { +		l.Debugf("error creating emoji: %s", errWithCode.Error()) +		c.JSON(errWithCode.Code(), gin.H{"error": errWithCode.Safe()})  		return  	} diff --git a/internal/api/client/admin/emojicreate_test.go b/internal/api/client/admin/emojicreate_test.go index 14b83b534..2b7476da1 100644 --- a/internal/api/client/admin/emojicreate_test.go +++ b/internal/api/client/admin/emojicreate_test.go @@ -25,7 +25,7 @@ func (suite *EmojiCreateTestSuite) TestEmojiCreate() {  	requestBody, w, err := testrig.CreateMultipartFormData(  		"image", "../../../../testrig/media/rainbow-original.png",  		map[string]string{ -			"shortcode": "rainbow", +			"shortcode": "new_emoji",  		})  	if err != nil {  		panic(err) @@ -55,24 +55,24 @@ func (suite *EmojiCreateTestSuite) TestEmojiCreate() {  	suite.NoError(err)  	// appropriate fields should be set -	suite.Equal("rainbow", apiEmoji.Shortcode) +	suite.Equal("new_emoji", apiEmoji.Shortcode)  	suite.NotEmpty(apiEmoji.URL)  	suite.NotEmpty(apiEmoji.StaticURL)  	suite.True(apiEmoji.VisibleInPicker)  	// emoji should be in the db  	dbEmoji := >smodel.Emoji{} -	err = suite.db.GetWhere(context.Background(), []db.Where{{Key: "shortcode", Value: "rainbow"}}, dbEmoji) +	err = suite.db.GetWhere(context.Background(), []db.Where{{Key: "shortcode", Value: "new_emoji"}}, dbEmoji)  	suite.NoError(err)  	// check fields on the emoji  	suite.NotEmpty(dbEmoji.ID) -	suite.Equal("rainbow", dbEmoji.Shortcode) +	suite.Equal("new_emoji", dbEmoji.Shortcode)  	suite.Empty(dbEmoji.Domain)  	suite.Empty(dbEmoji.ImageRemoteURL)  	suite.Empty(dbEmoji.ImageStaticRemoteURL)  	suite.Equal(apiEmoji.URL, dbEmoji.ImageURL) -	suite.Equal(apiEmoji.StaticURL, dbEmoji.ImageURL) +	suite.Equal(apiEmoji.StaticURL, dbEmoji.ImageStaticURL)  	suite.NotEmpty(dbEmoji.ImagePath)  	suite.NotEmpty(dbEmoji.ImageStaticPath)  	suite.Equal("image/png", dbEmoji.ImageContentType) @@ -82,7 +82,45 @@ func (suite *EmojiCreateTestSuite) TestEmojiCreate() {  	suite.False(dbEmoji.Disabled)  	suite.NotEmpty(dbEmoji.URI)  	suite.True(dbEmoji.VisibleInPicker) -	suite.Empty(dbEmoji.CategoryID)aaaaaaaaa +	suite.Empty(dbEmoji.CategoryID) + +	// emoji should be in storage +	emojiBytes, err := suite.storage.Get(dbEmoji.ImagePath) +	suite.NoError(err) +	suite.Len(emojiBytes, dbEmoji.ImageFileSize) +	emojiStaticBytes, err := suite.storage.Get(dbEmoji.ImageStaticPath) +	suite.NoError(err) +	suite.Len(emojiStaticBytes, dbEmoji.ImageStaticFileSize) +} + +func (suite *EmojiCreateTestSuite) TestEmojiCreateAlreadyExists() { +	// set up the request -- use a shortcode that already exists for an emoji in the database +	requestBody, w, err := testrig.CreateMultipartFormData( +		"image", "../../../../testrig/media/rainbow-original.png", +		map[string]string{ +			"shortcode": "rainbow", +		}) +	if err != nil { +		panic(err) +	} +	bodyBytes := requestBody.Bytes() +	recorder := httptest.NewRecorder() +	ctx := suite.newContext(recorder, http.MethodPost, bodyBytes, admin.EmojiPath, w.FormDataContentType()) + +	// call the handler +	suite.adminModule.EmojiCreatePOSTHandler(ctx) + +	suite.Equal(http.StatusConflict, recorder.Code) + +	result := recorder.Result() +	defer result.Body.Close() + +	// check the response +	b, err := ioutil.ReadAll(result.Body) +	suite.NoError(err) +	suite.NotEmpty(b) + +	suite.Equal(`{"error":"conflict: emoji with shortcode rainbow already exists"}`, string(b))  }  func TestEmojiCreateTestSuite(t *testing.T) {  | 
