github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/store/localcachelayer/main_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 "fmt" 9 "testing" 10 11 "github.com/stretchr/testify/mock" 12 13 "github.com/masterhung0112/hk_server/v5/model" 14 "github.com/masterhung0112/hk_server/v5/services/cache" 15 cachemocks "github.com/masterhung0112/hk_server/v5/services/cache/mocks" 16 "github.com/masterhung0112/hk_server/v5/shared/mlog" 17 "github.com/masterhung0112/hk_server/v5/store" 18 "github.com/masterhung0112/hk_server/v5/store/sqlstore" 19 "github.com/masterhung0112/hk_server/v5/store/storetest/mocks" 20 "github.com/masterhung0112/hk_server/v5/testlib" 21 ) 22 23 var mainHelper *testlib.MainHelper 24 25 func getMockCacheProvider() cache.Provider { 26 mockCacheProvider := cachemocks.Provider{} 27 mockCacheProvider.On("NewCache", mock.Anything). 28 Return(cache.NewLRU(cache.LRUOptions{Size: 128}), nil) 29 return &mockCacheProvider 30 } 31 32 func getMockStore() *mocks.Store { 33 mockStore := mocks.Store{} 34 35 fakeReaction := model.Reaction{PostId: "123"} 36 mockReactionsStore := mocks.ReactionStore{} 37 mockReactionsStore.On("Save", &fakeReaction).Return(&model.Reaction{}, nil) 38 mockReactionsStore.On("Delete", &fakeReaction).Return(&model.Reaction{}, nil) 39 mockReactionsStore.On("GetForPost", "123", false).Return([]*model.Reaction{&fakeReaction}, nil) 40 mockReactionsStore.On("GetForPost", "123", true).Return([]*model.Reaction{&fakeReaction}, nil) 41 mockStore.On("Reaction").Return(&mockReactionsStore) 42 43 fakeRole := model.Role{Id: "123", Name: "role-name"} 44 mockRolesStore := mocks.RoleStore{} 45 mockRolesStore.On("Save", &fakeRole).Return(&model.Role{}, nil) 46 mockRolesStore.On("Delete", "123").Return(&fakeRole, nil) 47 mockRolesStore.On("GetByName", context.Background(), "role-name").Return(&fakeRole, nil) 48 mockRolesStore.On("GetByNames", []string{"role-name"}).Return([]*model.Role{&fakeRole}, nil) 49 mockRolesStore.On("PermanentDeleteAll").Return(nil) 50 mockStore.On("Role").Return(&mockRolesStore) 51 52 fakeScheme := model.Scheme{Id: "123", Name: "scheme-name"} 53 mockSchemesStore := mocks.SchemeStore{} 54 mockSchemesStore.On("Save", &fakeScheme).Return(&model.Scheme{}, nil) 55 mockSchemesStore.On("Delete", "123").Return(&model.Scheme{}, nil) 56 mockSchemesStore.On("Get", "123").Return(&fakeScheme, nil) 57 mockSchemesStore.On("PermanentDeleteAll").Return(nil) 58 mockStore.On("Scheme").Return(&mockSchemesStore) 59 60 fakeFileInfo := model.FileInfo{PostId: "123"} 61 mockFileInfoStore := mocks.FileInfoStore{} 62 mockFileInfoStore.On("GetForPost", "123", true, true, false).Return([]*model.FileInfo{&fakeFileInfo}, nil) 63 mockFileInfoStore.On("GetForPost", "123", true, true, true).Return([]*model.FileInfo{&fakeFileInfo}, nil) 64 mockStore.On("FileInfo").Return(&mockFileInfoStore) 65 66 fakeWebhook := model.IncomingWebhook{Id: "123"} 67 mockWebhookStore := mocks.WebhookStore{} 68 mockWebhookStore.On("GetIncoming", "123", true).Return(&fakeWebhook, nil) 69 mockWebhookStore.On("GetIncoming", "123", false).Return(&fakeWebhook, nil) 70 mockStore.On("Webhook").Return(&mockWebhookStore) 71 72 fakeEmoji := model.Emoji{Id: "123", Name: "name123"} 73 ctxEmoji := model.Emoji{Id: "master", Name: "name123"} 74 mockEmojiStore := mocks.EmojiStore{} 75 mockEmojiStore.On("Get", mock.Anything, "123", true).Return(&fakeEmoji, nil) 76 mockEmojiStore.On("Get", mock.Anything, "123", false).Return(&fakeEmoji, nil) 77 mockEmojiStore.On("Get", context.Background(), "master", true).Return(&ctxEmoji, nil) 78 mockEmojiStore.On("Get", sqlstore.WithMaster(context.Background()), "master", true).Return(&ctxEmoji, nil) 79 mockEmojiStore.On("GetByName", mock.Anything, "name123", true).Return(&fakeEmoji, nil) 80 mockEmojiStore.On("GetByName", mock.Anything, "name123", false).Return(&fakeEmoji, nil) 81 mockEmojiStore.On("GetByName", context.Background(), "master", true).Return(&ctxEmoji, nil) 82 mockEmojiStore.On("GetByName", sqlstore.WithMaster(context.Background()), "master", false).Return(&ctxEmoji, nil) 83 mockEmojiStore.On("Delete", &fakeEmoji, int64(0)).Return(nil) 84 mockEmojiStore.On("Delete", &ctxEmoji, int64(0)).Return(nil) 85 mockStore.On("Emoji").Return(&mockEmojiStore) 86 87 mockCount := int64(10) 88 mockGuestCount := int64(12) 89 channelId := "channel1" 90 fakeChannelId := model.Channel{Id: channelId} 91 mockChannelStore := mocks.ChannelStore{} 92 mockChannelStore.On("ClearCaches").Return() 93 mockChannelStore.On("GetMemberCount", "id", true).Return(mockCount, nil) 94 mockChannelStore.On("GetMemberCount", "id", false).Return(mockCount, nil) 95 mockChannelStore.On("GetGuestCount", "id", true).Return(mockGuestCount, nil) 96 mockChannelStore.On("GetGuestCount", "id", false).Return(mockGuestCount, nil) 97 mockChannelStore.On("Get", channelId, true).Return(&fakeChannelId, nil) 98 mockChannelStore.On("Get", channelId, false).Return(&fakeChannelId, nil) 99 mockStore.On("Channel").Return(&mockChannelStore) 100 101 mockPinnedPostsCount := int64(10) 102 mockChannelStore.On("GetPinnedPostCount", "id", true).Return(mockPinnedPostsCount, nil) 103 mockChannelStore.On("GetPinnedPostCount", "id", false).Return(mockPinnedPostsCount, nil) 104 105 fakePosts := &model.PostList{} 106 fakeOptions := model.GetPostsOptions{ChannelId: "123", PerPage: 30} 107 mockPostStore := mocks.PostStore{} 108 mockPostStore.On("GetPosts", fakeOptions, true).Return(fakePosts, nil) 109 mockPostStore.On("GetPosts", fakeOptions, false).Return(fakePosts, nil) 110 mockPostStore.On("InvalidateLastPostTimeCache", "12360") 111 112 mockPostStoreOptions := model.GetPostsSinceOptions{ 113 ChannelId: "channelId", 114 Time: 1, 115 SkipFetchThreads: false, 116 } 117 118 mockPostStoreEtagResult := fmt.Sprintf("%v.%v", model.CurrentVersion, 1) 119 mockPostStore.On("ClearCaches") 120 mockPostStore.On("InvalidateLastPostTimeCache", "channelId") 121 mockPostStore.On("GetEtag", "channelId", true, false).Return(mockPostStoreEtagResult) 122 mockPostStore.On("GetEtag", "channelId", false, false).Return(mockPostStoreEtagResult) 123 mockPostStore.On("GetPostsSince", mockPostStoreOptions, true).Return(model.NewPostList(), nil) 124 mockPostStore.On("GetPostsSince", mockPostStoreOptions, false).Return(model.NewPostList(), nil) 125 mockStore.On("Post").Return(&mockPostStore) 126 127 fakeTermsOfService := model.TermsOfService{Id: "123", CreateAt: 11111, UserId: "321", Text: "Terms of service test"} 128 mockTermsOfServiceStore := mocks.TermsOfServiceStore{} 129 mockTermsOfServiceStore.On("InvalidateTermsOfService", "123") 130 mockTermsOfServiceStore.On("Save", &fakeTermsOfService).Return(&fakeTermsOfService, nil) 131 mockTermsOfServiceStore.On("GetLatest", true).Return(&fakeTermsOfService, nil) 132 mockTermsOfServiceStore.On("GetLatest", false).Return(&fakeTermsOfService, nil) 133 mockTermsOfServiceStore.On("Get", "123", true).Return(&fakeTermsOfService, nil) 134 mockTermsOfServiceStore.On("Get", "123", false).Return(&fakeTermsOfService, nil) 135 mockStore.On("TermsOfService").Return(&mockTermsOfServiceStore) 136 137 fakeUser := []*model.User{{ 138 Id: "123", 139 AuthData: model.NewString("authData"), 140 AuthService: "authService", 141 }} 142 mockUserStore := mocks.UserStore{} 143 mockUserStore.On("GetProfileByIds", mock.Anything, []string{"123"}, &store.UserGetByIdsOpts{}, true).Return(fakeUser, nil) 144 mockUserStore.On("GetProfileByIds", mock.Anything, []string{"123"}, &store.UserGetByIdsOpts{}, false).Return(fakeUser, nil) 145 146 fakeProfilesInChannelMap := map[string]*model.User{ 147 "456": {Id: "456"}, 148 } 149 mockUserStore.On("GetAllProfilesInChannel", mock.Anything, "123", true).Return(fakeProfilesInChannelMap, nil) 150 mockUserStore.On("GetAllProfilesInChannel", mock.Anything, "123", false).Return(fakeProfilesInChannelMap, nil) 151 152 mockUserStore.On("Get", mock.Anything, "123").Return(fakeUser[0], nil) 153 users := []*model.User{ 154 fakeUser[0], 155 { 156 Id: "456", 157 AuthData: model.NewString("authData"), 158 AuthService: "authService", 159 }, 160 } 161 mockUserStore.On("GetMany", mock.Anything, []string{"123", "456"}).Return(users, nil) 162 mockUserStore.On("GetMany", mock.Anything, []string{"123"}).Return(users[0:1], nil) 163 mockStore.On("User").Return(&mockUserStore) 164 165 fakeUserTeamIds := []string{"1", "2", "3"} 166 mockTeamStore := mocks.TeamStore{} 167 mockTeamStore.On("GetUserTeamIds", "123", true).Return(fakeUserTeamIds, nil) 168 mockTeamStore.On("GetUserTeamIds", "123", false).Return(fakeUserTeamIds, nil) 169 mockStore.On("Team").Return(&mockTeamStore) 170 171 return &mockStore 172 } 173 174 func TestMain(m *testing.M) { 175 mlog.DisableZap() 176 mainHelper = testlib.NewMainHelperWithOptions(nil) 177 defer mainHelper.Close() 178 179 initStores() 180 mainHelper.Main(m) 181 tearDownStores() 182 }