diff --git a/changelog/unreleased/enhancement-create-spaces-via-admin-settings b/changelog/unreleased/enhancement-create-spaces-via-admin-settings new file mode 100644 index 00000000000..e78a7c6d16f --- /dev/null +++ b/changelog/unreleased/enhancement-create-spaces-via-admin-settings @@ -0,0 +1,6 @@ +Enhancement: Create spaces via admin settings + +We've added a new feature that allows you to create spaces via the admin settings. + +https://github.com/owncloud/web/pull/11849 +https://github.com/owncloud/web/issues/11771 \ No newline at end of file diff --git a/packages/web-app-admin-settings/src/views/Spaces.vue b/packages/web-app-admin-settings/src/views/Spaces.vue index 2e9a3ae793e..f1e78ce6f91 100644 --- a/packages/web-app-admin-settings/src/views/Spaces.vue +++ b/packages/web-app-admin-settings/src/views/Spaces.vue @@ -13,6 +13,13 @@ :batch-action-items="selectedSpaces" :show-view-options="true" > + @@ -23,10 +23,17 @@ import { useMessages, useSpacesStore, useResourcesStore -} from '@ownclouders/web-pkg' +} from '../../composables' export default defineComponent({ - setup() { + props: { + showLabel: { + type: Boolean, + default: true + } + }, + emits: ['spaceCreated'], + setup(props, { emit }) { const { showMessage, showErrorMessage } = useMessages() const { $gettext } = useGettext() const { createSpace } = useCreateSpace() @@ -40,6 +47,7 @@ export default defineComponent({ const createdSpace = await createSpace(name) upsertResource(createdSpace) spacesStore.upsertSpace(createdSpace) + emit('spaceCreated', createdSpace) showMessage({ title: $gettext('Space was created successfully') }) } catch (error) { console.error(error) diff --git a/packages/web-pkg/src/components/AppBar/index.ts b/packages/web-pkg/src/components/AppBar/index.ts index 2396937c9e9..a4e3507e459 100644 --- a/packages/web-pkg/src/components/AppBar/index.ts +++ b/packages/web-pkg/src/components/AppBar/index.ts @@ -1 +1,2 @@ export { default as AppBar } from './AppBar.vue' +export { default as CreateSpace } from './CreateSpace.vue' diff --git a/packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts b/packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts similarity index 94% rename from packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts rename to packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts index cbc471e55a3..0624a278669 100644 --- a/packages/web-app-files/tests/unit/components/AppBar/CreateSpace.spec.ts +++ b/packages/web-pkg/tests/unit/components/AppBar/CreateSpace.spec.ts @@ -2,7 +2,7 @@ import CreateSpace from '../../../../src/components/AppBar/CreateSpace.vue' import { mockDeep } from 'vitest-mock-extended' import { Resource, SpaceResource } from '@ownclouders/web-client' import { defaultPlugins, mount, defaultComponentMocks } from '@ownclouders/web-test-helpers' -import { useMessages, useModals, useSpacesStore } from '@ownclouders/web-pkg' +import { useMessages, useModals, useSpacesStore } from '../../../../src/composables' import { unref } from 'vue' const selectors = { @@ -36,6 +36,7 @@ describe('CreateSpace component', () => { const spacesStore = useSpacesStore() expect(spacesStore.upsertSpace).toHaveBeenCalled() + expect(wrapper.emitted('spaceCreated')).toBeTruthy() }) it('shows a message when an error occurred', async () => { vi.spyOn(console, 'error').mockImplementation(() => undefined) diff --git a/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap b/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap new file mode 100644 index 00000000000..414552d61ba --- /dev/null +++ b/packages/web-pkg/tests/unit/components/AppBar/__snapshots__/CreateSpace.spec.ts.snap @@ -0,0 +1,8 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`CreateSpace component > should show the "New Space" button 1`] = ` +"" +`; diff --git a/tests/e2e/cucumber/features/admin-settings/spaces.feature b/tests/e2e/cucumber/features/admin-settings/spaces.feature index eacbef8ccff..d3e1ba0c5c6 100644 --- a/tests/e2e/cucumber/features/admin-settings/spaces.feature +++ b/tests/e2e/cucumber/features/admin-settings/spaces.feature @@ -1,5 +1,27 @@ Feature: spaces management + Scenario: spaces can be created + Given "Admin" creates following users using API + | id | + | Alice | + And "Admin" assigns following roles to the users using API + | id | role | + | Alice | Space Admin | + And "Admin" creates the following project spaces using API + | name | id | + | team A | team.a | + When "Alice" logs in + And "Alice" opens the "admin-settings" app + And "Alice" navigates to the project spaces management page + And "Alice" creates the following project spaces + | name | id | + | team | team.b | + Then "Alice" should see the following spaces + | id | + | team.a | + | team.b | + And "Alice" logs out + Scenario: spaces can be managed in the admin settings via the context menu Given "Admin" creates following users using API | id |