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 }