github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/localcachelayer/terms_of_service_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 TestTermsOfServiceStore(t *testing.T) {
    17  // 	StoreTest(t, storetest.TestTermsOfServiceStore)
    18  // }
    19  
    20  func TestTermsOfServiceStoreTermsOfServiceCache(t *testing.T) {
    21  
    22  	fakeTermsOfService := model.TermsOfService{Id: "123", CreateAt: 11111, UserId: "321", Text: "Terms of service test"}
    23  
    24  	t.Run("first call by latest not cached, second cached and returning same data", func(t *testing.T) {
    25  		mockStore := getMockStore()
    26  		mockCacheProvider := getMockCacheProvider()
    27  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    28  		require.NoError(t, err)
    29  
    30  		termsOfService, err := cachedStore.TermsOfService().GetLatest(true)
    31  		require.NoError(t, err)
    32  		assert.Equal(t, termsOfService, &fakeTermsOfService)
    33  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
    34  		termsOfService, err = cachedStore.TermsOfService().GetLatest(true)
    35  		require.NoError(t, err)
    36  		assert.Equal(t, termsOfService, &fakeTermsOfService)
    37  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
    38  	})
    39  
    40  	t.Run("first call by id not cached, second cached and returning same data", func(t *testing.T) {
    41  		mockStore := getMockStore()
    42  		mockCacheProvider := getMockCacheProvider()
    43  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    44  		require.NoError(t, err)
    45  
    46  		termsOfService, err := cachedStore.TermsOfService().Get("123", true)
    47  		require.NoError(t, err)
    48  		assert.Equal(t, termsOfService, &fakeTermsOfService)
    49  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1)
    50  		termsOfService, err = cachedStore.TermsOfService().Get("123", true)
    51  		require.NoError(t, err)
    52  		assert.Equal(t, termsOfService, &fakeTermsOfService)
    53  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1)
    54  	})
    55  
    56  	t.Run("first call by id not cached, second force no cached", func(t *testing.T) {
    57  		mockStore := getMockStore()
    58  		mockCacheProvider := getMockCacheProvider()
    59  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    60  		require.NoError(t, err)
    61  
    62  		cachedStore.TermsOfService().Get("123", true)
    63  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1)
    64  		cachedStore.TermsOfService().Get("123", false)
    65  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2)
    66  	})
    67  
    68  	t.Run("first call latest not cached, second force no cached", func(t *testing.T) {
    69  		mockStore := getMockStore()
    70  		mockCacheProvider := getMockCacheProvider()
    71  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    72  		require.NoError(t, err)
    73  
    74  		cachedStore.TermsOfService().GetLatest(true)
    75  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
    76  		cachedStore.TermsOfService().GetLatest(false)
    77  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2)
    78  	})
    79  
    80  	t.Run("first call by id force no cached, second not cached, third cached", func(t *testing.T) {
    81  		mockStore := getMockStore()
    82  		mockCacheProvider := getMockCacheProvider()
    83  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    84  		require.NoError(t, err)
    85  
    86  		cachedStore.TermsOfService().Get("123", false)
    87  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1)
    88  		cachedStore.TermsOfService().Get("123", true)
    89  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2)
    90  		cachedStore.TermsOfService().Get("123", true)
    91  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2)
    92  	})
    93  
    94  	t.Run("first call latest force no cached, second not cached, third cached", func(t *testing.T) {
    95  		mockStore := getMockStore()
    96  		mockCacheProvider := getMockCacheProvider()
    97  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
    98  		require.NoError(t, err)
    99  
   100  		cachedStore.TermsOfService().GetLatest(false)
   101  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
   102  		cachedStore.TermsOfService().GetLatest(true)
   103  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2)
   104  		cachedStore.TermsOfService().GetLatest(true)
   105  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2)
   106  	})
   107  
   108  	t.Run("first call latest, second call by id cached", func(t *testing.T) {
   109  		mockStore := getMockStore()
   110  		mockCacheProvider := getMockCacheProvider()
   111  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   112  		require.NoError(t, err)
   113  
   114  		cachedStore.TermsOfService().GetLatest(true)
   115  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
   116  		cachedStore.TermsOfService().Get("123", true)
   117  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 0)
   118  	})
   119  
   120  	t.Run("first call by id not cached, save, and then not cached again", func(t *testing.T) {
   121  		mockStore := getMockStore()
   122  		mockCacheProvider := getMockCacheProvider()
   123  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   124  		require.NoError(t, err)
   125  
   126  		cachedStore.TermsOfService().Get("123", false)
   127  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1)
   128  		cachedStore.TermsOfService().Save(&fakeTermsOfService)
   129  		cachedStore.TermsOfService().Get("123", false)
   130  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2)
   131  	})
   132  
   133  	t.Run("first get latest not cached, save new, then get latest, returning different data", func(t *testing.T) {
   134  		mockStore := getMockStore()
   135  		mockCacheProvider := getMockCacheProvider()
   136  		cachedStore, err := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider)
   137  		require.NoError(t, err)
   138  
   139  		cachedStore.TermsOfService().GetLatest(true)
   140  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1)
   141  		cachedStore.TermsOfService().Save(&fakeTermsOfService)
   142  		cachedStore.TermsOfService().GetLatest(true)
   143  		mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2)
   144  	})
   145  }