From 02e5315674a8583256b7209b07a80be266ebef9c Mon Sep 17 00:00:00 2001 From: Lukas Hirt Date: Wed, 4 Dec 2024 11:28:03 +0100 Subject: [PATCH] fix: pass only space as space prop to sidebar We've fixed the issue where any selected resource got passed to the sidebar as a space in Spaces page. Now only space resource with project will be passed as a space. --- ...ugfix-use-only-space-as-space-into-sidebar | 6 +++++ .../src/views/spaces/Projects.vue | 5 +++- .../tests/unit/views/spaces/Projects.spec.ts | 25 ++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 changelog/unreleased/bugfix-use-only-space-as-space-into-sidebar diff --git a/changelog/unreleased/bugfix-use-only-space-as-space-into-sidebar b/changelog/unreleased/bugfix-use-only-space-as-space-into-sidebar new file mode 100644 index 00000000000..cff50e48f3e --- /dev/null +++ b/changelog/unreleased/bugfix-use-only-space-as-space-into-sidebar @@ -0,0 +1,6 @@ +Bugfix: Use only space resource with `driveType` "project" as space in sidebar + +We've fixed the issue where any selected resource got passed to the sidebar as a space in Spaces page. Now only space resource with `driveType` "project" will be passed as a space. + +https://github.com/owncloud/web/pull/12000 +https://github.com/owncloud/web/issues/11978 diff --git a/packages/web-app-files/src/views/spaces/Projects.vue b/packages/web-app-files/src/views/spaces/Projects.vue index 4d0b85283d1..d4dc2098a7a 100644 --- a/packages/web-app-files/src/views/spaces/Projects.vue +++ b/packages/web-app-files/src/views/spaces/Projects.vue @@ -275,7 +275,10 @@ export default defineComponent({ return spacesStore.spaces.filter(isProjectSpaceResource) || [] }) const selectedSpace = computed(() => { - if (unref(selectedResources).length === 1) { + if ( + unref(selectedResources).length === 1 && + isProjectSpaceResource(unref(selectedResources)[0]) + ) { return unref(selectedResources)[0] as ProjectSpaceResource } return null diff --git a/packages/web-app-files/tests/unit/views/spaces/Projects.spec.ts b/packages/web-app-files/tests/unit/views/spaces/Projects.spec.ts index f89eb1a6698..31febb6a944 100644 --- a/packages/web-app-files/tests/unit/views/spaces/Projects.spec.ts +++ b/packages/web-app-files/tests/unit/views/spaces/Projects.spec.ts @@ -13,7 +13,8 @@ import { mount, defaultComponentMocks, defaultStubs, - RouteLocation + RouteLocation, + PiniaMockOptions } from '@ownclouders/web-test-helpers' import { AbilityRule, SpaceResource } from '@ownclouders/web-client' import { @@ -120,6 +121,22 @@ describe('Projects view', () => { }) expect(wrapper.find('create-space-stub').exists()).toBeTruthy() }) + it('should not pass selected resource as space to sidebar when driveType is not "project"', () => { + const resource = mock({ id: 'selected-resource', driveType: 'personal' }) + const { wrapper } = getMountedWrapper({ + store: { resourcesStore: { resources: [resource], selectedIds: ['selected-resource'] } } + }) + + expect(wrapper.vm.selectedSpace).toStrictEqual(null) + }) + it('should pass selected resource as space to sidebar when driveType is "project"', () => { + const resource = mock({ id: 'selected-resource', driveType: 'project' }) + const { wrapper } = getMountedWrapper({ + store: { resourcesStore: { resources: [resource], selectedIds: ['selected-resource'] } } + }) + + expect(wrapper.vm.selectedSpace.id).toStrictEqual('selected-resource') + }) }) function getMountedWrapper({ @@ -127,15 +144,17 @@ function getMountedWrapper({ spaces = [], abilities = [], stubAppBar = true, - includeDisabled = false + includeDisabled = false, + store = {} }: { mocks?: Record spaces?: SpaceResource[] abilities?: AbilityRule[] stubAppBar?: boolean includeDisabled?: boolean + store?: PiniaMockOptions } = {}) { - const plugins = defaultPlugins({ abilities, piniaOptions: { spacesState: { spaces } } }) + const plugins = defaultPlugins({ abilities, piniaOptions: { spacesState: { spaces }, ...store } }) vi.mocked(queryItemAsString).mockImplementation(() => includeDisabled.toString())