github.com/mattermost/mattermost-server/v5@v5.39.3/store/localcachelayer/role_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 "context" 8 "testing" 9 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "github.com/mattermost/mattermost-server/v5/model" 14 "github.com/mattermost/mattermost-server/v5/store/storetest" 15 "github.com/mattermost/mattermost-server/v5/store/storetest/mocks" 16 ) 17 18 func TestRoleStore(t *testing.T) { 19 StoreTestWithSqlStore(t, storetest.TestRoleStore) 20 } 21 22 func TestRoleStoreCache(t *testing.T) { 23 fakeRole := model.Role{Id: "123", Name: "role-name"} 24 25 t.Run("first call not cached, second cached and returning same data", func(t *testing.T) { 26 mockStore := getMockStore() 27 mockCacheProvider := getMockCacheProvider() 28 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 29 require.NoError(t, err) 30 31 role, err := cachedStore.Role().GetByName(context.Background(), "role-name") 32 require.NoError(t, err) 33 assert.Equal(t, role, &fakeRole) 34 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) 35 require.NoError(t, err) 36 assert.Equal(t, role, &fakeRole) 37 cachedStore.Role().GetByName(context.Background(), "role-name") 38 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) 39 }) 40 41 t.Run("first call not cached, save, and then not cached again", func(t *testing.T) { 42 mockStore := getMockStore() 43 mockCacheProvider := getMockCacheProvider() 44 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 45 require.NoError(t, err) 46 47 cachedStore.Role().GetByName(context.Background(), "role-name") 48 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) 49 cachedStore.Role().Save(&fakeRole) 50 cachedStore.Role().GetByName(context.Background(), "role-name") 51 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) 52 }) 53 54 t.Run("first call not cached, delete, and then not cached again", func(t *testing.T) { 55 mockStore := getMockStore() 56 mockCacheProvider := getMockCacheProvider() 57 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 58 require.NoError(t, err) 59 60 cachedStore.Role().GetByName(context.Background(), "role-name") 61 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) 62 cachedStore.Role().Delete("123") 63 cachedStore.Role().GetByName(context.Background(), "role-name") 64 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) 65 }) 66 67 t.Run("first call not cached, permanent delete all, and then not cached again", func(t *testing.T) { 68 mockStore := getMockStore() 69 mockCacheProvider := getMockCacheProvider() 70 cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 71 require.NoError(t, err) 72 73 cachedStore.Role().GetByName(context.Background(), "role-name") 74 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 1) 75 cachedStore.Role().PermanentDeleteAll() 76 cachedStore.Role().GetByName(context.Background(), "role-name") 77 mockStore.Role().(*mocks.RoleStore).AssertNumberOfCalls(t, "GetByName", 2) 78 }) 79 }