Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Backport 2.x] Add different access level test cases in workspace update flow #1657

Merged
merged 1 commit into from
Nov 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
});
});
});
}
});
}
Loading