1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00
unleash.unleash/frontend/cypress/support/API.ts
Nuno Góis edefa6fc7e
test: add interactive demo guide e2e test (#3656)
This PR revamps e2e tests, while adding a new one for the interactive
demo guide:
 - Bumps Cypress from `9.7.0` to `12.11.0`;
 - Bumps Cypress GH action from `v2` to `v5`;
 - Makes any adjustments needed;
 - Fixes a lot of issues identified with existing tests;
- Adds new `demo.spec.ts` e2e test that covers the entire demo guide
flow;

**Note:** Currently does not include `demo.spec.ts` in the GH action, as
it
[fails](https://github.com/Unleash/unleash/actions/runs/4896839575/jobs/8744137231?pr=3656)
on step 2.13 (last step of "user-specific" topic). It runs perfectly
fine locally, though.

Might be placebo, but in general tests seem less flaky now and they may
even be faster (especially when not adding the `demo` one, which would
always take a long time).
2023-05-08 09:16:18 +01:00

127 lines
3.4 KiB
TypeScript

///<reference path="../global.d.ts" />
import Chainable = Cypress.Chainable;
const baseUrl = Cypress.config().baseUrl;
const password = Cypress.env(`AUTH_PASSWORD`) + '_A';
const PROJECT_MEMBER = 5;
export const createFeature_API = (
featureName: string,
projectName?: string,
options?: Partial<Cypress.RequestOptions>
): Chainable<any> => {
const project = projectName || 'default';
return cy.request({
url: `${baseUrl}/api/admin/projects/${project}/features`,
method: 'POST',
body: {
name: `${featureName}`,
description: 'hello-world',
type: 'release',
impressionData: false,
},
...options,
});
};
export const deleteFeature_API = (name: string): Chainable<any> => {
cy.request({
method: 'DELETE',
url: `${baseUrl}/api/admin/projects/default/features/${name}`,
});
return cy.request({
method: 'DELETE',
url: `${baseUrl}/api/admin/archive/${name}`,
});
};
export const createProject_API = (
project: string,
options?: Partial<Cypress.RequestOptions>
): Chainable<any> => {
return cy.request({
url: `${baseUrl}/api/admin/projects`,
method: 'POST',
body: {
id: project,
name: project,
description: project,
impressionData: false,
},
...options,
});
};
export const deleteProject_API = (name: string): Chainable<any> => {
return cy.request({
method: 'DELETE',
url: `${baseUrl}/api/admin/projects/${name}`,
});
};
export const createUser_API = (userName: string, role: number) => {
const name = `${userName}`;
const email = `${name}@test.com`;
const userIds: number[] = [];
const userCredentials: Cypress.UserCredentials[] = [];
cy.request('POST', `${baseUrl}/api/admin/user-admin`, {
name: name,
email: `${name}@test.com`,
username: `${name}@test.com`,
sendEmail: false,
rootRole: role,
})
.as(name)
.then(response => {
const id = response.body.id;
updateUserPassword_API(id).then(() => {
addUserToProject_API(id, PROJECT_MEMBER).then(value => {
userIds.push(id);
userCredentials.push({ email, password });
});
});
});
return cy.wrap({ userIds, userCredentials });
};
export const updateUserPassword_API = (id: number, pass?: string): Chainable =>
cy.request(
'POST',
`${baseUrl}/api/admin/user-admin/${id}/change-password`,
{
password: pass || password,
}
);
export const addUserToProject_API = (
id: number,
role: number,
projectName?: string
): Chainable => {
const project = projectName || 'default';
return cy.request(
'POST',
`${baseUrl}/api/admin/projects/${project}/role/${role}/access`,
{
groups: [],
users: [{ id }],
}
);
};
interface IEnvironment {
name: string;
type: 'development' | 'preproduction' | 'test' | 'production';
}
export const createEnvironment_API = (
environment: IEnvironment,
options?: Partial<Cypress.RequestOptions>
): Chainable<any> => {
return cy.request({
url: `${baseUrl}/api/admin/environments`,
method: 'POST',
body: environment,
...options,
});
};