github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/localcachelayer/scheme_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 TestSchemeStore(t *testing.T) {
    17  // 	StoreTest(t, storetest.TestSchemeStore)
    18  // }
    19  
    20  func TestSchemeStoreCache(t *testing.T) {
    21  	fakeScheme := model.Scheme{Id: "123", Name: "scheme-name"}
    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  		scheme, err := cachedStore.Scheme().Get("123")
    30  		require.NoError(t, err)
    31  		assert.Equal(t, scheme, &fakeScheme)
    32  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 1)
    33  		require.NoError(t, err)
    34  		assert.Equal(t, scheme, &fakeScheme)
    35  		cachedStore.Scheme().Get("123")
    36  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 1)
    37  	})
    38  
    39  	t.Run("first call not cached, save, and then not cached again", func(t *testing.T) {
    40  		mockStore := getMockStore()
    41  		mockCacheProvider := getMockCacheProvider()
    42  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    43  		require.NoError(t, err)
    44  
    45  		cachedStore.Scheme().Get("123")
    46  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 1)
    47  		cachedStore.Scheme().Save(&fakeScheme)
    48  		cachedStore.Scheme().Get("123")
    49  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 2)
    50  	})
    51  
    52  	t.Run("first call not cached, delete, and then not cached again", func(t *testing.T) {
    53  		mockStore := getMockStore()
    54  		mockCacheProvider := getMockCacheProvider()
    55  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    56  		require.NoError(t, err)
    57  
    58  		cachedStore.Scheme().Get("123")
    59  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 1)
    60  		cachedStore.Scheme().Delete("123")
    61  		cachedStore.Scheme().Get("123")
    62  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 2)
    63  	})
    64  
    65  	t.Run("first call not cached, permanent delete all, and then not cached again", func(t *testing.T) {
    66  		mockStore := getMockStore()
    67  		mockCacheProvider := getMockCacheProvider()
    68  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    69  		require.NoError(t, err)
    70  
    71  		cachedStore.Scheme().Get("123")
    72  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 1)
    73  		cachedStore.Scheme().PermanentDeleteAll()
    74  		cachedStore.Scheme().Get("123")
    75  		mockStore.Scheme().(*mocks.SchemeStore).AssertNumberOfCalls(t, "Get", 2)
    76  	})
    77  }