github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/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/mattermost/mattermost-server/v5/model" 10 "github.com/mattermost/mattermost-server/v5/store/storetest" 11 "github.com/mattermost/mattermost-server/v5/store/storetest/mocks" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 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 := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 28 29 termsOfService, err := cachedStore.TermsOfService().GetLatest(true) 30 require.Nil(t, err) 31 assert.Equal(t, termsOfService, &fakeTermsOfService) 32 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 33 termsOfService, err = cachedStore.TermsOfService().GetLatest(true) 34 require.Nil(t, err) 35 assert.Equal(t, termsOfService, &fakeTermsOfService) 36 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 37 }) 38 39 t.Run("first call by id not cached, second cached and returning same data", func(t *testing.T) { 40 mockStore := getMockStore() 41 mockCacheProvider := getMockCacheProvider() 42 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 43 44 termsOfService, err := cachedStore.TermsOfService().Get("123", true) 45 require.Nil(t, err) 46 assert.Equal(t, termsOfService, &fakeTermsOfService) 47 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1) 48 termsOfService, err = cachedStore.TermsOfService().Get("123", true) 49 require.Nil(t, err) 50 assert.Equal(t, termsOfService, &fakeTermsOfService) 51 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1) 52 }) 53 54 t.Run("first call by id not cached, second force no cached", func(t *testing.T) { 55 mockStore := getMockStore() 56 mockCacheProvider := getMockCacheProvider() 57 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 58 59 cachedStore.TermsOfService().Get("123", true) 60 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1) 61 cachedStore.TermsOfService().Get("123", false) 62 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2) 63 }) 64 65 t.Run("first call latest not cached, second force no cached", func(t *testing.T) { 66 mockStore := getMockStore() 67 mockCacheProvider := getMockCacheProvider() 68 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 69 70 cachedStore.TermsOfService().GetLatest(true) 71 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 72 cachedStore.TermsOfService().GetLatest(false) 73 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2) 74 }) 75 76 t.Run("first call by id force no cached, second not cached, third cached", func(t *testing.T) { 77 mockStore := getMockStore() 78 mockCacheProvider := getMockCacheProvider() 79 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 80 81 cachedStore.TermsOfService().Get("123", false) 82 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1) 83 cachedStore.TermsOfService().Get("123", true) 84 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2) 85 cachedStore.TermsOfService().Get("123", true) 86 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2) 87 }) 88 89 t.Run("first call latest force no cached, second not cached, third cached", func(t *testing.T) { 90 mockStore := getMockStore() 91 mockCacheProvider := getMockCacheProvider() 92 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 93 94 cachedStore.TermsOfService().GetLatest(false) 95 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 96 cachedStore.TermsOfService().GetLatest(true) 97 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2) 98 cachedStore.TermsOfService().GetLatest(true) 99 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2) 100 }) 101 102 t.Run("first call latest, second call by id cached", func(t *testing.T) { 103 mockStore := getMockStore() 104 mockCacheProvider := getMockCacheProvider() 105 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 106 107 cachedStore.TermsOfService().GetLatest(true) 108 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 109 cachedStore.TermsOfService().Get("123", true) 110 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 0) 111 }) 112 113 t.Run("first call by id not cached, save, and then not cached again", func(t *testing.T) { 114 mockStore := getMockStore() 115 mockCacheProvider := getMockCacheProvider() 116 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 117 118 cachedStore.TermsOfService().Get("123", false) 119 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 1) 120 cachedStore.TermsOfService().Save(&fakeTermsOfService) 121 cachedStore.TermsOfService().Get("123", false) 122 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "Get", 2) 123 }) 124 125 t.Run("first get latest not cached, save new, then get latest, returning different data", func(t *testing.T) { 126 mockStore := getMockStore() 127 mockCacheProvider := getMockCacheProvider() 128 cachedStore := NewLocalCacheLayer(mockStore, nil, nil, mockCacheProvider) 129 130 cachedStore.TermsOfService().GetLatest(true) 131 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 1) 132 cachedStore.TermsOfService().Save(&fakeTermsOfService) 133 cachedStore.TermsOfService().GetLatest(true) 134 mockStore.TermsOfService().(*mocks.TermsOfServiceStore).AssertNumberOfCalls(t, "GetLatest", 2) 135 }) 136 }