From a289f3d06835fb037da8082c34b6a7e30246bd1a Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Tue, 14 Dec 2021 16:52:48 -0300 Subject: [PATCH] 18584: Fixes collection "Move to" action. Adds integration test. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- cypress/integration/collection.spec.js | 47 +++++++++++++++++++ .../collections/collection-move-actions.ts | 8 +++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/cypress/integration/collection.spec.js b/cypress/integration/collection.spec.js index 0ff26706..bd211b1a 100644 --- a/cypress/integration/collection.spec.js +++ b/cypress/integration/collection.spec.js @@ -595,6 +595,53 @@ describe('Collection panel tests', function () { }) }); + it('moves a collection to a different project', function () { + const collName = `Test Collection ${Math.floor(Math.random() * 999999)}`; + const projName = `Test Project ${Math.floor(Math.random() * 999999)}`; + const fileName = `Test_File_${Math.floor(Math.random() * 999999)}`; + + cy.createCollection(adminUser.token, { + name: collName, + owner_uuid: activeUser.user.uuid, + manifest_text: `. 37b51d194a7513e45b56f6524f2d51f2+3 0:3:${fileName}\n`, + }).as('testCollection'); + cy.createGroup(adminUser.token, { + name: projName, + group_class: 'project', + owner_uuid: activeUser.user.uuid, + }).as('testProject'); + + cy.getAll('@testCollection', '@testProject') + .then(function ([testCollection, testProject]) { + cy.loginAs(activeUser); + cy.goToPath(`/collections/${testCollection.uuid}`); + cy.get('[data-cy=collection-files-panel]').should('contain', fileName); + cy.get('[data-cy=collection-info-panel]') + .should('not.contain', projName) + .and('not.contain', testProject.uuid); + cy.get('[data-cy=collection-panel-options-btn]').click(); + cy.get('[data-cy=context-menu]').contains('Move to').click(); + cy.get('[data-cy=form-dialog]') + .should('contain', 'Move to') + .within(() => { + cy.get('[data-cy=projects-tree-home-tree-picker]') + .find('i') + .click(); + cy.get('[data-cy=projects-tree-home-tree-picker]') + .contains(projName) + .click(); + }); + cy.get('[data-cy=form-submit-btn]').click(); + cy.get('[data-cy=snackbar]') + .contains('Collection has been moved') + cy.get('[data-cy=collection-info-panel]') + .contains(projName).and('contain', testProject.uuid); + // Double check that the collection is in the project + cy.goToPath(`/projects/${testProject.uuid}`); + cy.get('[data-cy=project-panel]').should('contain', collName); + }); + }); + it('makes a copy of an existing collection', function() { const collName = `Test Collection ${Math.floor(Math.random() * 999999)}`; const copyName = `Copy of: ${collName}`; diff --git a/src/store/collections/collection-move-actions.ts b/src/store/collections/collection-move-actions.ts index d056b6e5..929f1612 100644 --- a/src/store/collections/collection-move-actions.ts +++ b/src/store/collections/collection-move-actions.ts @@ -14,6 +14,8 @@ import { MoveToFormDialogData } from 'store/move-to-dialog/move-to-dialog'; import { resetPickerProjectTree } from 'store/project-tree-picker/project-tree-picker-actions'; import { progressIndicatorActions } from "store/progress-indicator/progress-indicator-actions"; import { initProjectsTreePicker } from 'store/tree-picker/tree-picker-actions'; +import { getResource } from "store/resources/resources"; +import { CollectionResource } from "models/collection"; export const COLLECTION_MOVE_FORM_NAME = 'collectionMoveFormName'; @@ -28,13 +30,17 @@ export const openMoveCollectionDialog = (resource: { name: string, uuid: string export const moveCollection = (resource: MoveToFormDialogData) => async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { dispatch(startSubmit(COLLECTION_MOVE_FORM_NAME)); + let cachedCollection = getResource(resource.uuid)(getState().resources); try { dispatch(progressIndicatorActions.START_WORKING(COLLECTION_MOVE_FORM_NAME)); + if (!cachedCollection) { + cachedCollection = await services.collectionService.get(resource.uuid); + } const collection = await services.collectionService.update(resource.uuid, { ownerUuid: resource.ownerUuid }); dispatch(projectPanelActions.REQUEST_ITEMS()); dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_MOVE_FORM_NAME })); dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_MOVE_FORM_NAME)); - return collection; + return {...cachedCollection, ...collection}; } catch (e) { const error = getCommonResourceServiceError(e); if (error === CommonResourceServiceError.UNIQUE_NAME_VIOLATION) { -- 2.30.2