github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/localcachelayer/reaction_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/masterhung0112/hk_server/v5/model" 13 "github.com/masterhung0112/hk_server/v5/store/storetest/mocks" 14 ) 15 16 // func TestReactionStore(t *testing.T) { 17 // StoreTestWithSqlStore(t, storetest.TestReactionStore) 18 // } 19 20 func TestReactionStoreCache(t *testing.T) { 21 fakeReaction := model.Reaction{PostId: "123"} 22 23 t.Run("first call not cached, second cached and returning same data", func(t *testing.T) { 24 mockStore := getMockStore() 25 mockCacheProvider := getMockCacheProvider() 26 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 27 require.NoError(t, err) 28 29 reaction, err := cachedStore.Reaction().GetForPost("123", true) 30 require.NoError(t, err) 31 assert.Equal(t, reaction, []*model.Reaction{&fakeReaction}) 32 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 1) 33 assert.Equal(t, reaction, []*model.Reaction{&fakeReaction}) 34 cachedStore.Reaction().GetForPost("123", true) 35 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 1) 36 }) 37 38 t.Run("first call not cached, second force not cached", func(t *testing.T) { 39 mockStore := getMockStore() 40 mockCacheProvider := getMockCacheProvider() 41 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 42 require.NoError(t, err) 43 44 cachedStore.Reaction().GetForPost("123", true) 45 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 1) 46 cachedStore.Reaction().GetForPost("123", false) 47 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 2) 48 }) 49 50 t.Run("first call not cached, save, and then not cached again", func(t *testing.T) { 51 mockStore := getMockStore() 52 mockCacheProvider := getMockCacheProvider() 53 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 54 require.NoError(t, err) 55 56 cachedStore.Reaction().GetForPost("123", true) 57 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 1) 58 cachedStore.Reaction().Save(&fakeReaction) 59 cachedStore.Reaction().GetForPost("123", true) 60 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 2) 61 }) 62 63 t.Run("first call not cached, delete, and then not cached again", func(t *testing.T) { 64 mockStore := getMockStore() 65 mockCacheProvider := getMockCacheProvider() 66 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 67 require.NoError(t, err) 68 69 cachedStore.Reaction().GetForPost("123", true) 70 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 1) 71 cachedStore.Reaction().Delete(&fakeReaction) 72 cachedStore.Reaction().GetForPost("123", true) 73 mockStore.Reaction().(*mocks.ReactionStore).AssertNumberOfCalls(t, "GetForPost", 2) 74 }) 75 }