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 }