Skip to content

Commit

Permalink
Add different access level test cases in workspace update flow (#1630) (
Browse files Browse the repository at this point in the history
#1657)

* Add test case work different access level in workspace update

Signed-off-by: Lin Wang <[email protected]>

* Update cypress/integration/core-opensearch-dashboards/opensearch-dashboards/workspace-plugin/mds_workspace_detail.spec.js

Co-authored-by: Yulong Ruan <[email protected]>
Signed-off-by: Lin Wang <[email protected]>

* Address PR comments

Signed-off-by: Lin Wang <[email protected]>

* Replace kibanaserver with self created workspace test user

Signed-off-by: Lin Wang <[email protected]>

* Delete role after test finish

Signed-off-by: Lin Wang <[email protected]>

* Delete role mapping

Signed-off-by: Lin Wang <[email protected]>

---------

Signed-off-by: Lin Wang <[email protected]>
Signed-off-by: SuZhou-Joe <[email protected]>
Co-authored-by: Yulong Ruan <[email protected]>
Co-authored-by: SuZhou-Joe <[email protected]>
(cherry picked from commit 7e05a4f)

Co-authored-by: Lin Wang <[email protected]>
  • Loading branch information
opensearch-trigger-bot[bot] and wanglam authored Nov 22, 2024
1 parent 449b99d commit 22c8e32
Show file tree
Hide file tree
Showing 4 changed files with 165 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"cluster_permissions": ["*"],
"index_permissions": [
{
"index_patterns": ["*"],
"fls": [],
"masked_fields": [],
"allowed_actions": ["*"]
}
],
"tenant_permissions": [
{
"tenant_patterns": ["*"],
"allowed_actions": ["kibana_all_write"]
}
]
}
"cluster_permissions": ["*"],
"index_permissions": [
{
"index_patterns": ["*"],
"fls": [],
"masked_fields": [],
"allowed_actions": ["*"]
}
],
"tenant_permissions": [
{
"tenant_patterns": ["*"],
"allowed_actions": ["kibana_all_write"]
}
]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"users": ["workspace-test"]
}
"users": ["workspace-test"]
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"password": "testUserPassword123"
}
"password": "testUserPassword123"
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@
*/

import { MiscUtils } from '@opensearch-dashboards-test/opensearch-dashboards-test-library';
import { ADMIN_AUTH } from '../../../../utils/commands';
import workspaceTestUser from '../../../../fixtures/dashboard/opensearch_dashboards/workspace/workspaceTestUser.json';
import workspaceTestRole from '../../../../fixtures/dashboard/opensearch_dashboards/workspace/workspaceTestRole.json';
import workspaceTestRoleMapping from '../../../../fixtures/dashboard/opensearch_dashboards/workspace/workspaceTestRoleMapping.json';

const NONE_DASHBOARDS_ADMIN_USERNAME = 'workspace-test';
const WORKSPACE_TEST_ROLE_NAME = 'workspace-test-role';

const miscUtils = new MiscUtils(cy);
const workspaceName = 'test_workspace_320sdfouAz';
Expand All @@ -14,6 +21,17 @@ let workspaceFeatures = ['use-case-observability'];
if (Cypress.env('WORKSPACE_ENABLED')) {
describe('Workspace detail', () => {
before(() => {
if (Cypress.env('SECURITY_ENABLED')) {
cy.createInternalUser(
NONE_DASHBOARDS_ADMIN_USERNAME,
workspaceTestUser
);
cy.createRole(WORKSPACE_TEST_ROLE_NAME, workspaceTestRole);
cy.createRoleMapping(
WORKSPACE_TEST_ROLE_NAME,
workspaceTestRoleMapping
);
}
cy.deleteWorkspaceByName(workspaceName);
cy.createWorkspace({
name: workspaceName,
Expand All @@ -23,26 +41,31 @@ if (Cypress.env('WORKSPACE_ENABLED')) {
permissions: {
library_write: { users: ['%me%'] },
write: { users: ['%me%'] },
library_read: { users: [NONE_DASHBOARDS_ADMIN_USERNAME] },
read: { users: [NONE_DASHBOARDS_ADMIN_USERNAME] },
},
},
}).then((value) => (workspaceId = value));
});

beforeEach(() => {
// Visit workspace update page
miscUtils.visitPage(`w/${workspaceId}/app/workspace_detail`);

cy.intercept('PUT', `/w/${workspaceId}/api/workspaces/${workspaceId}`).as(
'updateWorkspaceRequest'
);
});

after(() => {
cy.deleteWorkspaceById(workspaceId);
if (Cypress.env('SECURITY_ENABLED')) {
cy.deleteRoleMapping(WORKSPACE_TEST_ROLE_NAME);
cy.deleteInternalUser(NONE_DASHBOARDS_ADMIN_USERNAME);
cy.deleteRole(WORKSPACE_TEST_ROLE_NAME);
}
});

describe('workspace details', () => {
beforeEach(() => {
// Visit workspace update page
miscUtils.visitPage(`w/${workspaceId}/app/workspace_detail`);

cy.intercept(
'PUT',
`/w/${workspaceId}/api/workspaces/${workspaceId}`
).as('updateWorkspaceRequest');
cy.getElementByTestId('workspaceForm-workspaceDetails-edit').click();
});

Expand Down Expand Up @@ -144,5 +167,118 @@ if (Cypress.env('WORKSPACE_ENABLED')) {
});
});
});

if (
Cypress.env('SAVED_OBJECTS_PERMISSION_ENABLED') &&
Cypress.env('SECURITY_ENABLED')
) {
describe('update with different workspace access level', () => {
const originalUser = ADMIN_AUTH.username;
const originalPassword = ADMIN_AUTH.password;
beforeEach(() => {
ADMIN_AUTH.username = originalUser;
ADMIN_AUTH.password = originalPassword;
});
after(() => {
ADMIN_AUTH.newUser = originalUser;
ADMIN_AUTH.newPassword = originalPassword;
});
it('should not able to update workspace meta for non workspace admin', () => {
ADMIN_AUTH.newUser = NONE_DASHBOARDS_ADMIN_USERNAME;
ADMIN_AUTH.newPassword = workspaceTestUser.password;

// Visit workspace list page
miscUtils.visitPage(`/app/workspace_list`);

cy.getElementByTestId('headerApplicationTitle')
.contains('Workspaces')
.should('be.exist');

cy.get('[role="main"]').contains(workspaceName).should('be.exist');

cy.get(`#${workspaceId}-actions`).click();
cy.getElementByTestId('workspace-list-edit-icon').click();

cy.getElementByTestId('workspaceForm-workspaceDetails-edit').click();

cy.getElementByTestId(
'workspaceForm-workspaceDetails-descriptionInputText'
).clear({
force: true,
});

cy.getElementByTestId('workspaceForm-bottomBar-updateButton').click({
force: true,
});
cy.getElementByTestId('globalToastList')
.contains('Invalid workspace permission')
.should('be.exist');
});

it('should able to update workspace meta for workspace admin', () => {
const kibanaServerAdminWorkspace = {
name: 'kibana-server-workspace-admin',
features: ['use-case-all'],
settings: {
permissions: {
library_write: { users: [NONE_DASHBOARDS_ADMIN_USERNAME] },
write: { users: [NONE_DASHBOARDS_ADMIN_USERNAME] },
},
},
};
cy.deleteWorkspaceByName(kibanaServerAdminWorkspace.name);
cy.createWorkspace(kibanaServerAdminWorkspace)
.as('adminWorkspaceId')
.then(() => {
ADMIN_AUTH.newUser = NONE_DASHBOARDS_ADMIN_USERNAME;
ADMIN_AUTH.newPassword = workspaceTestUser.password;
});

// Visit workspace list page
miscUtils.visitPage(`/app/workspace_list`);

cy.getElementByTestId('headerApplicationTitle')
.contains('Workspaces')
.should('be.exist');

cy.get('[role="main"]')
.contains(kibanaServerAdminWorkspace.name)
.should('be.exist');

cy.get('@adminWorkspaceId').then((adminWorkspaceId) => {
cy.get(`#${adminWorkspaceId}-actions`).click();
});
cy.getElementByTestId('workspace-list-edit-icon').click();

cy.getElementByTestId('workspaceForm-workspaceDetails-edit').click();

cy.getElementByTestId(
'workspaceForm-workspaceDetails-descriptionInputText'
).clear({
force: true,
});

cy.getElementByTestId(
'workspaceForm-workspaceDetails-descriptionInputText'
).type('This is a new workspace description.');

cy.getElementByTestId('workspaceForm-bottomBar-updateButton').click({
force: true,
});
cy.getElementByTestId('globalToastList')
.contains('Update workspace successfully')
.should('be.exist');

cy.get('@adminWorkspaceId').then((adminWorkspaceId) => {
const expectedWorkspace = {
...kibanaServerAdminWorkspace,
description: 'This is a new workspace description.',
};
cy.checkWorkspace(adminWorkspaceId, expectedWorkspace);
cy.deleteWorkspaceById(adminWorkspaceId);
});
});
});
}
});
}

0 comments on commit 22c8e32

Please sign in to comment.