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