From 42ef548f02b857dc4675ebcbd2acc4158d0296ce Mon Sep 17 00:00:00 2001 From: Qxisylolo Date: Fri, 8 Nov 2024 15:14:02 +0800 Subject: [PATCH 1/5] add tests for deletion Signed-off-by: Qxisylolo --- .../mds_workspace_delete.spec.js | 176 ++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js new file mode 100644 index 000000000..694a338da --- /dev/null +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js @@ -0,0 +1,176 @@ +/* + * Copyright OpenSearch Contributors + * SPDX-License-Identifier: Apache-2.0 + */ + +import { MiscUtils } from '@opensearch-dashboards-test/opensearch-dashboards-test-library'; +const miscUtils = new MiscUtils(cy); +const workspace1Name = 'test_workspace_320sdfouAz'; +let workspace1Description = 'This is a workspace1 description.'; +const workspace2Name = 'test_workspace_321sdfouAz'; +let workspace2Description = 'This is a workspace2 description.'; + +let workspace1Id; +let workspace2Id; + +if (Cypress.env('WORKSPACE_ENABLED')) { + describe('Delete Workspace(s) in 2 ways in workspace list page', () => { + before(() => { + Cypress.config('defaultCommandTimeout', 60000); + cy.deleteAllWorkspaces(); + }); + beforeEach(() => { + // Visit workspace list page + miscUtils.visitPage(`/app/workspace_list`); + cy.createWorkspace({ + name: workspace1Name, + description: workspace1Description, + features: ['workspace_detail', 'use-case-observability'], + settings: { + permissions: { + library_write: { users: ['%me%'] }, + write: { users: ['%me%'] }, + }, + }, + }).then((value) => { + workspace1Id = value; + cy.intercept('DELETE', `/api/workspaces/${workspace1Id}`).as( + 'deleteWorkspace1Request' + ); + }); + + cy.createWorkspace({ + name: workspace2Name, + description: workspace2Description, + features: ['workspace_detail', 'use-case-search'], + settings: { + permissions: { + library_write: { users: ['%me%'] }, + write: { users: ['%me%'] }, + }, + }, + }).then((value) => { + workspace2Id = value; + cy.intercept('DELETE', `/api/workspaces/${workspace2Id}`).as( + 'deleteWorkspace2Request' + ); + }); + }); + + afterEach(() => { + cy.deleteAllWorkspaces(); + }); + + describe('delete a workspace successfully using action buttons', () => { + it('should successfully load delete button and show delete modal when clicking action button', () => { + cy.contains(workspace1Name).should('be.visible'); + cy.getElementByTestId('euiCollapsedItemActionsButton').first().click(); + cy.getElementByTestId('workspace-list-delete-icon').should( + 'be.visible' + ); + cy.getElementByTestId('workspace-list-delete-icon').click(); + cy.contains('Delete workspace').should('be.visible'); + cy.contains( + 'The following workspace will be permanently deleted. This action cannot be undone' + ).should('be.visible'); + cy.contains(workspace1Name).should('be.visible'); + cy.getElementByTestId('delete-workspace-modal-input').type('delete'); + cy.getElementByTestId('delete-workspace-modal-confirm').click(); + cy.wait('@deleteWorkspace1Request').then((interception) => { + expect(interception.response.statusCode).to.equal(200); + }); + cy.location('pathname').should('include', 'app/workspace_list'); + cy.contains('Delete workspace successfully').should('be.visible'); + cy.contains(workspace1Name).should('not.exist'); + }); + }); + + describe('delete workspace(s) successfully using multi-deletion button', () => { + it('should successfully show multi-deletion button and perform deletion when choosing one workspace', () => { + cy.contains(workspace1Name).should('be.visible'); + cy.get('[data-test-subj^="checkboxSelectRow"]').first().click(); + cy.getElementByTestId('multi-deletion-button').should('be.visible'); + cy.getElementByTestId('multi-deletion-button').click(); + cy.contains('Delete workspace').should('be.visible'); + cy.contains( + 'The following workspace will be permanently deleted. This action cannot be undone' + ).should('be.visible'); + cy.contains(workspace1Name).should('be.visible'); + cy.getElementByTestId('delete-workspace-modal-input').type('delete'); + cy.getElementByTestId('delete-workspace-modal-confirm').click(); + cy.wait('@deleteWorkspace1Request').then((interception) => { + expect(interception.response.statusCode).to.equal(200); + }); + cy.location('pathname').should('include', 'app/workspace_list'); + cy.contains('Delete workspace successfully').should('be.visible'); + cy.contains(workspace1Name).should('not.exist'); + }); + + it('should successfully delete all', () => { + cy.contains(workspace1Name).should('be.visible'); + cy.contains(workspace2Name).should('be.visible'); + cy.getElementByTestId('checkboxSelectAll').click(); + cy.getElementByTestId('multi-deletion-button').should('be.visible'); + cy.getElementByTestId('multi-deletion-button').click(); + cy.contains('Delete workspace').should('be.visible'); + cy.contains( + 'The following workspace will be permanently deleted. This action cannot be undone' + ).should('be.visible'); + cy.contains(workspace1Name).should('be.visible'); + cy.contains(workspace2Name).should('be.visible'); + cy.getElementByTestId('delete-workspace-modal-input').type('delete'); + cy.getElementByTestId('delete-workspace-modal-confirm').click(); + cy.wait('@deleteWorkspace1Request').then((interception) => { + expect(interception.response.statusCode).to.equal(200); + }); + cy.location('pathname').should('include', 'app/workspace_list'); + cy.contains('Delete workspace successfully').should('be.visible'); + cy.contains(workspace1Name).should('not.exist'); + cy.contains(workspace2Name).should('not.exist'); + }); + }); + }); + + describe('Workspace deletion in workspace detail page', () => { + before(() => { + cy.deleteWorkspaceByName(workspace1Name); + cy.createWorkspace({ + name: workspace1Name, + description: workspace1Description, + features: ['workspace_detail', 'use-case-observability'], + settings: { + permissions: { + library_write: { users: ['%me%'] }, + write: { users: ['%me%'] }, + }, + }, + }).then((value) => { + workspace1Id = value; + }); + }); + + beforeEach(() => { + cy.intercept( + 'DELETE', + `/w/${workspace1Id}/api/workspaces/${workspace1Id}` + ).as('deleteWorkspace1Request'); + miscUtils.visitPage(`w/${workspace1Id}/app/workspace_detail`); + }); + + it('should delete workspace in workspace detail page', () => { + cy.getElementByTestId('workspace-detail-delete-button').click(); + cy.contains('Delete workspace').should('be.visible'); + cy.contains(workspace1Name).should('be.visible'); + cy.getElementByTestId('delete-workspace-modal-input').type( + workspace1Name + ); + cy.getElementByTestId('delete-workspace-modal-confirm').click(); + cy.wait('@deleteWorkspace1Request').then((interception) => { + expect(interception.response.statusCode).to.equal(200); + }); + cy.contains('Delete workspace successfully').should('be.visible'); + cy.location('pathname').should('include', 'app/workspace_list'); + cy.contains(workspace1Name).should('not.exist'); + }); + }); +} From 9b6736137b3b036bdfc349bb5171664963096c54 Mon Sep 17 00:00:00 2001 From: Qxisylolo Date: Fri, 8 Nov 2024 16:11:54 +0800 Subject: [PATCH 2/5] resolve comments Signed-off-by: Qxisylolo --- .../workspace-plugin/mds_workspace_delete.spec.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js index 694a338da..50e6b1b1e 100644 --- a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js @@ -25,7 +25,7 @@ if (Cypress.env('WORKSPACE_ENABLED')) { cy.createWorkspace({ name: workspace1Name, description: workspace1Description, - features: ['workspace_detail', 'use-case-observability'], + features: ['use-case-observability'], settings: { permissions: { library_write: { users: ['%me%'] }, @@ -42,7 +42,7 @@ if (Cypress.env('WORKSPACE_ENABLED')) { cy.createWorkspace({ name: workspace2Name, description: workspace2Description, - features: ['workspace_detail', 'use-case-search'], + features: ['use-case-search'], settings: { permissions: { library_write: { users: ['%me%'] }, @@ -64,7 +64,11 @@ if (Cypress.env('WORKSPACE_ENABLED')) { describe('delete a workspace successfully using action buttons', () => { it('should successfully load delete button and show delete modal when clicking action button', () => { cy.contains(workspace1Name).should('be.visible'); - cy.getElementByTestId('euiCollapsedItemActionsButton').first().click(); + cy.getElementByTestId(`checkboxSelectRow-${workspace1Id}`) + .parents('tr') + .within(() => { + cy.getElementByTestId('euiCollapsedItemActionsButton').click(); + }); cy.getElementByTestId('workspace-list-delete-icon').should( 'be.visible' ); @@ -88,7 +92,7 @@ if (Cypress.env('WORKSPACE_ENABLED')) { describe('delete workspace(s) successfully using multi-deletion button', () => { it('should successfully show multi-deletion button and perform deletion when choosing one workspace', () => { cy.contains(workspace1Name).should('be.visible'); - cy.get('[data-test-subj^="checkboxSelectRow"]').first().click(); + cy.getElementByTestId(`checkboxSelectRow-${workspace1Id}`).click(); cy.getElementByTestId('multi-deletion-button').should('be.visible'); cy.getElementByTestId('multi-deletion-button').click(); cy.contains('Delete workspace').should('be.visible'); @@ -137,7 +141,7 @@ if (Cypress.env('WORKSPACE_ENABLED')) { cy.createWorkspace({ name: workspace1Name, description: workspace1Description, - features: ['workspace_detail', 'use-case-observability'], + features: ['use-case-observability'], settings: { permissions: { library_write: { users: ['%me%'] }, From be60989d2c62d34ff2a9e82186b6167790baf3c0 Mon Sep 17 00:00:00 2001 From: Qxisylolo Date: Mon, 18 Nov 2024 11:35:17 +0800 Subject: [PATCH 3/5] new update Signed-off-by: Qxisylolo --- .../workspace-plugin/mds_workspace_delete.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js index 50e6b1b1e..1c8d120c1 100644 --- a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js @@ -16,7 +16,6 @@ let workspace2Id; if (Cypress.env('WORKSPACE_ENABLED')) { describe('Delete Workspace(s) in 2 ways in workspace list page', () => { before(() => { - Cypress.config('defaultCommandTimeout', 60000); cy.deleteAllWorkspaces(); }); beforeEach(() => { From 94fa4af955e0478b9614850de78f27834992cb82 Mon Sep 17 00:00:00 2001 From: Qxisylolo Date: Mon, 18 Nov 2024 11:57:11 +0800 Subject: [PATCH 4/5] new update Signed-off-by: Qxisylolo --- .../workspace-plugin/mds_workspace_delete.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js index 1c8d120c1..76b6a6374 100644 --- a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js @@ -157,6 +157,7 @@ if (Cypress.env('WORKSPACE_ENABLED')) { 'DELETE', `/w/${workspace1Id}/api/workspaces/${workspace1Id}` ).as('deleteWorkspace1Request'); + // Visit workspace detail page miscUtils.visitPage(`w/${workspace1Id}/app/workspace_detail`); }); From 74ffac77d4a5116c878ddf164cc8bef02bcfd3d3 Mon Sep 17 00:00:00 2001 From: Qxisylolo Date: Mon, 18 Nov 2024 13:05:47 +0800 Subject: [PATCH 5/5] revert lines Signed-off-by: Qxisylolo --- .../workspace-plugin/mds_workspace_delete.spec.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js index 76b6a6374..0358f9b20 100644 --- a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_delete.spec.js @@ -16,11 +16,10 @@ let workspace2Id; if (Cypress.env('WORKSPACE_ENABLED')) { describe('Delete Workspace(s) in 2 ways in workspace list page', () => { before(() => { - cy.deleteAllWorkspaces(); + cy.deleteWorkspaceByName(workspace1Name); + cy.deleteWorkspaceByName(workspace2Name); }); beforeEach(() => { - // Visit workspace list page - miscUtils.visitPage(`/app/workspace_list`); cy.createWorkspace({ name: workspace1Name, description: workspace1Description, @@ -54,10 +53,13 @@ if (Cypress.env('WORKSPACE_ENABLED')) { 'deleteWorkspace2Request' ); }); + // Visit workspace list page + miscUtils.visitPage(`/app/workspace_list`); }); afterEach(() => { - cy.deleteAllWorkspaces(); + cy.deleteWorkspaceByName(workspace1Name); + cy.deleteWorkspaceByName(workspace2Name); }); describe('delete a workspace successfully using action buttons', () => {