[MM-55017] Add API method to get users for Admin Reporting (#25499)
* Add store method to get reporting data * Some store changes * Added app layer * Added API call, some miscellaneous fixes * Fix lint * Fix serialized check * Add API docs * Fix user store tests leaking users * Fix test * PR feedback * Add filtering for role/team/activated user, filter out bot users * Fix mock * Fix test * Oops * Switch to using struct filter * More PR feedback * Fix gen * Fix test * Fix API docs * Fix test * Fix possible SQL injection, some query optimization * Fix migrations * Oops * Add role to API * Fix check * Add Client4 API call for load testing * Fix test * Update server/channels/store/storetest/user_store.go Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com> * PR feedback --------- Co-authored-by: Mattermost Build <build@mattermost.com> Co-authored-by: Ibrahim Serdar Acikgoz <serdaracikgoz86@gmail.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
7afc14de36
Коммит
109f4643c6
@@ -1932,3 +1932,96 @@ func TestSendSubscriptionHistoryEvent(t *testing.T) {
|
||||
require.Equal(t, 10, subscriptionHistoryEvent.Seats, "Number of seats doesn't match")
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetUsersForReporting(t *testing.T) {
|
||||
t.Run("should throw error on invalid page size", func(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
userReports, err := th.App.GetUsersForReporting(&model.UserReportOptions{
|
||||
UserReportOptionsWithoutDateRange: model.UserReportOptionsWithoutDateRange{
|
||||
SortColumn: "Username",
|
||||
PageSize: 999,
|
||||
},
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Nil(t, userReports)
|
||||
})
|
||||
|
||||
t.Run("should throw error on invalid date range", func(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
userReports, err := th.App.GetUsersForReporting(&model.UserReportOptions{
|
||||
UserReportOptionsWithoutDateRange: model.UserReportOptionsWithoutDateRange{
|
||||
SortColumn: "Username",
|
||||
PageSize: 50,
|
||||
},
|
||||
StartAt: 1000,
|
||||
EndAt: 500,
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Nil(t, userReports)
|
||||
})
|
||||
|
||||
t.Run("should throw error on bad sort column", func(t *testing.T) {
|
||||
th := Setup(t).InitBasic()
|
||||
defer th.TearDown()
|
||||
|
||||
userReports, err := th.App.GetUsersForReporting(&model.UserReportOptions{
|
||||
UserReportOptionsWithoutDateRange: model.UserReportOptionsWithoutDateRange{
|
||||
SortColumn: "FakeColumn",
|
||||
PageSize: 50,
|
||||
},
|
||||
})
|
||||
require.Error(t, err)
|
||||
require.Nil(t, userReports)
|
||||
})
|
||||
|
||||
t.Run("should return some formatted reporting data", func(t *testing.T) {
|
||||
th := SetupWithStoreMock(t)
|
||||
defer th.TearDown()
|
||||
|
||||
// Mock to get the user count
|
||||
mockStore := th.App.Srv().Store().(*storemocks.Store)
|
||||
mockUserStore := storemocks.UserStore{}
|
||||
mockUserStore.On("GetUserReport",
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
mock.Anything,
|
||||
).Return([]*model.UserReportQuery{
|
||||
{
|
||||
User: model.User{
|
||||
Id: "some-id",
|
||||
CreateAt: 1000,
|
||||
FirstName: "Bob",
|
||||
LastName: "Bobson",
|
||||
},
|
||||
UserPostStats: model.UserPostStats{
|
||||
LastLogin: 1500,
|
||||
},
|
||||
},
|
||||
}, nil)
|
||||
|
||||
mockStore.On("User").Return(&mockUserStore)
|
||||
|
||||
userReports, err := th.App.GetUsersForReporting(&model.UserReportOptions{
|
||||
UserReportOptionsWithoutDateRange: model.UserReportOptionsWithoutDateRange{
|
||||
SortColumn: "Username",
|
||||
PageSize: 50,
|
||||
},
|
||||
})
|
||||
require.Nil(t, err)
|
||||
require.NotNil(t, userReports)
|
||||
require.Equal(t, "Bob Bobson", userReports[0].DisplayName)
|
||||
})
|
||||
}
|
||||
|
||||
Ссылка в новой задаче
Block a user