mirror of
https://github.com/empayre/fleet.git
synced 2024-11-07 09:18:59 +00:00
116 lines
3.4 KiB
TypeScript
116 lines
3.4 KiB
TypeScript
|
import '@testing-library/cypress/add-commands';
|
||
|
|
||
|
// ***********************************************
|
||
|
// This example commands.js shows you how to
|
||
|
// create various custom commands and overwrite
|
||
|
// existing commands.
|
||
|
//
|
||
|
// For more comprehensive examples of custom
|
||
|
// commands please read more here:
|
||
|
// https://on.cypress.io/custom-commands
|
||
|
// ***********************************************
|
||
|
//
|
||
|
//
|
||
|
// -- This is a parent command --
|
||
|
// Cypress.Commands.add("login", (email, password) => { ... })
|
||
|
//
|
||
|
//
|
||
|
// -- This is a child command --
|
||
|
// Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
|
||
|
//
|
||
|
//
|
||
|
// -- This is a dual command --
|
||
|
// Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
|
||
|
//
|
||
|
//
|
||
|
// -- This will overwrite an existing command --
|
||
|
// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
|
||
|
|
||
|
Cypress.Commands.add('setup', () => {
|
||
|
cy.exec('make e2e-reset-db e2e-setup', { timeout: 10000 });
|
||
|
});
|
||
|
|
||
|
Cypress.Commands.add('login', (username, password) => {
|
||
|
username ||= 'test';
|
||
|
password ||= 'admin123#';
|
||
|
cy.request('POST', '/api/v1/fleet/login', { username, password })
|
||
|
.then((resp) => {
|
||
|
window.localStorage.setItem('KOLIDE::auth_token', resp.body.token);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
Cypress.Commands.add('logout', () => {
|
||
|
cy.request({
|
||
|
url: '/api/v1/fleet/logout',
|
||
|
method: 'POST',
|
||
|
body: {},
|
||
|
auth: {
|
||
|
bearer: window.localStorage.getItem('KOLIDE::auth_token'),
|
||
|
},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
Cypress.Commands.add('setupSSO', (enable_idp_login = false) => {
|
||
|
const body = {
|
||
|
sso_settings: {
|
||
|
enable_sso: true,
|
||
|
enable_sso_idp_login: enable_idp_login,
|
||
|
entity_id: 'https://localhost:8080',
|
||
|
idp_name: 'SimpleSAML',
|
||
|
issuer_uri: 'http://localhost:8080/simplesaml/saml2/idp/SSOService.php',
|
||
|
metadata_url: 'http://localhost:9080/simplesaml/saml2/idp/metadata.php',
|
||
|
},
|
||
|
};
|
||
|
|
||
|
cy.request({
|
||
|
url: '/api/v1/fleet/config',
|
||
|
method: 'PATCH',
|
||
|
body,
|
||
|
auth: {
|
||
|
bearer: window.localStorage.getItem('KOLIDE::auth_token'),
|
||
|
},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
Cypress.Commands.add('loginSSO', () => {
|
||
|
// Note these requests set cookies that are required for the SSO flow to
|
||
|
// work properly. This is handled automatically by the browser.
|
||
|
cy.request({
|
||
|
method: 'GET',
|
||
|
url: 'http://localhost:9080/simplesaml/saml2/idp/SSOService.php?spentityid=https://localhost:8080',
|
||
|
followRedirect: false,
|
||
|
}).then((firstResponse) => {
|
||
|
const redirect = firstResponse.headers.location;
|
||
|
|
||
|
cy.request({
|
||
|
method: 'GET',
|
||
|
url: redirect,
|
||
|
followRedirect: false,
|
||
|
}).then((secondResponse) => {
|
||
|
const el = document.createElement('html');
|
||
|
el.innerHTML = secondResponse.body;
|
||
|
const authState = el.getElementsByTagName('input').namedItem('AuthState').defaultValue;
|
||
|
|
||
|
cy.request({
|
||
|
method: 'POST',
|
||
|
url: redirect,
|
||
|
body: `username=user1&password=user1pass&AuthState=${authState}`,
|
||
|
form: true,
|
||
|
followRedirect: false,
|
||
|
}).then((finalResponse) => {
|
||
|
el.innerHTML = finalResponse.body;
|
||
|
const saml = el.getElementsByTagName('input').namedItem('SAMLResponse').defaultValue;
|
||
|
|
||
|
// Load the callback URL with the response from the IdP
|
||
|
cy.visit({
|
||
|
url: '/api/v1/fleet/sso/callback',
|
||
|
method: 'POST',
|
||
|
body: {
|
||
|
SAMLResponse: saml,
|
||
|
},
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|