[MM-44168] Add feature to restore archived user groups (#20369)
* Add undelete feature, add mocks, tests * Rename undelete->restore * make store-layers * make app-layers * Store -> Store() * Lint fixes Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
17332035fa
Коммит
5be8557247
@@ -32,6 +32,7 @@ func TestGroupStore(t *testing.T, ss store.Store) {
|
||||
t.Run("GetByUser", func(t *testing.T) { testGroupStoreGetByUser(t, ss) })
|
||||
t.Run("Update", func(t *testing.T) { testGroupStoreUpdate(t, ss) })
|
||||
t.Run("Delete", func(t *testing.T) { testGroupStoreDelete(t, ss) })
|
||||
t.Run("Restore", func(t *testing.T) { testGroupStoreRestore(t, ss) })
|
||||
|
||||
t.Run("GetMemberUsers", func(t *testing.T) { testGroupGetMemberUsers(t, ss) })
|
||||
t.Run("GetMemberUsersPage", func(t *testing.T) { testGroupGetMemberUsersPage(t, ss) })
|
||||
@@ -741,6 +742,59 @@ func testGroupStoreDelete(t *testing.T, ss store.Store) {
|
||||
require.True(t, errors.As(err, &nfErr))
|
||||
}
|
||||
|
||||
func testGroupStoreRestore(t *testing.T, ss store.Store) {
|
||||
// Save a group
|
||||
g1 := &model.Group{
|
||||
Name: model.NewString(model.NewId()),
|
||||
DisplayName: model.NewId(),
|
||||
Description: model.NewId(),
|
||||
Source: model.GroupSourceLdap,
|
||||
RemoteId: model.NewString(model.NewId()),
|
||||
}
|
||||
|
||||
d1, err := ss.Group().Create(g1)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, d1.Id, 26)
|
||||
|
||||
// Check the group is retrievable
|
||||
_, err = ss.Group().Get(d1.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Delete the group
|
||||
_, err = ss.Group().Delete(d1.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Get the before count
|
||||
d7, err := ss.Group().GetAllBySource(model.GroupSourceLdap)
|
||||
require.NoError(t, err)
|
||||
beforeCount := len(d7)
|
||||
|
||||
// restore the group
|
||||
_, err = ss.Group().Restore(d1.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
// Check the group is restored
|
||||
d4, err := ss.Group().Get(d1.Id)
|
||||
require.NoError(t, err)
|
||||
require.Zero(t, d4.DeleteAt)
|
||||
|
||||
// Check the after count
|
||||
d5, err := ss.Group().GetAllBySource(model.GroupSourceLdap)
|
||||
require.NoError(t, err)
|
||||
afterCount := len(d5)
|
||||
require.Condition(t, func() bool { return beforeCount == afterCount-1 })
|
||||
|
||||
// Try and restore a nonexistent group
|
||||
_, err = ss.Group().Delete(model.NewId())
|
||||
require.Error(t, err)
|
||||
var nfErr *store.ErrNotFound
|
||||
require.True(t, errors.As(err, &nfErr))
|
||||
|
||||
// Cannot restore again
|
||||
_, err = ss.Group().Restore(d1.Id)
|
||||
require.True(t, errors.As(err, &nfErr))
|
||||
}
|
||||
|
||||
func testGroupGetMemberUsers(t *testing.T, ss store.Store) {
|
||||
// Save a group
|
||||
g1 := &model.Group{
|
||||
|
||||
@@ -1012,6 +1012,29 @@ func (_m *GroupStore) PermittedSyncableAdmins(syncableID string, syncableType mo
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// Restore provides a mock function with given fields: groupID
|
||||
func (_m *GroupStore) Restore(groupID string) (*model.Group, error) {
|
||||
ret := _m.Called(groupID)
|
||||
|
||||
var r0 *model.Group
|
||||
if rf, ok := ret.Get(0).(func(string) *model.Group); ok {
|
||||
r0 = rf(groupID)
|
||||
} else {
|
||||
if ret.Get(0) != nil {
|
||||
r0 = ret.Get(0).(*model.Group)
|
||||
}
|
||||
}
|
||||
|
||||
var r1 error
|
||||
if rf, ok := ret.Get(1).(func(string) error); ok {
|
||||
r1 = rf(groupID)
|
||||
} else {
|
||||
r1 = ret.Error(1)
|
||||
}
|
||||
|
||||
return r0, r1
|
||||
}
|
||||
|
||||
// TeamMembersMinusGroupMembers provides a mock function with given fields: teamID, groupIDs, page, perPage
|
||||
func (_m *GroupStore) TeamMembersMinusGroupMembers(teamID string, groupIDs []string, page int, perPage int) ([]*model.UserWithGroups, error) {
|
||||
ret := _m.Called(teamID, groupIDs, page, perPage)
|
||||
|
||||
Ссылка в новой задаче
Block a user