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  }