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