github.com/mattermost/mattermost-server/v5@v5.39.3/store/storetest/emoji_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package storetest 5 6 import ( 7 "context" 8 "testing" 9 "time" 10 11 "github.com/mattermost/mattermost-server/v5/model" 12 "github.com/mattermost/mattermost-server/v5/store" 13 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 func TestEmojiStore(t *testing.T, ss store.Store) { 19 t.Run("EmojiSaveDelete", func(t *testing.T) { testEmojiSaveDelete(t, ss) }) 20 t.Run("EmojiGet", func(t *testing.T) { testEmojiGet(t, ss) }) 21 t.Run("EmojiGetByName", func(t *testing.T) { testEmojiGetByName(t, ss) }) 22 t.Run("EmojiGetMultipleByName", func(t *testing.T) { testEmojiGetMultipleByName(t, ss) }) 23 t.Run("EmojiGetList", func(t *testing.T) { testEmojiGetList(t, ss) }) 24 t.Run("EmojiSearch", func(t *testing.T) { testEmojiSearch(t, ss) }) 25 } 26 27 func testEmojiSaveDelete(t *testing.T, ss store.Store) { 28 emoji1 := &model.Emoji{ 29 CreatorId: model.NewId(), 30 Name: model.NewId(), 31 } 32 33 _, err := ss.Emoji().Save(emoji1) 34 require.NoError(t, err) 35 36 assert.Len(t, emoji1.Id, 26, "should've set id for emoji") 37 38 emoji2 := model.Emoji{ 39 CreatorId: model.NewId(), 40 Name: emoji1.Name, 41 } 42 _, err = ss.Emoji().Save(&emoji2) 43 require.Error(t, err, "shouldn't be able to save emoji with duplicate name") 44 45 err = ss.Emoji().Delete(emoji1, time.Now().Unix()) 46 require.NoError(t, err) 47 48 _, err = ss.Emoji().Save(&emoji2) 49 require.NoError(t, err, "should be able to save emoji with duplicate name now that original has been deleted") 50 51 err = ss.Emoji().Delete(&emoji2, time.Now().Unix()+1) 52 require.NoError(t, err) 53 } 54 55 func testEmojiGet(t *testing.T, ss store.Store) { 56 emojis := []model.Emoji{ 57 { 58 CreatorId: model.NewId(), 59 Name: model.NewId(), 60 }, 61 { 62 CreatorId: model.NewId(), 63 Name: model.NewId(), 64 }, 65 { 66 CreatorId: model.NewId(), 67 Name: model.NewId(), 68 }, 69 } 70 71 for i, emoji := range emojis { 72 data, err := ss.Emoji().Save(&emoji) 73 require.NoError(t, err) 74 emojis[i] = *data 75 } 76 defer func() { 77 for _, emoji := range emojis { 78 err := ss.Emoji().Delete(&emoji, time.Now().Unix()) 79 require.NoError(t, err) 80 } 81 }() 82 83 for _, emoji := range emojis { 84 _, err := ss.Emoji().Get(context.Background(), emoji.Id, false) 85 require.NoErrorf(t, err, "failed to get emoji with id %v", emoji.Id) 86 } 87 88 for _, emoji := range emojis { 89 _, err := ss.Emoji().Get(context.Background(), emoji.Id, true) 90 require.NoErrorf(t, err, "failed to get emoji with id %v", emoji.Id) 91 } 92 } 93 94 func testEmojiGetByName(t *testing.T, ss store.Store) { 95 emojis := []model.Emoji{ 96 { 97 CreatorId: model.NewId(), 98 Name: model.NewId(), 99 }, 100 { 101 CreatorId: model.NewId(), 102 Name: model.NewId(), 103 }, 104 { 105 CreatorId: model.NewId(), 106 Name: model.NewId(), 107 }, 108 } 109 110 for i, emoji := range emojis { 111 data, err := ss.Emoji().Save(&emoji) 112 require.NoError(t, err) 113 emojis[i] = *data 114 } 115 defer func() { 116 for _, emoji := range emojis { 117 err := ss.Emoji().Delete(&emoji, time.Now().Unix()) 118 require.NoError(t, err) 119 } 120 }() 121 122 for _, emoji := range emojis { 123 _, err := ss.Emoji().GetByName(context.Background(), emoji.Name, true) 124 require.NoErrorf(t, err, "failed to get emoji with name %v", emoji.Name) 125 } 126 } 127 128 func testEmojiGetMultipleByName(t *testing.T, ss store.Store) { 129 emojis := []model.Emoji{ 130 { 131 CreatorId: model.NewId(), 132 Name: model.NewId(), 133 }, 134 { 135 CreatorId: model.NewId(), 136 Name: model.NewId(), 137 }, 138 { 139 CreatorId: model.NewId(), 140 Name: model.NewId(), 141 }, 142 } 143 144 for i, emoji := range emojis { 145 data, err := ss.Emoji().Save(&emoji) 146 require.NoError(t, err) 147 emojis[i] = *data 148 } 149 defer func() { 150 for _, emoji := range emojis { 151 err := ss.Emoji().Delete(&emoji, time.Now().Unix()) 152 require.NoError(t, err) 153 } 154 }() 155 156 t.Run("one emoji", func(t *testing.T) { 157 received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name}) 158 require.NoError(t, err, "could not get emoji") 159 require.Len(t, received, 1, "got incorrect emoji") 160 require.Equal(t, *received[0], emojis[0], "got incorrect emoji") 161 }) 162 163 t.Run("multiple emojis", func(t *testing.T) { 164 received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name}) 165 require.NoError(t, err, "could not get emojis") 166 require.Len(t, received, 3, "got incorrect emojis") 167 }) 168 169 t.Run("one nonexistent emoji", func(t *testing.T) { 170 received, err := ss.Emoji().GetMultipleByName([]string{"ab"}) 171 require.NoError(t, err, "could not get emoji", err) 172 require.Empty(t, received, "got incorrect emoji") 173 }) 174 175 t.Run("multiple emojis with nonexistent names", func(t *testing.T) { 176 received, err := ss.Emoji().GetMultipleByName([]string{emojis[0].Name, emojis[1].Name, emojis[2].Name, "abcd", "1234"}) 177 require.NoError(t, err, "could not get emojis") 178 require.Len(t, received, 3, "got incorrect emojis") 179 }) 180 } 181 182 func testEmojiGetList(t *testing.T, ss store.Store) { 183 emojis := []model.Emoji{ 184 { 185 CreatorId: model.NewId(), 186 Name: "00000000000000000000000000a" + model.NewId(), 187 }, 188 { 189 CreatorId: model.NewId(), 190 Name: "00000000000000000000000000b" + model.NewId(), 191 }, 192 { 193 CreatorId: model.NewId(), 194 Name: "00000000000000000000000000c" + model.NewId(), 195 }, 196 } 197 198 for i, emoji := range emojis { 199 data, err := ss.Emoji().Save(&emoji) 200 require.NoError(t, err) 201 emojis[i] = *data 202 } 203 defer func() { 204 for _, emoji := range emojis { 205 err := ss.Emoji().Delete(&emoji, time.Now().Unix()) 206 require.NoError(t, err) 207 } 208 }() 209 210 result, err := ss.Emoji().GetList(0, 100, "") 211 require.NoError(t, err) 212 213 for _, emoji := range emojis { 214 found := false 215 216 for _, savedEmoji := range result { 217 if emoji.Id == savedEmoji.Id { 218 found = true 219 break 220 } 221 } 222 223 require.Truef(t, found, "failed to get emoji with id %v", emoji.Id) 224 } 225 226 remojis, err := ss.Emoji().GetList(0, 3, model.EMOJI_SORT_BY_NAME) 227 assert.NoError(t, err) 228 assert.Equal(t, 3, len(remojis)) 229 assert.Equal(t, emojis[0].Name, remojis[0].Name) 230 assert.Equal(t, emojis[1].Name, remojis[1].Name) 231 assert.Equal(t, emojis[2].Name, remojis[2].Name) 232 233 remojis, err = ss.Emoji().GetList(1, 2, model.EMOJI_SORT_BY_NAME) 234 assert.NoError(t, err) 235 assert.Equal(t, 2, len(remojis)) 236 assert.Equal(t, emojis[1].Name, remojis[0].Name) 237 assert.Equal(t, emojis[2].Name, remojis[1].Name) 238 239 } 240 241 func testEmojiSearch(t *testing.T, ss store.Store) { 242 emojis := []model.Emoji{ 243 { 244 CreatorId: model.NewId(), 245 Name: "blargh_" + model.NewId(), 246 }, 247 { 248 CreatorId: model.NewId(), 249 Name: model.NewId() + "_blargh", 250 }, 251 { 252 CreatorId: model.NewId(), 253 Name: model.NewId() + "_blargh_" + model.NewId(), 254 }, 255 { 256 CreatorId: model.NewId(), 257 Name: model.NewId(), 258 }, 259 } 260 261 for i, emoji := range emojis { 262 data, err := ss.Emoji().Save(&emoji) 263 require.NoError(t, err) 264 emojis[i] = *data 265 } 266 defer func() { 267 for _, emoji := range emojis { 268 err := ss.Emoji().Delete(&emoji, time.Now().Unix()) 269 require.NoError(t, err) 270 } 271 }() 272 273 shouldFind := []bool{true, false, false, false} 274 275 result, err := ss.Emoji().Search("blargh", true, 100) 276 require.NoError(t, err) 277 for i, emoji := range emojis { 278 found := false 279 280 for _, savedEmoji := range result { 281 if emoji.Id == savedEmoji.Id { 282 found = true 283 break 284 } 285 } 286 287 assert.Equal(t, shouldFind[i], found, emoji.Name) 288 } 289 290 shouldFind = []bool{true, true, true, false} 291 result, err = ss.Emoji().Search("blargh", false, 100) 292 require.NoError(t, err) 293 for i, emoji := range emojis { 294 found := false 295 296 for _, savedEmoji := range result { 297 if emoji.Id == savedEmoji.Id { 298 found = true 299 break 300 } 301 } 302 303 assert.Equal(t, shouldFind[i], found, emoji.Name) 304 } 305 }