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  }