github.com/spreadshirt/mattermost-server@v5.3.2-0.20180927191755-a257d501df3d+incompatible/api4/emoji_test.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package api4 5 6 import ( 7 "bytes" 8 "image" 9 _ "image/gif" 10 "testing" 11 12 "github.com/mattermost/mattermost-server/app" 13 "github.com/mattermost/mattermost-server/model" 14 "github.com/mattermost/mattermost-server/utils" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestCreateEmoji(t *testing.T) { 20 th := Setup().InitBasic().InitSystemAdmin() 21 defer th.TearDown() 22 Client := th.Client 23 24 EnableCustomEmoji := *th.App.Config().ServiceSettings.EnableCustomEmoji 25 defer func() { 26 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji }) 27 }() 28 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = false }) 29 30 defaultRolePermissions := th.SaveDefaultRolePermissions() 31 defer func() { 32 th.RestoreDefaultRolePermissions(defaultRolePermissions) 33 }() 34 35 emoji := &model.Emoji{ 36 CreatorId: th.BasicUser.Id, 37 Name: model.NewId(), 38 } 39 40 // try to create an emoji when they're disabled 41 _, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 42 CheckNotImplementedStatus(t, resp) 43 44 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 45 // try to create a valid gif emoji when they're enabled 46 newEmoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 47 CheckNoError(t, resp) 48 if newEmoji.Name != emoji.Name { 49 t.Fatal("create with wrong name") 50 } 51 52 // try to create an emoji with a duplicate name 53 emoji2 := &model.Emoji{ 54 CreatorId: th.BasicUser.Id, 55 Name: newEmoji.Name, 56 } 57 _, resp = Client.CreateEmoji(emoji2, utils.CreateTestGif(t, 10, 10), "image.gif") 58 CheckBadRequestStatus(t, resp) 59 CheckErrorMessage(t, resp, "api.emoji.create.duplicate.app_error") 60 61 // try to create a valid animated gif emoji 62 emoji = &model.Emoji{ 63 CreatorId: th.BasicUser.Id, 64 Name: model.NewId(), 65 } 66 67 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestAnimatedGif(t, 10, 10, 10), "image.gif") 68 CheckNoError(t, resp) 69 if newEmoji.Name != emoji.Name { 70 t.Fatal("create with wrong name") 71 } 72 73 // try to create a valid jpeg emoji 74 emoji = &model.Emoji{ 75 CreatorId: th.BasicUser.Id, 76 Name: model.NewId(), 77 } 78 79 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestJpeg(t, 10, 10), "image.gif") 80 CheckNoError(t, resp) 81 if newEmoji.Name != emoji.Name { 82 t.Fatal("create with wrong name") 83 } 84 85 // try to create a valid png emoji 86 emoji = &model.Emoji{ 87 CreatorId: th.BasicUser.Id, 88 Name: model.NewId(), 89 } 90 91 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestPng(t, 10, 10), "image.gif") 92 CheckNoError(t, resp) 93 if newEmoji.Name != emoji.Name { 94 t.Fatal("create with wrong name") 95 } 96 97 // try to create an emoji that's too wide 98 emoji = &model.Emoji{ 99 CreatorId: th.BasicUser.Id, 100 Name: model.NewId(), 101 } 102 103 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 1000, 10), "image.gif") 104 CheckNoError(t, resp) 105 if newEmoji.Name != emoji.Name { 106 t.Fatal("create with wrong name") 107 } 108 109 // try to create an emoji that's too wide 110 emoji = &model.Emoji{ 111 CreatorId: th.BasicUser.Id, 112 Name: model.NewId(), 113 } 114 115 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, app.MaxEmojiOriginalWidth+1), "image.gif") 116 if resp.Error == nil { 117 t.Fatal("should fail - emoji is too wide") 118 } 119 120 // try to create an emoji that's too tall 121 emoji = &model.Emoji{ 122 CreatorId: th.BasicUser.Id, 123 Name: model.NewId(), 124 } 125 126 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, app.MaxEmojiOriginalHeight+1, 10), "image.gif") 127 if resp.Error == nil { 128 t.Fatal("should fail - emoji is too tall") 129 } 130 131 // try to create an emoji that's too large 132 emoji = &model.Emoji{ 133 CreatorId: th.BasicUser.Id, 134 Name: model.NewId(), 135 } 136 137 _, resp = Client.CreateEmoji(emoji, utils.CreateTestAnimatedGif(t, 100, 100, 10000), "image.gif") 138 if resp.Error == nil { 139 t.Fatal("should fail - emoji is too big") 140 } 141 142 // try to create an emoji with data that isn't an image 143 emoji = &model.Emoji{ 144 CreatorId: th.BasicUser.Id, 145 Name: model.NewId(), 146 } 147 148 _, resp = Client.CreateEmoji(emoji, make([]byte, 100), "image.gif") 149 CheckBadRequestStatus(t, resp) 150 CheckErrorMessage(t, resp, "api.emoji.upload.image.app_error") 151 152 // try to create an emoji as another user 153 emoji = &model.Emoji{ 154 CreatorId: th.BasicUser2.Id, 155 Name: model.NewId(), 156 } 157 158 _, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 159 CheckForbiddenStatus(t, resp) 160 161 // try to create an emoji without permissions 162 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 163 164 emoji = &model.Emoji{ 165 CreatorId: th.BasicUser.Id, 166 Name: model.NewId(), 167 } 168 169 _, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 170 CheckForbiddenStatus(t, resp) 171 172 // create an emoji with permissions in one team 173 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.TEAM_USER_ROLE_ID) 174 175 emoji = &model.Emoji{ 176 CreatorId: th.BasicUser.Id, 177 Name: model.NewId(), 178 } 179 180 _, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 181 CheckNoError(t, resp) 182 } 183 184 func TestGetEmojiList(t *testing.T) { 185 th := Setup().InitBasic() 186 defer th.TearDown() 187 Client := th.Client 188 189 EnableCustomEmoji := *th.App.Config().ServiceSettings.EnableCustomEmoji 190 defer func() { 191 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji }) 192 }() 193 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 194 195 emojis := []*model.Emoji{ 196 { 197 CreatorId: th.BasicUser.Id, 198 Name: model.NewId(), 199 }, 200 { 201 CreatorId: th.BasicUser.Id, 202 Name: model.NewId(), 203 }, 204 { 205 CreatorId: th.BasicUser.Id, 206 Name: model.NewId(), 207 }, 208 } 209 210 for idx, emoji := range emojis { 211 emoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 212 CheckNoError(t, resp) 213 emojis[idx] = emoji 214 } 215 216 listEmoji, resp := Client.GetEmojiList(0, 100) 217 CheckNoError(t, resp) 218 for _, emoji := range emojis { 219 found := false 220 for _, savedEmoji := range listEmoji { 221 if emoji.Id == savedEmoji.Id { 222 found = true 223 break 224 } 225 } 226 if !found { 227 t.Fatalf("failed to get emoji with id %v, %v", emoji.Id, len(listEmoji)) 228 } 229 } 230 231 _, resp = Client.DeleteEmoji(emojis[0].Id) 232 CheckNoError(t, resp) 233 listEmoji, resp = Client.GetEmojiList(0, 100) 234 CheckNoError(t, resp) 235 found := false 236 for _, savedEmoji := range listEmoji { 237 if savedEmoji.Id == emojis[0].Id { 238 found = true 239 break 240 } 241 if found { 242 t.Fatalf("should not get a deleted emoji %v", emojis[0].Id) 243 } 244 } 245 246 listEmoji, resp = Client.GetEmojiList(0, 1) 247 CheckNoError(t, resp) 248 249 if len(listEmoji) != 1 { 250 t.Fatal("should only return 1") 251 } 252 253 listEmoji, resp = Client.GetSortedEmojiList(0, 100, model.EMOJI_SORT_BY_NAME) 254 CheckNoError(t, resp) 255 256 if len(listEmoji) == 0 { 257 t.Fatal("should return more than 0") 258 } 259 } 260 261 func TestDeleteEmoji(t *testing.T) { 262 th := Setup().InitBasic().InitSystemAdmin() 263 defer th.TearDown() 264 Client := th.Client 265 266 EnableCustomEmoji := *th.App.Config().ServiceSettings.EnableCustomEmoji 267 defer func() { 268 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji }) 269 }() 270 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 271 272 defaultRolePermissions := th.SaveDefaultRolePermissions() 273 defer func() { 274 th.RestoreDefaultRolePermissions(defaultRolePermissions) 275 }() 276 277 emoji := &model.Emoji{ 278 CreatorId: th.BasicUser.Id, 279 Name: model.NewId(), 280 } 281 282 newEmoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 283 CheckNoError(t, resp) 284 285 ok, resp := Client.DeleteEmoji(newEmoji.Id) 286 CheckNoError(t, resp) 287 if !ok { 288 t.Fatal("should return true") 289 } else { 290 _, err := Client.GetEmoji(newEmoji.Id) 291 if err == nil { 292 t.Fatal("should not return the emoji it was deleted") 293 } 294 } 295 296 //Admin can delete other users emoji 297 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 298 CheckNoError(t, resp) 299 300 ok, resp = th.SystemAdminClient.DeleteEmoji(newEmoji.Id) 301 CheckNoError(t, resp) 302 if !ok { 303 t.Fatal("should return true") 304 } else { 305 _, err := th.SystemAdminClient.GetEmoji(newEmoji.Id) 306 if err == nil { 307 t.Fatal("should not return the emoji it was deleted") 308 } 309 } 310 311 // Try to delete just deleted emoji 312 _, resp = Client.DeleteEmoji(newEmoji.Id) 313 CheckNotFoundStatus(t, resp) 314 315 //Try to delete non-existing emoji 316 _, resp = Client.DeleteEmoji(model.NewId()) 317 CheckNotFoundStatus(t, resp) 318 319 //Try to delete without Id 320 _, resp = Client.DeleteEmoji("") 321 CheckNotFoundStatus(t, resp) 322 323 //Try to delete my custom emoji without permissions 324 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 325 CheckNoError(t, resp) 326 327 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 328 _, resp = Client.DeleteEmoji(newEmoji.Id) 329 CheckForbiddenStatus(t, resp) 330 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 331 332 //Try to delete other user's custom emoji without MANAGE_EMOJIS permissions 333 emoji = &model.Emoji{ 334 CreatorId: th.BasicUser.Id, 335 Name: model.NewId(), 336 } 337 338 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 339 CheckNoError(t, resp) 340 341 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 342 th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 343 344 Client.Logout() 345 th.LoginBasic2() 346 347 _, resp = Client.DeleteEmoji(newEmoji.Id) 348 CheckForbiddenStatus(t, resp) 349 350 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 351 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 352 353 Client.Logout() 354 th.LoginBasic() 355 356 //Try to delete other user's custom emoji without MANAGE_OTHERS_EMOJIS permissions 357 emoji = &model.Emoji{ 358 CreatorId: th.BasicUser.Id, 359 Name: model.NewId(), 360 } 361 362 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 363 CheckNoError(t, resp) 364 365 Client.Logout() 366 th.LoginBasic2() 367 368 _, resp = Client.DeleteEmoji(newEmoji.Id) 369 CheckForbiddenStatus(t, resp) 370 371 Client.Logout() 372 th.LoginBasic() 373 374 //Try to delete other user's custom emoji with permissions 375 emoji = &model.Emoji{ 376 CreatorId: th.BasicUser.Id, 377 Name: model.NewId(), 378 } 379 380 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 381 CheckNoError(t, resp) 382 383 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 384 th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 385 386 Client.Logout() 387 th.LoginBasic2() 388 389 _, resp = Client.DeleteEmoji(newEmoji.Id) 390 CheckNoError(t, resp) 391 392 Client.Logout() 393 th.LoginBasic() 394 395 //Try to delete my custom emoji with permissions at team level 396 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 397 CheckNoError(t, resp) 398 399 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 400 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.TEAM_USER_ROLE_ID) 401 _, resp = Client.DeleteEmoji(newEmoji.Id) 402 CheckNoError(t, resp) 403 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 404 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.TEAM_USER_ROLE_ID) 405 406 //Try to delete other user's custom emoji with permissions at team level 407 emoji = &model.Emoji{ 408 CreatorId: th.BasicUser.Id, 409 Name: model.NewId(), 410 } 411 412 newEmoji, resp = Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 413 CheckNoError(t, resp) 414 415 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 416 th.RemovePermissionFromRole(model.PERMISSION_MANAGE_OTHERS_EMOJIS.Id, model.SYSTEM_USER_ROLE_ID) 417 418 th.AddPermissionToRole(model.PERMISSION_MANAGE_EMOJIS.Id, model.TEAM_USER_ROLE_ID) 419 th.AddPermissionToRole(model.PERMISSION_MANAGE_OTHERS_EMOJIS.Id, model.TEAM_USER_ROLE_ID) 420 421 Client.Logout() 422 th.LoginBasic2() 423 424 _, resp = Client.DeleteEmoji(newEmoji.Id) 425 CheckNoError(t, resp) 426 } 427 428 func TestGetEmoji(t *testing.T) { 429 th := Setup().InitBasic() 430 defer th.TearDown() 431 Client := th.Client 432 433 EnableCustomEmoji := *th.App.Config().ServiceSettings.EnableCustomEmoji 434 defer func() { 435 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji }) 436 }() 437 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 438 439 emoji := &model.Emoji{ 440 CreatorId: th.BasicUser.Id, 441 Name: model.NewId(), 442 } 443 444 newEmoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 445 CheckNoError(t, resp) 446 447 emoji, resp = Client.GetEmoji(newEmoji.Id) 448 CheckNoError(t, resp) 449 if emoji.Id != newEmoji.Id { 450 t.Fatal("wrong emoji was returned") 451 } 452 453 _, resp = Client.GetEmoji(model.NewId()) 454 CheckNotFoundStatus(t, resp) 455 } 456 457 func TestGetEmojiByName(t *testing.T) { 458 th := Setup().InitBasic() 459 defer th.TearDown() 460 Client := th.Client 461 462 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 463 464 emoji := &model.Emoji{ 465 CreatorId: th.BasicUser.Id, 466 Name: model.NewId(), 467 } 468 469 newEmoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 470 CheckNoError(t, resp) 471 472 emoji, resp = Client.GetEmojiByName(newEmoji.Name) 473 CheckNoError(t, resp) 474 assert.Equal(t, newEmoji.Name, emoji.Name) 475 476 _, resp = Client.GetEmojiByName(model.NewId()) 477 CheckNotFoundStatus(t, resp) 478 479 Client.Logout() 480 _, resp = Client.GetEmojiByName(newEmoji.Name) 481 CheckUnauthorizedStatus(t, resp) 482 } 483 484 func TestGetEmojiImage(t *testing.T) { 485 th := Setup().InitBasic() 486 defer th.TearDown() 487 Client := th.Client 488 489 EnableCustomEmoji := *th.App.Config().ServiceSettings.EnableCustomEmoji 490 DriverName := *th.App.Config().FileSettings.DriverName 491 defer func() { 492 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = EnableCustomEmoji }) 493 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.FileSettings.DriverName = DriverName }) 494 }() 495 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 496 497 emoji1 := &model.Emoji{ 498 CreatorId: th.BasicUser.Id, 499 Name: model.NewId(), 500 } 501 502 emoji1, resp := Client.CreateEmoji(emoji1, utils.CreateTestGif(t, 10, 10), "image.gif") 503 CheckNoError(t, resp) 504 505 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = false }) 506 507 _, resp = Client.GetEmojiImage(emoji1.Id) 508 CheckNotImplementedStatus(t, resp) 509 CheckErrorMessage(t, resp, "api.emoji.disabled.app_error") 510 511 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.FileSettings.DriverName = "" }) 512 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 513 514 _, resp = Client.GetEmojiImage(emoji1.Id) 515 CheckNotImplementedStatus(t, resp) 516 CheckErrorMessage(t, resp, "api.emoji.storage.app_error") 517 518 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.FileSettings.DriverName = DriverName }) 519 520 emojiImage, resp := Client.GetEmojiImage(emoji1.Id) 521 CheckNoError(t, resp) 522 if len(emojiImage) <= 0 { 523 t.Fatal("should return the image") 524 } 525 _, imageType, err := image.DecodeConfig(bytes.NewReader(emojiImage)) 526 if err != nil { 527 t.Fatalf("unable to identify received image: %v", err.Error()) 528 } else if imageType != "gif" { 529 t.Fatal("should've received gif data") 530 } 531 532 emoji2 := &model.Emoji{ 533 CreatorId: th.BasicUser.Id, 534 Name: model.NewId(), 535 } 536 537 emoji2, resp = Client.CreateEmoji(emoji2, utils.CreateTestAnimatedGif(t, 10, 10, 10), "image.gif") 538 CheckNoError(t, resp) 539 540 emojiImage, resp = Client.GetEmojiImage(emoji2.Id) 541 CheckNoError(t, resp) 542 if len(emojiImage) <= 0 { 543 t.Fatal("should return the image") 544 } 545 _, imageType, err = image.DecodeConfig(bytes.NewReader(emojiImage)) 546 if err != nil { 547 t.Fatalf("unable to identify received image: %v", err.Error()) 548 } else if imageType != "gif" { 549 t.Fatal("should've received gif data") 550 } 551 552 emoji3 := &model.Emoji{ 553 CreatorId: th.BasicUser.Id, 554 Name: model.NewId(), 555 } 556 emoji3, resp = Client.CreateEmoji(emoji3, utils.CreateTestJpeg(t, 10, 10), "image.jpg") 557 CheckNoError(t, resp) 558 559 emojiImage, resp = Client.GetEmojiImage(emoji3.Id) 560 CheckNoError(t, resp) 561 if len(emojiImage) <= 0 { 562 t.Fatal("should return the image") 563 } 564 _, imageType, err = image.DecodeConfig(bytes.NewReader(emojiImage)) 565 if err != nil { 566 t.Fatalf("unable to identify received image: %v", err.Error()) 567 } else if imageType != "jpeg" { 568 t.Fatal("should've received gif data") 569 } 570 571 emoji4 := &model.Emoji{ 572 CreatorId: th.BasicUser.Id, 573 Name: model.NewId(), 574 } 575 emoji4, resp = Client.CreateEmoji(emoji4, utils.CreateTestPng(t, 10, 10), "image.png") 576 CheckNoError(t, resp) 577 578 emojiImage, resp = Client.GetEmojiImage(emoji4.Id) 579 CheckNoError(t, resp) 580 if len(emojiImage) <= 0 { 581 t.Fatal("should return the image") 582 } 583 _, imageType, err = image.DecodeConfig(bytes.NewReader(emojiImage)) 584 if err != nil { 585 t.Fatalf("unable to identify received image: %v", err.Error()) 586 } else if imageType != "png" { 587 t.Fatal("should've received gif data") 588 } 589 590 _, resp = Client.DeleteEmoji(emoji4.Id) 591 CheckNoError(t, resp) 592 593 _, resp = Client.GetEmojiImage(emoji4.Id) 594 CheckNotFoundStatus(t, resp) 595 596 _, resp = Client.GetEmojiImage(model.NewId()) 597 CheckNotFoundStatus(t, resp) 598 599 _, resp = Client.GetEmojiImage("") 600 CheckBadRequestStatus(t, resp) 601 } 602 603 func TestSearchEmoji(t *testing.T) { 604 th := Setup().InitBasic() 605 defer th.TearDown() 606 Client := th.Client 607 608 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 609 610 searchTerm1 := model.NewId() 611 searchTerm2 := model.NewId() 612 613 emojis := []*model.Emoji{ 614 { 615 CreatorId: th.BasicUser.Id, 616 Name: searchTerm1, 617 }, 618 { 619 CreatorId: th.BasicUser.Id, 620 Name: "blargh_" + searchTerm2, 621 }, 622 } 623 624 for idx, emoji := range emojis { 625 emoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 626 CheckNoError(t, resp) 627 emojis[idx] = emoji 628 } 629 630 search := &model.EmojiSearch{Term: searchTerm1} 631 remojis, resp := Client.SearchEmoji(search) 632 CheckNoError(t, resp) 633 CheckOKStatus(t, resp) 634 635 found := false 636 for _, e := range remojis { 637 if e.Name == emojis[0].Name { 638 found = true 639 } 640 } 641 642 assert.True(t, found) 643 644 search.Term = searchTerm2 645 search.PrefixOnly = true 646 remojis, resp = Client.SearchEmoji(search) 647 CheckNoError(t, resp) 648 CheckOKStatus(t, resp) 649 650 found = false 651 for _, e := range remojis { 652 if e.Name == emojis[1].Name { 653 found = true 654 } 655 } 656 657 assert.False(t, found) 658 659 search.PrefixOnly = false 660 remojis, resp = Client.SearchEmoji(search) 661 CheckNoError(t, resp) 662 CheckOKStatus(t, resp) 663 664 found = false 665 for _, e := range remojis { 666 if e.Name == emojis[1].Name { 667 found = true 668 } 669 } 670 671 assert.True(t, found) 672 673 search.Term = "" 674 _, resp = Client.SearchEmoji(search) 675 CheckBadRequestStatus(t, resp) 676 677 Client.Logout() 678 _, resp = Client.SearchEmoji(search) 679 CheckUnauthorizedStatus(t, resp) 680 } 681 682 func TestAutocompleteEmoji(t *testing.T) { 683 th := Setup().InitBasic() 684 defer th.TearDown() 685 Client := th.Client 686 687 th.App.UpdateConfig(func(cfg *model.Config) { *cfg.ServiceSettings.EnableCustomEmoji = true }) 688 689 searchTerm1 := model.NewId() 690 691 emojis := []*model.Emoji{ 692 { 693 CreatorId: th.BasicUser.Id, 694 Name: searchTerm1, 695 }, 696 { 697 CreatorId: th.BasicUser.Id, 698 Name: "blargh_" + searchTerm1, 699 }, 700 } 701 702 for idx, emoji := range emojis { 703 emoji, resp := Client.CreateEmoji(emoji, utils.CreateTestGif(t, 10, 10), "image.gif") 704 CheckNoError(t, resp) 705 emojis[idx] = emoji 706 } 707 708 remojis, resp := Client.AutocompleteEmoji(searchTerm1, "") 709 CheckNoError(t, resp) 710 CheckOKStatus(t, resp) 711 712 found1 := false 713 found2 := false 714 for _, e := range remojis { 715 if e.Name == emojis[0].Name { 716 found1 = true 717 } 718 719 if e.Name == emojis[1].Name { 720 found2 = true 721 } 722 } 723 724 assert.True(t, found1) 725 assert.False(t, found2) 726 727 _, resp = Client.AutocompleteEmoji("", "") 728 CheckBadRequestStatus(t, resp) 729 730 Client.Logout() 731 _, resp = Client.AutocompleteEmoji(searchTerm1, "") 732 CheckUnauthorizedStatus(t, resp) 733 }