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  }