mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	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).
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			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,
 | |
|     });
 | |
| };
 |