mirror of
https://github.com/Unleash/unleash.git
synced 2025-05-17 01:17:29 +02:00
test: move tests from cypress to rtl (#6987)
This commit is contained in:
parent
913f81b40c
commit
a45be8d10c
1
.github/workflows/e2e.frontend.yaml
vendored
1
.github/workflows/e2e.frontend.yaml
vendored
@ -10,7 +10,6 @@ jobs:
|
|||||||
- feature/feature.spec.ts
|
- feature/feature.spec.ts
|
||||||
- groups/groups.spec.ts
|
- groups/groups.spec.ts
|
||||||
- projects/access.spec.ts
|
- projects/access.spec.ts
|
||||||
- projects/overview.spec.ts
|
|
||||||
- segments/segments.spec.ts
|
- segments/segments.spec.ts
|
||||||
steps:
|
steps:
|
||||||
- name: Dump GitHub context
|
- name: Dump GitHub context
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
///<reference path="../../global.d.ts" />
|
|
||||||
import {
|
|
||||||
BATCH_ACTIONS_BAR,
|
|
||||||
MORE_BATCH_ACTIONS,
|
|
||||||
SEARCH_INPUT,
|
|
||||||
//@ts-ignore
|
|
||||||
} from '../../../src/utils/testIds';
|
|
||||||
|
|
||||||
describe('project overview', () => {
|
|
||||||
const randomId = String(Math.random()).split('.')[1];
|
|
||||||
const featureTogglePrefix = 'unleash-e2e-project-overview';
|
|
||||||
const featureToggleName = `${featureTogglePrefix}-${randomId}`;
|
|
||||||
const projectName = `unleash-e2e-project-overview-${randomId}`;
|
|
||||||
const baseUrl = Cypress.config().baseUrl;
|
|
||||||
const selectAll = '[title="Select all rows"] input[type="checkbox"]';
|
|
||||||
|
|
||||||
before(() => {
|
|
||||||
cy.runBefore();
|
|
||||||
cy.login_UI();
|
|
||||||
cy.createProject_API(projectName);
|
|
||||||
});
|
|
||||||
|
|
||||||
after(() => {
|
|
||||||
cy.request({
|
|
||||||
method: 'DELETE',
|
|
||||||
url: `${baseUrl}/api/admin/projects/${projectName}/features/${featureToggleName}-A`,
|
|
||||||
failOnStatusCode: false,
|
|
||||||
});
|
|
||||||
cy.request({
|
|
||||||
method: 'DELETE',
|
|
||||||
url: `${baseUrl}/api/admin/projects/${projectName}/features/${featureToggleName}-B`,
|
|
||||||
failOnStatusCode: false,
|
|
||||||
});
|
|
||||||
cy.request({
|
|
||||||
method: 'DELETE',
|
|
||||||
url: `${baseUrl}/api/admin/archive/${featureToggleName}-A`,
|
|
||||||
});
|
|
||||||
cy.request({
|
|
||||||
method: 'DELETE',
|
|
||||||
url: `${baseUrl}/api/admin/archive/${featureToggleName}-B`,
|
|
||||||
});
|
|
||||||
cy.deleteProject_API(projectName);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can mark selected togggles as stale', () => {
|
|
||||||
cy.login_UI();
|
|
||||||
cy.visit(`/projects/${projectName}`);
|
|
||||||
cy.viewport(1920, 1080);
|
|
||||||
cy.get(`[data-testid="${SEARCH_INPUT}"]`).as('search').click();
|
|
||||||
cy.get('@search').type(featureToggleName);
|
|
||||||
cy.get('body').type('{esc}');
|
|
||||||
cy.get('table tbody tr').should((elements) => {
|
|
||||||
expect(elements).to.have.length.at.least(2);
|
|
||||||
});
|
|
||||||
cy.get(selectAll).click();
|
|
||||||
|
|
||||||
cy.get(`[data-testid="${MORE_BATCH_ACTIONS}"]`).click();
|
|
||||||
|
|
||||||
cy.get('[role="menuitem"]').contains('Mark as stale').click();
|
|
||||||
|
|
||||||
cy.visit(`/projects/${projectName}/features/${featureToggleName}-A`);
|
|
||||||
cy.get('[title="Feature toggle is deprecated."]').should('exist');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('can archive selected togggles', () => {
|
|
||||||
cy.login_UI();
|
|
||||||
cy.visit(`/projects/${projectName}`);
|
|
||||||
cy.viewport(1920, 1080);
|
|
||||||
cy.get(`[data-testid="${SEARCH_INPUT}"]`).as('search').click();
|
|
||||||
cy.get('@search').type(featureToggleName);
|
|
||||||
cy.get('body').type('{esc}');
|
|
||||||
|
|
||||||
cy.get('table tbody tr').should((elements) => {
|
|
||||||
expect(elements).to.have.length.at.least(2);
|
|
||||||
});
|
|
||||||
cy.get(selectAll).click();
|
|
||||||
|
|
||||||
// Ensure button is enabled
|
|
||||||
cy.get(`[data-testid=${BATCH_ACTIONS_BAR}] button`)
|
|
||||||
.contains('Archive')
|
|
||||||
.should('not.have.attr', 'disabled');
|
|
||||||
|
|
||||||
// Separate click action
|
|
||||||
cy.get(`[data-testid=${BATCH_ACTIONS_BAR}] button`)
|
|
||||||
.contains('Archive')
|
|
||||||
.click();
|
|
||||||
|
|
||||||
cy.get('p')
|
|
||||||
.contains('Are you sure you want to archive ')
|
|
||||||
.should('exist');
|
|
||||||
cy.get('button').contains('Archive toggles').click();
|
|
||||||
cy.get('table tbody tr').should('have.length', 0);
|
|
||||||
});
|
|
||||||
});
|
|
@ -8,9 +8,6 @@ const server = testServerSetup();
|
|||||||
|
|
||||||
test('Display extended daily metrics', async () => {
|
test('Display extended daily metrics', async () => {
|
||||||
testServerRoute(server, '/api/admin/ui-config', {
|
testServerRoute(server, '/api/admin/ui-config', {
|
||||||
flags: {
|
|
||||||
extendedUsageMetricsUI: true,
|
|
||||||
},
|
|
||||||
versionInfo: {
|
versionInfo: {
|
||||||
current: { oss: 'irrelevant', enterprise: 'some value' },
|
current: { oss: 'irrelevant', enterprise: 'some value' },
|
||||||
},
|
},
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
import { render } from 'utils/testRenderer';
|
||||||
|
import { screen, waitFor } from '@testing-library/react';
|
||||||
|
import { ProjectFeaturesBatchActions } from './ProjectFeaturesBatchActions';
|
||||||
|
import { DELETE_FEATURE } from 'component/providers/AccessProvider/permissions';
|
||||||
|
import { testServerRoute, testServerSetup } from 'utils/testServer';
|
||||||
|
|
||||||
|
const server = testServerSetup();
|
||||||
|
|
||||||
|
const setupApi = () => {
|
||||||
|
testServerRoute(server, '/api/admin/projects/default/stale', {}, 'post');
|
||||||
|
testServerRoute(server, '/api/admin/ui-config', {});
|
||||||
|
testServerRoute(
|
||||||
|
server,
|
||||||
|
'/api/admin/projects/default/archive/validate',
|
||||||
|
{ hasDeletedDependencies: false, parentsWithChildFeatures: [] },
|
||||||
|
'post',
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
test('batch archive', async () => {
|
||||||
|
setupApi();
|
||||||
|
render(
|
||||||
|
<ProjectFeaturesBatchActions
|
||||||
|
projectId='default'
|
||||||
|
onChange={() => {}}
|
||||||
|
onResetSelection={() => {}}
|
||||||
|
selectedIds={['featureA', 'featureB']}
|
||||||
|
data={[]}
|
||||||
|
/>,
|
||||||
|
{ permissions: [{ permission: DELETE_FEATURE }] },
|
||||||
|
);
|
||||||
|
|
||||||
|
const archiveButton = screen.getByText('Archive');
|
||||||
|
expect(archiveButton).toBeEnabled();
|
||||||
|
|
||||||
|
archiveButton.click();
|
||||||
|
|
||||||
|
screen.getByText('Archive feature toggles');
|
||||||
|
screen.getByText('featureA');
|
||||||
|
screen.getByText('featureB');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('batch mark as stale', async () => {
|
||||||
|
setupApi();
|
||||||
|
let onChangeCalled = false;
|
||||||
|
render(
|
||||||
|
<ProjectFeaturesBatchActions
|
||||||
|
projectId='default'
|
||||||
|
onChange={() => {
|
||||||
|
onChangeCalled = true;
|
||||||
|
}}
|
||||||
|
onResetSelection={() => {}}
|
||||||
|
selectedIds={['featureA', 'featureB']}
|
||||||
|
data={[
|
||||||
|
{ name: 'featureA', stale: false },
|
||||||
|
{ name: 'featureB', stale: false },
|
||||||
|
]}
|
||||||
|
/>,
|
||||||
|
);
|
||||||
|
|
||||||
|
const moreActions = screen.getByTitle('More bulk actions');
|
||||||
|
moreActions.click();
|
||||||
|
|
||||||
|
const markAsStale = await screen.findByText('Mark as stale');
|
||||||
|
expect(markAsStale).toBeEnabled();
|
||||||
|
markAsStale.click();
|
||||||
|
|
||||||
|
await waitFor(() => {
|
||||||
|
expect(onChangeCalled).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user