github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/localcachelayer/emoji_layer_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See LICENSE.txt for license information.
     3  
     4  package localcachelayer
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/mattermost/mattermost-server/v5/model"
    13  	"github.com/mattermost/mattermost-server/v5/store/storetest"
    14  	"github.com/mattermost/mattermost-server/v5/store/storetest/mocks"
    15  )
    16  
    17  func TestEmojiStore(t *testing.T) {
    18  	StoreTest(t, storetest.TestEmojiStore)
    19  }
    20  
    21  func TestEmojiStoreCache(t *testing.T) {
    22  	fakeEmoji := model.Emoji{Id: "123", Name: "name123"}
    23  
    24  	t.Run("first call by id not cached, second cached and returning same data", func(t *testing.T) {
    25  		mockStore := getMockStore()
    26  		mockCacheProvider := getMockCacheProvider()
    27  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    28  		require.NoError(t, err)
    29  
    30  		emoji, err := cachedStore.Emoji().Get("123", true)
    31  		require.NoError(t, err)
    32  		assert.Equal(t, emoji, &fakeEmoji)
    33  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
    34  		emoji, err = cachedStore.Emoji().Get("123", true)
    35  		require.NoError(t, err)
    36  		assert.Equal(t, emoji, &fakeEmoji)
    37  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
    38  	})
    39  
    40  	t.Run("first call by name not cached, second cached and returning same data", func(t *testing.T) {
    41  		mockStore := getMockStore()
    42  		mockCacheProvider := getMockCacheProvider()
    43  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    44  		require.NoError(t, err)
    45  
    46  		emoji, err := cachedStore.Emoji().GetByName("name123", true)
    47  		require.NoError(t, err)
    48  		assert.Equal(t, emoji, &fakeEmoji)
    49  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
    50  		emoji, err = cachedStore.Emoji().GetByName("name123", true)
    51  		require.NoError(t, err)
    52  		assert.Equal(t, emoji, &fakeEmoji)
    53  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
    54  	})
    55  
    56  	t.Run("first call by id not cached, second force not cached", func(t *testing.T) {
    57  		mockStore := getMockStore()
    58  		mockCacheProvider := getMockCacheProvider()
    59  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    60  		require.NoError(t, err)
    61  
    62  		cachedStore.Emoji().Get("123", true)
    63  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
    64  		cachedStore.Emoji().Get("123", false)
    65  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
    66  	})
    67  
    68  	t.Run("first call by name not cached, second force not cached", func(t *testing.T) {
    69  		mockStore := getMockStore()
    70  		mockCacheProvider := getMockCacheProvider()
    71  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    72  		require.NoError(t, err)
    73  
    74  		cachedStore.Emoji().GetByName("name123", true)
    75  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
    76  		cachedStore.Emoji().GetByName("name123", false)
    77  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
    78  	})
    79  
    80  	t.Run("first call by id force not cached, second not cached, third cached", func(t *testing.T) {
    81  		mockStore := getMockStore()
    82  		mockCacheProvider := getMockCacheProvider()
    83  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    84  		require.NoError(t, err)
    85  
    86  		cachedStore.Emoji().Get("123", false)
    87  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
    88  		cachedStore.Emoji().Get("123", true)
    89  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
    90  		cachedStore.Emoji().Get("123", true)
    91  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
    92  	})
    93  
    94  	t.Run("first call by name force not cached, second not cached, third cached", func(t *testing.T) {
    95  		mockStore := getMockStore()
    96  		mockCacheProvider := getMockCacheProvider()
    97  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    98  		require.NoError(t, err)
    99  
   100  		cachedStore.Emoji().GetByName("name123", false)
   101  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
   102  		cachedStore.Emoji().GetByName("name123", true)
   103  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
   104  		cachedStore.Emoji().GetByName("name123", true)
   105  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
   106  	})
   107  
   108  	t.Run("first call by id, second call by name cached", func(t *testing.T) {
   109  		mockStore := getMockStore()
   110  		mockCacheProvider := getMockCacheProvider()
   111  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   112  		require.NoError(t, err)
   113  
   114  		cachedStore.Emoji().Get("123", true)
   115  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
   116  		cachedStore.Emoji().GetByName("name123", true)
   117  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 0)
   118  	})
   119  
   120  	t.Run("first call by name, second call by id cached", func(t *testing.T) {
   121  		mockStore := getMockStore()
   122  		mockCacheProvider := getMockCacheProvider()
   123  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   124  		require.NoError(t, err)
   125  
   126  		cachedStore.Emoji().GetByName("name123", true)
   127  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
   128  		cachedStore.Emoji().Get("123", true)
   129  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 0)
   130  	})
   131  
   132  	t.Run("first call by id not cached, invalidate, and then not cached again", func(t *testing.T) {
   133  		mockStore := getMockStore()
   134  		mockCacheProvider := getMockCacheProvider()
   135  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   136  		require.NoError(t, err)
   137  
   138  		cachedStore.Emoji().Get("123", true)
   139  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 1)
   140  		cachedStore.Emoji().Delete(&fakeEmoji, 0)
   141  		cachedStore.Emoji().Get("123", true)
   142  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "Get", 2)
   143  	})
   144  
   145  	t.Run("first call by name not cached, invalidate, and then not cached again", func(t *testing.T) {
   146  		mockStore := getMockStore()
   147  		mockCacheProvider := getMockCacheProvider()
   148  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   149  		require.NoError(t, err)
   150  
   151  		cachedStore.Emoji().GetByName("name123", true)
   152  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 1)
   153  		cachedStore.Emoji().Delete(&fakeEmoji, 0)
   154  		cachedStore.Emoji().GetByName("name123", true)
   155  		mockStore.Emoji().(*mocks.EmojiStore).AssertNumberOfCalls(t, "GetByName", 2)
   156  	})
   157  }