+
{{ $gettext('Select a user to view details') }}
-
diff --git a/packages/web-app-admin-settings/src/composables/actions/users/useUserActionsRemoveFromGroups.ts b/packages/web-app-admin-settings/src/composables/actions/users/useUserActionsRemoveFromGroups.ts
index c2f8776803..e6f6ba0b5e 100644
--- a/packages/web-app-admin-settings/src/composables/actions/users/useUserActionsRemoveFromGroups.ts
+++ b/packages/web-app-admin-settings/src/composables/actions/users/useUserActionsRemoveFromGroups.ts
@@ -39,6 +39,10 @@ export const useUserActionsRemoveFromGroups = ({ groups }: { groups: Ref
!memberOf?.length)) {
+ return false
+ }
+
return resources.length > 0
},
handler
diff --git a/packages/web-app-admin-settings/tests/unit/components/Users/AddToGroupsModal.spec.ts b/packages/web-app-admin-settings/tests/unit/components/Users/AddToGroupsModal.spec.ts
index af4180787a..a5e4b13e34 100644
--- a/packages/web-app-admin-settings/tests/unit/components/Users/AddToGroupsModal.spec.ts
+++ b/packages/web-app-admin-settings/tests/unit/components/Users/AddToGroupsModal.spec.ts
@@ -4,6 +4,7 @@ import { mock } from 'vitest-mock-extended'
import { Group, User } from '@opencloud-eu/web-client/graph/generated'
import { Modal, useMessages } from '@opencloud-eu/web-pkg'
import { useUserSettingsStore } from '../../../../src/composables/stores/userSettings'
+import GroupSelect from '../../../../src/components/Users/GroupSelect.vue'
describe('AddToGroupsModal', () => {
it('renders the input', () => {
@@ -11,6 +12,32 @@ describe('AddToGroupsModal', () => {
expect(wrapper.find('group-select-stub').exists()).toBeTruthy()
})
+ describe('available groups', () => {
+ it('lists all available groups if user is not assigned to any', () => {
+ const users = [mock({ memberOf: [] })]
+ const groups = [mock(), mock()]
+ const { wrapper } = getWrapper({ users, groups })
+ const input = wrapper.findComponent('group-select-stub')
+ expect(input.props('groupOptions').length).toBe(groups.length)
+ })
+ it('only lists groups the user is not already assigned to if one user given', () => {
+ const assignedGroup = mock({ id: '1' })
+ const users = [mock({ memberOf: [assignedGroup] })]
+ const groups = [assignedGroup, mock()]
+ const { wrapper } = getWrapper({ users, groups })
+ const input = wrapper.findComponent('group-select-stub')
+ expect(input.props('groupOptions').length).toBe(1)
+ })
+ it('lists all available groups if more than one user given', () => {
+ const assignedGroup = mock({ id: '1' })
+ const users = [mock({ memberOf: [assignedGroup] }), mock({ memberOf: [] })]
+ const groups = [assignedGroup, mock()]
+ const { wrapper } = getWrapper({ users, groups })
+ const input = wrapper.findComponent('group-select-stub')
+ expect(input.props('groupOptions').length).toBe(groups.length)
+ })
+ })
+
describe('method "onConfirm"', () => {
it('adds all users to the given groups', async () => {
const users = [mock({ memberOf: [] }), mock({ memberOf: [] })]
@@ -20,8 +47,7 @@ describe('AddToGroupsModal', () => {
mocks.$clientService.graphAuthenticated.users.getUser.mockResolvedValue(
mock({ id: 'e3515ffb-d264-4dfc-8506-6c239f6673b5' })
)
-
- wrapper.vm.selectedOptions = groups
+ ;(wrapper.vm as any).selectedOptions = groups
await wrapper.vm.onConfirm()
const { showMessage } = useMessages()
@@ -38,8 +64,7 @@ describe('AddToGroupsModal', () => {
const { wrapper, mocks } = getWrapper({ users, groups })
mocks.$clientService.graphAuthenticated.groups.addMember.mockRejectedValue(new Error(''))
mocks.$clientService.graphAuthenticated.users.getUser.mockRejectedValue(new Error(''))
-
- wrapper.vm.selectedOptions = groups
+ ;(wrapper.vm as any).selectedOptions = groups
await wrapper.vm.onConfirm()
const { showErrorMessage } = useMessages()
@@ -50,7 +75,7 @@ describe('AddToGroupsModal', () => {
})
})
-function getWrapper({ users = [mock()], groups = [mock()] } = {}) {
+function getWrapper({ users = [mock({ memberOf: [] })], groups = [mock()] } = {}) {
const mocks = defaultComponentMocks()
return {
diff --git a/packages/web-app-admin-settings/tests/unit/components/Users/RemoveFromGroupsModal.spec.ts b/packages/web-app-admin-settings/tests/unit/components/Users/RemoveFromGroupsModal.spec.ts
index 966de80bf4..1c334bf982 100644
--- a/packages/web-app-admin-settings/tests/unit/components/Users/RemoveFromGroupsModal.spec.ts
+++ b/packages/web-app-admin-settings/tests/unit/components/Users/RemoveFromGroupsModal.spec.ts
@@ -4,6 +4,7 @@ import { mock } from 'vitest-mock-extended'
import { Group, User } from '@opencloud-eu/web-client/graph/generated'
import { Modal, useMessages } from '@opencloud-eu/web-pkg'
import { useUserSettingsStore } from '../../../../src/composables/stores/userSettings'
+import GroupSelect from '../../../../src/components/Users/GroupSelect.vue'
describe('RemoveFromGroupsModal', () => {
it('renders the input', () => {
@@ -11,6 +12,29 @@ describe('RemoveFromGroupsModal', () => {
expect(wrapper.find('group-select-stub').exists()).toBeTruthy()
})
+ describe('available groups', () => {
+ it('lists only groups the user is assigned to', () => {
+ const assignedGroup = mock({ id: '1' })
+ const users = [mock({ memberOf: [assignedGroup] })]
+ const groups = [assignedGroup, mock()]
+ const { wrapper } = getWrapper({ users, groups })
+ const input = wrapper.findComponent('group-select-stub')
+ expect(input.props('groupOptions').length).toBe(1)
+ })
+ it('lists a sum of all assigned groups when multiple users are selected', () => {
+ const assignedGroup = mock({ id: '1' })
+ const assignedGroup2 = mock({ id: '2' })
+ const users = [
+ mock({ memberOf: [assignedGroup] }),
+ mock({ memberOf: [assignedGroup, assignedGroup2] })
+ ]
+ const groups = [assignedGroup, assignedGroup2, mock()]
+ const { wrapper } = getWrapper({ users, groups })
+ const input = wrapper.findComponent('group-select-stub')
+ expect(input.props('groupOptions').length).toBe(2)
+ })
+ })
+
describe('method "onConfirm"', () => {
it('removes all users from the given groups', async () => {
const users = [
@@ -23,8 +47,7 @@ describe('RemoveFromGroupsModal', () => {
mocks.$clientService.graphAuthenticated.users.getUser.mockResolvedValue(
mock({ id: 'e3515ffb-d264-4dfc-8506-6c239f6673b5' })
)
-
- wrapper.vm.selectedOptions = groups
+ ;(wrapper.vm as any).selectedOptions = groups
await wrapper.vm.onConfirm()
const { showMessage } = useMessages()
@@ -44,8 +67,7 @@ describe('RemoveFromGroupsModal', () => {
const { wrapper, mocks } = getWrapper({ users, groups })
mocks.$clientService.graphAuthenticated.groups.deleteMember.mockRejectedValue(new Error(''))
mocks.$clientService.graphAuthenticated.users.getUser.mockRejectedValue(new Error(''))
-
- wrapper.vm.selectedOptions = groups
+ ;(wrapper.vm as any).selectedOptions = groups
await wrapper.vm.onConfirm()
const { showErrorMessage } = useMessages()
@@ -56,7 +78,7 @@ describe('RemoveFromGroupsModal', () => {
})
})
-function getWrapper({ users = [mock()], groups = [mock()] } = {}) {
+function getWrapper({ users = [mock({ memberOf: [] })], groups = [mock()] } = {}) {
const mocks = defaultComponentMocks()
return {
diff --git a/packages/web-app-admin-settings/tests/unit/components/Users/SideBar/DetailsPanel.spec.ts b/packages/web-app-admin-settings/tests/unit/components/Users/SideBar/DetailsPanel.spec.ts
index c1ad32a5ac..5b76afec3a 100644
--- a/packages/web-app-admin-settings/tests/unit/components/Users/SideBar/DetailsPanel.spec.ts
+++ b/packages/web-app-admin-settings/tests/unit/components/Users/SideBar/DetailsPanel.spec.ts
@@ -29,28 +29,28 @@ describe('DetailsPanel', () => {
const { wrapper } = getWrapper({
props: { user: null, users: [] }
})
- expect(wrapper.vm.noUsers).toBeTruthy()
+ expect(wrapper.find('[data-testid="no-users-selected"]').exists()).toBeTruthy()
})
it('should be false if users are given', () => {
const { wrapper } = getWrapper({ props: { user: defaultUser, users: [defaultUser] } })
- expect(wrapper.vm.noUsers).toBeFalsy()
+ expect(wrapper.find('[data-testid="no-users-selected"]').exists()).toBeFalsy()
})
})
describe('computed method "multipleUsers"', () => {
it('should be false if no users are given', () => {
const { wrapper } = getWrapper({ props: { user: null, users: [] } })
- expect(wrapper.vm.multipleUsers).toBeFalsy()
+ expect(wrapper.find('#oc-users-details-multiple-sidebar').exists()).toBeFalsy()
})
it('should be false if one user is given', () => {
const { wrapper } = getWrapper({ props: { user: defaultUser, users: [defaultUser] } })
- expect(wrapper.vm.multipleUsers).toBeFalsy()
+ expect(wrapper.find('#oc-users-details-multiple-sidebar').exists()).toBeFalsy()
})
it('should be true if multiple users are given', () => {
const { wrapper } = getWrapper({
props: { user: null, users: [defaultUser, { displayName: 'user2' } as User] }
})
- expect(wrapper.vm.multipleUsers).toBeTruthy()
+ expect(wrapper.find('#oc-users-details-multiple-sidebar').exists()).toBeTruthy()
})
})
})
diff --git a/packages/web-app-admin-settings/tests/unit/composables/actions/users/useUserActionsRemoveFromGroups.spec.ts b/packages/web-app-admin-settings/tests/unit/composables/actions/users/useUserActionsRemoveFromGroups.spec.ts
index 979a3390bf..89424595d7 100644
--- a/packages/web-app-admin-settings/tests/unit/composables/actions/users/useUserActionsRemoveFromGroups.spec.ts
+++ b/packages/web-app-admin-settings/tests/unit/composables/actions/users/useUserActionsRemoveFromGroups.spec.ts
@@ -1,7 +1,7 @@
import { useUserActionsRemoveFromGroups } from '../../../../../src/composables/actions/users/useUserActionsRemoveFromGroups'
import { mock } from 'vitest-mock-extended'
import { ref, unref } from 'vue'
-import { User } from '@opencloud-eu/web-client/graph/generated'
+import { Group, User } from '@opencloud-eu/web-client/graph/generated'
import { getComposableWrapper, writable } from '@opencloud-eu/web-test-helpers'
import { useCapabilityStore, useModals } from '@opencloud-eu/web-pkg'
@@ -9,8 +9,9 @@ describe('useUserActionsRemoveFromGroups', () => {
describe('method "isVisible"', () => {
it.each([
{ resources: [], isVisible: false },
- { resources: [mock()], isVisible: true },
- { resources: [mock(), mock()], isVisible: true }
+ { resources: [mock()], isVisible: false },
+ { resources: [mock({ memberOf: [mock()] })], isVisible: true },
+ { resources: [mock({ memberOf: [mock()] }), mock()], isVisible: true }
])('requires at least one user to be enabled', ({ resources, isVisible }) => {
getWrapper({
setup: ({ actions }) => {