github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/store/localcachelayer/team_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/store/storetest"
    10  	"github.com/mattermost/mattermost-server/v5/store/storetest/mocks"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func TestTeamStore(t *testing.T) {
    16  	StoreTest(t, storetest.TestTeamStore)
    17  }
    18  
    19  func TestTeamStoreCache(t *testing.T) {
    20  	fakeUserId := "123"
    21  	fakeUserTeamIds := []string{"1", "2", "3"}
    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 := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    27  
    28  		gotUserTeamIds, err := cachedStore.Team().GetUserTeamIds(fakeUserId, true)
    29  		require.Nil(t, err)
    30  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    31  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 1)
    32  
    33  		gotUserTeamIds, err = cachedStore.Team().GetUserTeamIds(fakeUserId, true)
    34  		require.Nil(t, err)
    35  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    36  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 1)
    37  	})
    38  
    39  	t.Run("first call not cached, second force not cached", func(t *testing.T) {
    40  		mockStore := getMockStore()
    41  		mockCacheProvider := getMockCacheProvider()
    42  		cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    43  
    44  		gotUserTeamIds, err := cachedStore.Team().GetUserTeamIds(fakeUserId, true)
    45  		require.Nil(t, err)
    46  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    47  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 1)
    48  
    49  		gotUserTeamIds, err = cachedStore.Team().GetUserTeamIds(fakeUserId, false)
    50  		require.Nil(t, err)
    51  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    52  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 2)
    53  	})
    54  
    55  	t.Run("first call not cached, invalidate, and then not cached again", func(t *testing.T) {
    56  		mockStore := getMockStore()
    57  		mockCacheProvider := getMockCacheProvider()
    58  		cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    59  
    60  		gotUserTeamIds, err := cachedStore.Team().GetUserTeamIds(fakeUserId, true)
    61  		require.Nil(t, err)
    62  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    63  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 1)
    64  
    65  		cachedStore.Team().InvalidateAllTeamIdsForUser(fakeUserId)
    66  
    67  		gotUserTeamIds, err = cachedStore.Team().GetUserTeamIds(fakeUserId, true)
    68  		require.Nil(t, err)
    69  		assert.Equal(t, fakeUserTeamIds, gotUserTeamIds)
    70  		mockStore.Team().(*mocks.TeamStore).AssertNumberOfCalls(t, "GetUserTeamIds", 2)
    71  	})
    72  
    73  }