mirror of
https://github.com/hanzoai/team.git
synced 2026-11-01 07:55:31 +00:00
* lint fix
* CI
* added new migration mocks
* Used setup for tests
* some comment
* Removed unnecesseery nil check
* Form validation
* WIP tests
* WIP tests
* WIP tests
* fix: mock content flagging config selector with correct reasons format
* fix: add mock for getContentFlaggingConfig in flag post modal test
* Updated error code order in API docs
* removed empty files
* Added tests
* lint fixes
* minor tweak
* lint fix
* type fix
* fixed test
* nit
* test enhancements
* API WIP
* API WIP
* creating values
* creating content flagging channel and properties
* Able to save properties
* Added another property field
* WIP
* WIP
* Added validations
* Added data validations and hidden post if confifgured to
* lint fixes
* Added API spec
* Added some tests
* Added tests for getContentReviewBot
* test: add comprehensive tests for getContentReviewChannels function
* Added more app layer tests
* Added TestCanFlagPost
* test: Add comprehensive tests for FlagPost function
* Added all app layer tests
* Removed a file that was reamoved downstream
* test: add content flagging test file
* test: add comprehensive tests for FlagContentRequest.IsValid method
* Added model tests
* test: add comprehensive tests for SqlPropertyValueStore.CreateMany
* test: add comprehensive tests for flagPost() API function
* Added API tests
* linter fix
* WIP
* sent post flagging confirmation message
* fixed i18n nissues
* fixed i18n nissues
* CI
* WIP
* WIP
* Added API call
* test: add test for Client4.flagPost API call in FlagPostModal
* fix: remove userEvent.setup() from flag post modal test
* test: wrap submit button click in act for proper state updates
* Updated tests
* lint fix
* Updated test
* fix: reset contentFlaggingGroupId for test isolation in content flagging tests
* removed cached group ID
* removed debug log
* CI
* Updated to allow special characters in comments
* Handled empty comment
* Created getContentFlaggingFields API
* created getPostPropertyValues API
* Used finally
* WIP
* Created useContentFlaggingFields hook
* WIP
* WIP
* Added option to retain data for reviewers
* Displayed deleted post's preview
* DIsplayed all properties
* Adding field name i18n
* WIP - managing i18n able texts
* Finished displaying all fields
* Manual cleanup
* lint fixes
* team role filter logic fix
* Fixed tests
* created new API to fetch flagged posts
* lint fix
* Added new client methods
* test: add comprehensive tests for content flagging APIs
* Added new API tests
* fixed openapi spec
* Fixed DataSpillageReport tests
* Fixed PostMarkdown test
* Fixed PostPreviewPropertyRenderer test
* Added metadata to card renderer
* test fixes
* Added no comment placeholder
* Added view detail button
* Created RemoveFlaggedMessageConfirmationModal modal
* Added key and remove flag request modal
* IMplemented delete flagged post
* Handled edge cases of deleting flagged post
* keep message
* UI integration
* Added WS event for post report update and handled deleted files of flagged post
* Added error handling in keep/remove forms
* i18n fixes
* Fixed test
* Updated OpenAPI specs
* fixed types
* fixed types
* refactoring
* refactor: improve test mocking for data spillage report component
* test mock updates
* Fixed tests
* Updated reducer
* not resetting mocks
* Added migrations for content flagging tables
* Created new structure
* review fixes
* Used correct ot name
* WIP
* review fixes
* review fixes
* Added new property translations
* CI
* CI
* CI
* Improved test
* fixed test
* CI
* New UI component
* WIP
* Updated settings APIs
* cached DB data
* used cached reviewer data
* Updated tests
* Lint fixes
* test: add tests for saveContentFlaggingSettings and getContentFlaggingSettings APIs
* test fix
* test: add tests for SaveContentFlaggingConfig and GetContentFlaggingConfigReviewerIDs
* Updated tests
* test: add content flagging test for local cache layer
* test: add comprehensive tests for content flagging store cache
* Updated tests
* lint fix
* Updated mobile text
* Added content flagging SQL store mocks
* Added API specs for new APIs
* fixed tests
* feat: add TestContentFlaggingStore function for content flagging store testing
* feat: add comprehensive tests for content flagging store
* Added SQL store tests
* test: add content flagging test for local cache layer
* test: add tests for content flagging store caching
* Added cache layer tests
* Updated tests
* Fixed
* Handled JSON error
* fixes
* fixes
* Fixed retry layer test
* fixerdf i18n
* Fixed test
* CI
* building index concurrently
* CI
* fixed a test
* CI
* cleanup
* Integrate flag post api (#33798)
* WIP
* WIP
* Added API call
* test: add test for Client4.flagPost API call in FlagPostModal
* fix: remove userEvent.setup() from flag post modal test
* test: wrap submit button click in act for proper state updates
* Updated tests
* lint fix
* CI
* Updated to allow special characters in comments
* Handled empty comment
* Used finally
* CI
* Fixed test
* Spillage card integration (#33832)
* Created getContentFlaggingFields API
* created getPostPropertyValues API
* WIP
* Created useContentFlaggingFields hook
* WIP
* WIP
* Added option to retain data for reviewers
* Displayed deleted post's preview
* DIsplayed all properties
* Adding field name i18n
* WIP - managing i18n able texts
* Finished displaying all fields
* Manual cleanup
* lint fixes
* team role filter logic fix
* Fixed tests
* created new API to fetch flagged posts
* lint fix
* Added new client methods
* test: add comprehensive tests for content flagging APIs
* Added new API tests
* fixed openapi spec
* Fixed DataSpillageReport tests
* Fixed PostMarkdown test
* Fixed PostPreviewPropertyRenderer test
* Added metadata to card renderer
* test fixes
* Added no comment placeholder
* Fixed test
* refactor: improve test mocking for data spillage report component
* test mock updates
* Updated reducer
* not resetting mocks
* WIP
* review fixes
* CI
* Fixed
* fixes
* Content flagging actions implementation (#33852)
* Added view detail button
* Created RemoveFlaggedMessageConfirmationModal modal
* Added key and remove flag request modal
* IMplemented delete flagged post
* Handled edge cases of deleting flagged post
* keep message
* UI integration
* Added WS event for post report update and handled deleted files of flagged post
* Added error handling in keep/remove forms
* i18n fixes
* Updated OpenAPI specs
* fixed types
* fixed types
* refactoring
* Fixed tests
* review fixes
* Added new property translations
* Improved test
* fixed test
* CI
* fixes
* CI
* fixed a test
* CI
* Review fixes
---------
(cherry picked from commit d7618cc982)
Co-authored-by: Harshil Sharma <[email protected]>
Co-authored-by: Hanzo Dev <[email protected]>
205 lines
10 KiB
Go
205 lines
10 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
package localcachelayer
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/mattermost/mattermost/server/public/shared/request"
|
|
"github.com/mattermost/mattermost/server/v8/channels/store"
|
|
"github.com/mattermost/mattermost/server/v8/channels/store/sqlstore"
|
|
"github.com/mattermost/mattermost/server/v8/channels/store/storetest/mocks"
|
|
"github.com/mattermost/mattermost/server/v8/channels/testlib"
|
|
"github.com/mattermost/mattermost/server/v8/platform/services/cache"
|
|
cachemocks "github.com/mattermost/mattermost/server/v8/platform/services/cache/mocks"
|
|
)
|
|
|
|
var mainHelper *testlib.MainHelper
|
|
|
|
func getMockCacheProvider() cache.Provider {
|
|
mockCacheProvider := cachemocks.Provider{}
|
|
mockCacheProvider.On("NewCache", mock.Anything).
|
|
Return(cache.NewLRU(&cache.CacheOptions{Size: 128}), nil)
|
|
mockCacheProvider.On("Type").Return("lru")
|
|
return &mockCacheProvider
|
|
}
|
|
|
|
func getMockStore(t *testing.T) *mocks.Store {
|
|
mockStore := mocks.Store{}
|
|
|
|
fakeReaction := model.Reaction{PostId: "123"}
|
|
mockReactionsStore := mocks.ReactionStore{}
|
|
mockReactionsStore.On("Save", &fakeReaction).Return(&model.Reaction{}, nil)
|
|
mockReactionsStore.On("Delete", &fakeReaction).Return(&model.Reaction{}, nil)
|
|
mockReactionsStore.On("GetForPost", "123", false).Return([]*model.Reaction{&fakeReaction}, nil)
|
|
mockReactionsStore.On("GetForPost", "123", true).Return([]*model.Reaction{&fakeReaction}, nil)
|
|
mockStore.On("Reaction").Return(&mockReactionsStore)
|
|
|
|
fakeRole := model.Role{Id: "123", Name: "role-name"}
|
|
fakeRole2 := model.Role{Id: "456", Name: "role-name2"}
|
|
mockRolesStore := mocks.RoleStore{}
|
|
mockRolesStore.On("Save", &fakeRole).Return(&model.Role{}, nil)
|
|
mockRolesStore.On("Delete", "123").Return(&fakeRole, nil)
|
|
mockRolesStore.On("GetByName", context.Background(), "role-name").Return(&fakeRole, nil)
|
|
mockRolesStore.On("GetByNames", []string{"role-name"}).Return([]*model.Role{&fakeRole}, nil)
|
|
mockRolesStore.On("GetByNames", []string{"role-name2"}).Return([]*model.Role{&fakeRole2}, nil)
|
|
mockRolesStore.On("PermanentDeleteAll").Return(nil)
|
|
mockStore.On("Role").Return(&mockRolesStore)
|
|
|
|
fakeScheme := model.Scheme{Id: "123", Name: "scheme-name"}
|
|
mockSchemesStore := mocks.SchemeStore{}
|
|
mockSchemesStore.On("Save", &fakeScheme).Return(&model.Scheme{}, nil)
|
|
mockSchemesStore.On("Delete", "123").Return(&model.Scheme{}, nil)
|
|
mockSchemesStore.On("Get", "123").Return(&fakeScheme, nil)
|
|
mockSchemesStore.On("PermanentDeleteAll").Return(nil)
|
|
mockStore.On("Scheme").Return(&mockSchemesStore)
|
|
|
|
fakeFileInfo := model.FileInfo{PostId: "123"}
|
|
mockFileInfoStore := mocks.FileInfoStore{}
|
|
mockFileInfoStore.On("GetForPost", "123", true, true, false).Return([]*model.FileInfo{&fakeFileInfo}, nil)
|
|
mockFileInfoStore.On("GetForPost", "123", true, true, true).Return([]*model.FileInfo{&fakeFileInfo}, nil)
|
|
mockFileInfoStore.On("GetByIds", []string{"123"}, true, false).Return([]*model.FileInfo{&fakeFileInfo}, nil)
|
|
mockStore.On("FileInfo").Return(&mockFileInfoStore)
|
|
|
|
fakeWebhook := model.IncomingWebhook{Id: "123"}
|
|
mockWebhookStore := mocks.WebhookStore{}
|
|
mockWebhookStore.On("GetIncoming", "123", true).Return(&fakeWebhook, nil)
|
|
mockWebhookStore.On("GetIncoming", "123", false).Return(&fakeWebhook, nil)
|
|
mockStore.On("Webhook").Return(&mockWebhookStore)
|
|
|
|
fakeEmoji := model.Emoji{Id: "123", Name: "name123"}
|
|
fakeEmoji2 := model.Emoji{Id: "321", Name: "name321"}
|
|
ctxEmoji := model.Emoji{Id: "master", Name: "name123"}
|
|
mockEmojiStore := mocks.EmojiStore{}
|
|
mockEmojiStore.On("Get", mock.Anything, "123", true).Return(&fakeEmoji, nil)
|
|
mockEmojiStore.On("Get", mock.Anything, "123", false).Return(&fakeEmoji, nil)
|
|
mockEmojiStore.On("Get", mock.IsType(&request.Context{}), "master", true).Return(&ctxEmoji, nil)
|
|
mockEmojiStore.On("Get", sqlstore.RequestContextWithMaster(request.TestContext(t)), "master", true).Return(&ctxEmoji, nil)
|
|
mockEmojiStore.On("GetByName", mock.Anything, "name123", true).Return(&fakeEmoji, nil)
|
|
mockEmojiStore.On("GetByName", mock.Anything, "name123", false).Return(&fakeEmoji, nil)
|
|
mockEmojiStore.On("GetMultipleByName", mock.IsType(&request.Context{}), []string{"name123"}).Return([]*model.Emoji{&fakeEmoji}, nil)
|
|
mockEmojiStore.On("GetMultipleByName", mock.IsType(&request.Context{}), []string{"name123", "name321"}).Return([]*model.Emoji{&fakeEmoji, &fakeEmoji2}, nil)
|
|
mockEmojiStore.On("GetByName", mock.IsType(&request.Context{}), "master", true).Return(&ctxEmoji, nil)
|
|
mockEmojiStore.On("GetByName", sqlstore.RequestContextWithMaster(request.TestContext(t)), "master", false).Return(&ctxEmoji, nil)
|
|
mockEmojiStore.On("Delete", &fakeEmoji, int64(0)).Return(nil)
|
|
mockEmojiStore.On("Delete", &ctxEmoji, int64(0)).Return(nil)
|
|
mockStore.On("Emoji").Return(&mockEmojiStore)
|
|
|
|
mockCount := int64(10)
|
|
mockGuestCount := int64(12)
|
|
channelId := "channel1"
|
|
fakeChannel1 := model.Channel{Id: channelId, Name: "channel1-name"}
|
|
fakeChannel2 := model.Channel{Id: "channel2", Name: "channel2-name"}
|
|
mockChannelStore := mocks.ChannelStore{}
|
|
mockChannelStore.On("ClearCaches").Return()
|
|
mockChannelStore.On("GetMemberCount", "id", true).Return(mockCount, nil)
|
|
mockChannelStore.On("GetMemberCount", "id", false).Return(mockCount, nil)
|
|
mockChannelStore.On("GetGuestCount", "id", true).Return(mockGuestCount, nil)
|
|
mockChannelStore.On("GetGuestCount", "id", false).Return(mockGuestCount, nil)
|
|
mockChannelStore.On("Get", channelId, true).Return(&fakeChannel1, nil)
|
|
mockChannelStore.On("Get", channelId, false).Return(&fakeChannel1, nil)
|
|
mockChannelStore.On("GetMany", []string{channelId}, true).Return(model.ChannelList{&fakeChannel1}, nil)
|
|
mockChannelStore.On("GetMany", []string{channelId}, false).Return(model.ChannelList{&fakeChannel1}, nil)
|
|
mockChannelStore.On("GetMany", []string{fakeChannel2.Id}, true).Return(model.ChannelList{&fakeChannel2}, nil)
|
|
mockChannelStore.On("GetByNames", "team1", []string{fakeChannel1.Name}, true).Return([]*model.Channel{&fakeChannel1}, nil)
|
|
mockChannelStore.On("GetByNames", "team1", []string{fakeChannel2.Name}, true).Return([]*model.Channel{&fakeChannel2}, nil)
|
|
mockStore.On("Channel").Return(&mockChannelStore)
|
|
|
|
mockChannelsMemberCount := map[string]int64{
|
|
"channel1": 10,
|
|
"channel2": 20,
|
|
}
|
|
mockChannelStore.On("GetChannelsMemberCount", []string{"channel1", "channel2"}).Return(mockChannelsMemberCount, nil)
|
|
|
|
mockPinnedPostsCount := int64(10)
|
|
mockChannelStore.On("GetPinnedPostCount", "id", true).Return(mockPinnedPostsCount, nil)
|
|
mockChannelStore.On("GetPinnedPostCount", "id", false).Return(mockPinnedPostsCount, nil)
|
|
|
|
fakePosts := &model.PostList{}
|
|
fakeOptions := model.GetPostsOptions{ChannelId: "123", PerPage: 30}
|
|
mockPostStore := mocks.PostStore{}
|
|
mockPostStore.On("GetPosts", mock.AnythingOfType("*request.Context"), fakeOptions, true, map[string]bool{}).Return(fakePosts, nil)
|
|
mockPostStore.On("GetPosts", mock.AnythingOfType("*request.Context"), fakeOptions, false, map[string]bool{}).Return(fakePosts, nil)
|
|
mockPostStore.On("InvalidateLastPostTimeCache", "12360")
|
|
|
|
mockPostStoreOptions := model.GetPostsSinceOptions{
|
|
ChannelId: "channelId",
|
|
Time: 1,
|
|
SkipFetchThreads: false,
|
|
}
|
|
|
|
mockPostStoreEtagResult := fmt.Sprintf("%v.%v", model.CurrentVersion, 1)
|
|
mockPostStore.On("ClearCaches")
|
|
mockPostStore.On("InvalidateLastPostTimeCache", "channelId")
|
|
mockPostStore.On("GetEtag", "channelId", true, false).Return(mockPostStoreEtagResult)
|
|
mockPostStore.On("GetEtag", "channelId", false, false).Return(mockPostStoreEtagResult)
|
|
mockPostStore.On("GetPostsSince", mock.AnythingOfType("*request.Context"), mockPostStoreOptions, true, map[string]bool{}).Return(model.NewPostList(), nil)
|
|
mockPostStore.On("GetPostsSince", mock.AnythingOfType("*request.Context"), mockPostStoreOptions, false, map[string]bool{}).Return(model.NewPostList(), nil)
|
|
mockStore.On("Post").Return(&mockPostStore)
|
|
|
|
fakeTermsOfService := model.TermsOfService{Id: "123", CreateAt: 11111, UserId: "321", Text: "Terms of service test"}
|
|
mockTermsOfServiceStore := mocks.TermsOfServiceStore{}
|
|
mockTermsOfServiceStore.On("InvalidateTermsOfService", "123")
|
|
mockTermsOfServiceStore.On("Save", &fakeTermsOfService).Return(&fakeTermsOfService, nil)
|
|
mockTermsOfServiceStore.On("GetLatest", true).Return(&fakeTermsOfService, nil)
|
|
mockTermsOfServiceStore.On("GetLatest", false).Return(&fakeTermsOfService, nil)
|
|
mockTermsOfServiceStore.On("Get", "123", true).Return(&fakeTermsOfService, nil)
|
|
mockTermsOfServiceStore.On("Get", "123", false).Return(&fakeTermsOfService, nil)
|
|
mockStore.On("TermsOfService").Return(&mockTermsOfServiceStore)
|
|
|
|
fakeUser := []*model.User{{
|
|
Id: "123",
|
|
AuthData: model.NewPointer("authData"),
|
|
AuthService: "authService",
|
|
}}
|
|
mockUserStore := mocks.UserStore{}
|
|
mockUserStore.On("GetProfileByIds", mock.Anything, []string{"123"}, &store.UserGetByIdsOpts{}, true).Return(fakeUser, nil)
|
|
mockUserStore.On("GetProfileByIds", mock.Anything, []string{"123"}, &store.UserGetByIdsOpts{}, false).Return(fakeUser, nil)
|
|
|
|
fakeProfilesInChannelMap := map[string]*model.User{
|
|
"456": {Id: "456"},
|
|
}
|
|
mockUserStore.On("GetAllProfilesInChannel", mock.Anything, "123", true).Return(fakeProfilesInChannelMap, nil)
|
|
mockUserStore.On("GetAllProfilesInChannel", mock.Anything, "123", false).Return(fakeProfilesInChannelMap, nil)
|
|
mockUserStore.On("GetAllProfiles", mock.AnythingOfType("*model.UserGetOptions")).Return(fakeUser, nil)
|
|
|
|
mockUserStore.On("Get", mock.Anything, "123").Return(fakeUser[0], nil)
|
|
users := []*model.User{
|
|
fakeUser[0],
|
|
{
|
|
Id: "456",
|
|
AuthData: model.NewPointer("authData"),
|
|
AuthService: "authService",
|
|
},
|
|
}
|
|
mockUserStore.On("GetMany", mock.Anything, []string{"123", "456"}).Return(users, nil)
|
|
mockUserStore.On("GetMany", mock.Anything, []string{"123"}).Return(users[0:1], nil)
|
|
mockStore.On("User").Return(&mockUserStore)
|
|
|
|
fakeUserTeamIds := []string{"1", "2", "3"}
|
|
mockTeamStore := mocks.TeamStore{}
|
|
mockTeamStore.On("GetUserTeamIds", "123", true).Return(fakeUserTeamIds, nil)
|
|
mockTeamStore.On("GetUserTeamIds", "123", false).Return(fakeUserTeamIds, nil)
|
|
mockStore.On("Team").Return(&mockTeamStore)
|
|
|
|
mockContentFlaggingStore := mocks.ContentFlaggingStore{}
|
|
mockStore.On("ContentFlagging").Return(&mockContentFlaggingStore)
|
|
|
|
return &mockStore
|
|
}
|
|
|
|
func TestMain(m *testing.M) {
|
|
mainHelper = testlib.NewMainHelperWithOptions(nil)
|
|
defer mainHelper.Close()
|
|
|
|
initStores(mainHelper.Logger)
|
|
mainHelper.Main(m)
|
|
tearDownStores()
|
|
}
|