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