mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[Security Solution] Preparing Cypress for SAML changes (#172140)
This commit is contained in:
parent
2a332bccf9
commit
12a8e8b918
19 changed files with 33 additions and 77 deletions
|
@ -247,7 +247,7 @@ describe.skip('Changing alert status', { tags: ['@ess', '@serverless'] }, () =>
|
|||
deleteAlertsAndRules();
|
||||
createRule(getNewRule());
|
||||
login(ROLES.reader);
|
||||
visit(ALERTS_URL, { role: ROLES.reader });
|
||||
visit(ALERTS_URL);
|
||||
waitForAlertsToPopulate();
|
||||
});
|
||||
it('should not allow users to change a single alert status', () => {
|
||||
|
|
|
@ -25,7 +25,7 @@ import {
|
|||
|
||||
const loadPageAsPlatformEngineerUser = (url: string) => {
|
||||
login(ROLES.soc_manager);
|
||||
visit(url, { role: ROLES.soc_manager });
|
||||
visit(url);
|
||||
waitForPageTitleToBeShown();
|
||||
};
|
||||
|
||||
|
|
|
@ -25,13 +25,13 @@ import { ruleDetailsUrl } from '../../../urls/rule_details';
|
|||
|
||||
const loadPageAsReadOnlyUser = (url: string) => {
|
||||
login(ROLES.t1_analyst);
|
||||
visit(url, { role: ROLES.t1_analyst });
|
||||
visit(url);
|
||||
waitForPageTitleToBeShown();
|
||||
};
|
||||
|
||||
const loadPageAsPlatformEngineer = (url: string) => {
|
||||
login(ROLES.platform_engineer);
|
||||
visit(url, { role: ROLES.platform_engineer });
|
||||
visit(url);
|
||||
waitForPageTitleToBeShown();
|
||||
};
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ describe('All rules - read only', { tags: ['@ess', '@serverless', '@skipInServer
|
|||
|
||||
beforeEach(() => {
|
||||
login(ROLES.t1_analyst);
|
||||
visitRulesManagementTable(ROLES.t1_analyst);
|
||||
visitRulesManagementTable();
|
||||
cy.get(RULE_NAME).should('have.text', getNewRule().name);
|
||||
});
|
||||
|
||||
|
|
|
@ -57,12 +57,12 @@ const RULE_2 = createRuleAssetSavedObject({
|
|||
|
||||
const loadPageAsReadOnlyUser = (url: string) => {
|
||||
login(ROLES.t1_analyst);
|
||||
visit(url, { role: ROLES.t1_analyst });
|
||||
visit(url);
|
||||
};
|
||||
|
||||
const loginPageAsWriteAuthorizedUser = (url: string) => {
|
||||
login(ROLES.t3_analyst);
|
||||
visit(url, { role: ROLES.t3_analyst });
|
||||
visit(url);
|
||||
};
|
||||
|
||||
describe(
|
||||
|
|
|
@ -148,7 +148,7 @@ describe(
|
|||
context('Restricted action privileges', () => {
|
||||
it("User with no privileges can't add rule actions", () => {
|
||||
login(ROLES.hunter_no_actions);
|
||||
visitRulesManagementTable(ROLES.hunter_no_actions);
|
||||
visitRulesManagementTable();
|
||||
|
||||
expectManagementTableRules([
|
||||
ruleNameToAssert,
|
||||
|
|
|
@ -5,31 +5,24 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import { loginWithUser } from '../../../tasks/login';
|
||||
import { visitWithUser } from '../../../tasks/navigation';
|
||||
import { ROLES } from '@kbn/security-solution-plugin/common/test';
|
||||
|
||||
import { hostsUrl } from '../../../urls/navigation';
|
||||
import { postDataView } from '../../../tasks/api_calls/common';
|
||||
import {
|
||||
createUsersAndRoles,
|
||||
secReadCasesAll,
|
||||
secReadCasesAllUser,
|
||||
} from '../../../tasks/privileges';
|
||||
import { TOASTER } from '../../../screens/configure_cases';
|
||||
import { visit } from '../../../tasks/navigation';
|
||||
import { login } from '../../../tasks/login';
|
||||
|
||||
const usersToCreate = [secReadCasesAllUser];
|
||||
const rolesToCreate = [secReadCasesAll];
|
||||
const dataViews = ['auditbeat-*,fakebeat-*', 'auditbeat-*,*beat*,siem-read*,.kibana*,fakebeat-*'];
|
||||
|
||||
describe('Sourcerer permissions', { tags: ['@ess', '@skipInServerless'] }, () => {
|
||||
describe('Sourcerer permissions', { tags: ['@ess', '@brokenInServerless'] }, () => {
|
||||
before(() => {
|
||||
dataViews.forEach((dataView: string) => postDataView(dataView));
|
||||
createUsersAndRoles(usersToCreate, rolesToCreate);
|
||||
});
|
||||
|
||||
it(`role(s) ${secReadCasesAllUser.roles.join()} shows error when user does not have permissions`, () => {
|
||||
loginWithUser(secReadCasesAllUser);
|
||||
visitWithUser(hostsUrl('allHosts'), secReadCasesAllUser);
|
||||
it(`role Hunter No actions shows error when user does not have permissions`, () => {
|
||||
login(ROLES.hunter_no_actions);
|
||||
visit(hostsUrl('allHosts'));
|
||||
cy.get(TOASTER).should('have.text', 'Write role required to generate data');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -16,7 +16,7 @@ describe('value list permissions', { tags: ['@ess', '@skipInServerless'] }, () =
|
|||
describe('user with restricted access role', () => {
|
||||
it('Does not allow a t1 analyst user to upload a value list', () => {
|
||||
login(ROLES.t1_analyst);
|
||||
visit(RULES_MANAGEMENT_URL, { role: ROLES.t1_analyst });
|
||||
visit(RULES_MANAGEMENT_URL);
|
||||
cy.get(VALUE_LISTS_MODAL_ACTIVATOR).should('have.attr', 'disabled');
|
||||
});
|
||||
});
|
||||
|
|
|
@ -18,7 +18,7 @@ import { ENTITY_ANALYTICS_MANAGEMENT_URL } from '../../urls/navigation';
|
|||
|
||||
const loadPageAsUserWithNoPrivileges = () => {
|
||||
login(ROLES.no_risk_engine_privileges);
|
||||
visit(ENTITY_ANALYTICS_MANAGEMENT_URL, { role: ROLES.no_risk_engine_privileges });
|
||||
visit(ENTITY_ANALYTICS_MANAGEMENT_URL);
|
||||
};
|
||||
|
||||
// this test suite doesn't run on serverless because it requires a custom role
|
||||
|
|
|
@ -55,7 +55,7 @@ describe('Exceptions viewer read only', { tags: ['@ess'] }, () => {
|
|||
});
|
||||
|
||||
login(ROLES.t1_analyst);
|
||||
visitRulesManagementTable(ROLES.t1_analyst);
|
||||
visitRulesManagementTable();
|
||||
goToRuleDetailsOf('Test exceptions rule');
|
||||
goToExceptionsTab();
|
||||
});
|
||||
|
|
|
@ -32,7 +32,7 @@ describe('Shared exception lists - read only', { tags: ['@ess', '@skipInServerle
|
|||
createExceptionList(getExceptionList(), getExceptionList().list_id);
|
||||
|
||||
login(ROLES.t1_analyst);
|
||||
visit(EXCEPTIONS_URL, { role: ROLES.t1_analyst });
|
||||
visit(EXCEPTIONS_URL);
|
||||
|
||||
// Using cy.contains because we do not care about the exact text,
|
||||
// just checking number of lists shown
|
||||
|
|
|
@ -20,7 +20,7 @@ import { LOADING_INDICATOR } from '../../../screens/security_header';
|
|||
|
||||
const loadDetectionsPage = (role: SecurityRoleName) => {
|
||||
login(role);
|
||||
visit(ALERTS_URL, { role });
|
||||
visit(ALERTS_URL);
|
||||
waitForAlertsToPopulate();
|
||||
};
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import {
|
|||
filterStatusOpen,
|
||||
} from '../../../tasks/create_new_case';
|
||||
import { login, loginWithUser } from '../../../tasks/login';
|
||||
import { visitWithUser } from '../../../tasks/navigation';
|
||||
import { visit } from '../../../tasks/navigation';
|
||||
import {
|
||||
createUsersAndRoles,
|
||||
deleteUsersAndRoles,
|
||||
|
@ -66,7 +66,7 @@ describe('Cases privileges', { tags: ['@ess'] }, () => {
|
|||
for (const user of [secAllUser, secReadCasesAllUser, secAllCasesNoDeleteUser]) {
|
||||
it(`User ${user.username} with role(s) ${user.roles.join()} can create a case`, () => {
|
||||
loginWithUser(user);
|
||||
visitWithUser(CASES_URL, user);
|
||||
visit(CASES_URL);
|
||||
goToCreateNewCase();
|
||||
fillCasesMandatoryfields(testCase);
|
||||
createCase();
|
||||
|
@ -80,7 +80,7 @@ describe('Cases privileges', { tags: ['@ess'] }, () => {
|
|||
for (const user of [secAllCasesOnlyReadDeleteUser]) {
|
||||
it(`User ${user.username} with role(s) ${user.roles.join()} cannot create a case`, () => {
|
||||
loginWithUser(user);
|
||||
visitWithUser(CASES_URL, user);
|
||||
visit(CASES_URL);
|
||||
cy.get(ALL_CASES_CREATE_NEW_CASE_BTN).should('not.exist');
|
||||
});
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ describe('Timelines', (): void => {
|
|||
context('Privileges: READ', { tags: '@ess' }, () => {
|
||||
beforeEach(() => {
|
||||
login(ROLES.t1_analyst);
|
||||
visitWithTimeRange(OVERVIEW_URL, { role: ROLES.t1_analyst });
|
||||
visitWithTimeRange(OVERVIEW_URL);
|
||||
});
|
||||
|
||||
it('should not be able to create/update timeline ', () => {
|
||||
|
|
|
@ -5,13 +5,12 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { SecurityRoleName } from '@kbn/security-solution-plugin/common/test';
|
||||
import { BACK_TO_RULE_DETAILS, EDIT_SUBMIT_BUTTON } from '../screens/edit_rule';
|
||||
import { editRuleUrl } from '../urls/edit_rule';
|
||||
import { visit } from './navigation';
|
||||
|
||||
export function visitEditRulePage(ruleId: string, role?: SecurityRoleName): void {
|
||||
visit(editRuleUrl(ruleId), { role });
|
||||
export function visitEditRulePage(ruleId: string): void {
|
||||
visit(editRuleUrl(ruleId));
|
||||
}
|
||||
|
||||
export const saveEditedRule = () => {
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
*/
|
||||
|
||||
import * as yaml from 'js-yaml';
|
||||
import type { UrlObject } from 'url';
|
||||
import Url from 'url';
|
||||
import { LoginState } from '@kbn/security-plugin/common/login_state';
|
||||
import type { SecurityRoleName } from '@kbn/security-solution-plugin/common/test';
|
||||
import { KNOWN_SERVERLESS_ROLE_DEFINITIONS } from '@kbn/security-solution-plugin/common/test';
|
||||
|
@ -65,29 +63,6 @@ export const loginWithUser = (user: User): void => {
|
|||
loginWithUsernameAndPassword(user.username, user.password);
|
||||
};
|
||||
|
||||
/**
|
||||
* cy.visit will default to the baseUrl which uses the default kibana test user
|
||||
* This function will override that functionality in cy.visit by building the baseUrl
|
||||
* directly from the environment variables set up in x-pack/test/security_solution_cypress/runner.ts
|
||||
*
|
||||
* @param role string role/user to log in with
|
||||
* @param route string route to visit
|
||||
*/
|
||||
export const getUrlWithRoute = (role: SecurityRoleName, route: string): string => {
|
||||
const url = Cypress.config().baseUrl;
|
||||
const kibana = new URL(String(url));
|
||||
const theUrl = `${Url.format({
|
||||
auth: `${role}:changeme`,
|
||||
username: role,
|
||||
password: 'changeme',
|
||||
protocol: kibana.protocol.replace(':', ''),
|
||||
hostname: kibana.hostname,
|
||||
port: kibana.port,
|
||||
} as UrlObject)}${route.startsWith('/') ? '' : '/'}${route}`;
|
||||
cy.log(`origin: ${theUrl}`);
|
||||
return theUrl;
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds a URL with basic auth using the passed in user.
|
||||
*
|
||||
|
|
|
@ -8,34 +8,24 @@
|
|||
import { encode } from '@kbn/rison';
|
||||
|
||||
import { NEW_FEATURES_TOUR_STORAGE_KEYS } from '@kbn/security-solution-plugin/common/constants';
|
||||
import type { SecurityRoleName } from '@kbn/security-solution-plugin/common/test';
|
||||
import { GET_STARTED_URL, hostDetailsUrl, userDetailsUrl } from '../urls/navigation';
|
||||
import { constructUrlWithUser, getUrlWithRoute, User } from './login';
|
||||
|
||||
export const visit = (
|
||||
url: string,
|
||||
options?: {
|
||||
visitOptions?: Partial<Cypress.VisitOptions>;
|
||||
role?: SecurityRoleName;
|
||||
}
|
||||
) => {
|
||||
cy.visit(options?.role ? getUrlWithRoute(options.role, url) : url, {
|
||||
cy.visit(url, {
|
||||
onBeforeLoad: disableNewFeaturesTours,
|
||||
...options?.visitOptions,
|
||||
});
|
||||
};
|
||||
|
||||
export const visitWithUser = (url: string, user: User) => {
|
||||
cy.visit(constructUrlWithUser(user, url), {
|
||||
onBeforeLoad: disableNewFeaturesTours,
|
||||
});
|
||||
};
|
||||
|
||||
export const visitWithTimeRange = (
|
||||
url: string,
|
||||
options?: {
|
||||
visitOptions?: Partial<Cypress.VisitOptions>;
|
||||
role?: SecurityRoleName;
|
||||
}
|
||||
) => {
|
||||
const timerangeConfig = {
|
||||
|
@ -57,7 +47,7 @@ export const visitWithTimeRange = (
|
|||
},
|
||||
});
|
||||
|
||||
cy.visit(options?.role ? getUrlWithRoute(options.role, url) : url, {
|
||||
cy.visit(url, {
|
||||
...options,
|
||||
qs: {
|
||||
...options?.visitOptions?.qs,
|
||||
|
@ -74,9 +64,9 @@ export const visitWithTimeRange = (
|
|||
});
|
||||
};
|
||||
|
||||
export const visitTimeline = (timelineId: string, role?: SecurityRoleName) => {
|
||||
export const visitTimeline = (timelineId: string) => {
|
||||
const route = `/app/security/timelines?timeline=(id:'${timelineId}',isOpen:!t)`;
|
||||
cy.visit(role ? getUrlWithRoute(role, route) : route, {
|
||||
cy.visit(route, {
|
||||
onBeforeLoad: disableNewFeaturesTours,
|
||||
});
|
||||
};
|
||||
|
|
|
@ -51,7 +51,7 @@ interface VisitRuleDetailsPageOptions {
|
|||
}
|
||||
|
||||
export function visitRuleDetailsPage(ruleId: string, options?: VisitRuleDetailsPageOptions): void {
|
||||
visit(ruleDetailsUrl(ruleId, options?.tab), { role: options?.role });
|
||||
visit(ruleDetailsUrl(ruleId, options?.tab));
|
||||
}
|
||||
|
||||
export const enablesRule = () => {
|
||||
|
|
|
@ -5,15 +5,14 @@
|
|||
* 2.0.
|
||||
*/
|
||||
|
||||
import type { SecurityRoleName } from '@kbn/security-solution-plugin/common/test';
|
||||
import { LAST_BREADCRUMB, RULE_MANAGEMENT_PAGE_BREADCRUMB } from '../screens/breadcrumbs';
|
||||
import { RULES_MANAGEMENT_URL } from '../urls/rules_management';
|
||||
import { resetRulesTableState } from './common';
|
||||
import { visit } from './navigation';
|
||||
|
||||
export function visitRulesManagementTable(role?: SecurityRoleName): void {
|
||||
export function visitRulesManagementTable(): void {
|
||||
resetRulesTableState(); // Clear persistent rules filter data before page loading
|
||||
visit(RULES_MANAGEMENT_URL, { role });
|
||||
visit(RULES_MANAGEMENT_URL);
|
||||
}
|
||||
|
||||
export function openRuleManagementPageViaBreadcrumbs(): void {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue