mirror of
https://github.com/Unleash/unleash.git
synced 2024-12-22 19:07:54 +01:00
test: feature toggle list table (#5618)
This commit is contained in:
parent
4f207f18e6
commit
2b7e127680
@ -0,0 +1,140 @@
|
||||
import { screen } from '@testing-library/react';
|
||||
import { render } from 'utils/testRenderer';
|
||||
import { testServerRoute, testServerSetup } from 'utils/testServer';
|
||||
import { FeatureToggleListTable } from './FeatureToggleListTable';
|
||||
|
||||
type APIFeature = {
|
||||
name: string;
|
||||
segments: string[];
|
||||
tags: { type: string; value: string }[];
|
||||
createdAt: string;
|
||||
project: string;
|
||||
stale: boolean;
|
||||
};
|
||||
|
||||
type APIProject = {
|
||||
name: string;
|
||||
id: string;
|
||||
};
|
||||
|
||||
type UIFeature = {
|
||||
name: string;
|
||||
segments: string;
|
||||
tags: string;
|
||||
createdAt: string;
|
||||
project: string;
|
||||
state: string;
|
||||
};
|
||||
|
||||
const server = testServerSetup();
|
||||
|
||||
const setupNoFeaturesReturned = () =>
|
||||
testServerRoute(server, '/api/admin/search/features', {
|
||||
features: [],
|
||||
});
|
||||
|
||||
const setupApi = (features: APIFeature[], projects: APIProject[]) => {
|
||||
testServerRoute(server, '/api/admin/ui-config', {});
|
||||
|
||||
testServerRoute(server, '/api/admin/projects', {
|
||||
projects,
|
||||
});
|
||||
|
||||
testServerRoute(server, '/api/admin/environments', {
|
||||
environments: [
|
||||
{
|
||||
name: 'development',
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
name: 'production',
|
||||
enabled: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
testServerRoute(server, '/api/admin/segments', {});
|
||||
|
||||
testServerRoute(server, '/api/admin/tags', {});
|
||||
|
||||
testServerRoute(server, '/api/admin/feature-types', {});
|
||||
|
||||
testServerRoute(server, '/api/admin/search/features', {
|
||||
features: features.map((feature) => ({
|
||||
type: 'experiment',
|
||||
project: feature.project,
|
||||
favorite: false,
|
||||
name: feature.name,
|
||||
createdAt: feature.createdAt,
|
||||
stale: feature.stale,
|
||||
lastSeenAt: null,
|
||||
environments: [],
|
||||
segments: feature.segments,
|
||||
tags: feature.tags,
|
||||
})),
|
||||
});
|
||||
};
|
||||
|
||||
const verifyTableFeature = async (feature: UIFeature) => {
|
||||
await screen.findByText('Feature toggles');
|
||||
await screen.findByText('Add Filter');
|
||||
Object.values(feature).forEach((value) => {
|
||||
expect(screen.getByText(value)).toBeInTheDocument();
|
||||
});
|
||||
};
|
||||
|
||||
const filterFeaturesByProject = async (projectName: string) => {
|
||||
const addFilterButton = screen.getByText('Add Filter');
|
||||
addFilterButton.click();
|
||||
|
||||
const projectItem = await screen.findByText('Project');
|
||||
projectItem.click();
|
||||
|
||||
await screen.findByPlaceholderText('Search');
|
||||
const anotherProjectCheckbox = await screen.findByText(projectName);
|
||||
|
||||
anotherProjectCheckbox.click();
|
||||
};
|
||||
|
||||
test('Filter table by project', async () => {
|
||||
setupApi(
|
||||
[
|
||||
{
|
||||
name: 'Operational Feature',
|
||||
createdAt: '2023-11-03T10:19:37.978Z',
|
||||
stale: false,
|
||||
project: 'project-a',
|
||||
tags: [{ type: 'simple', value: 'new' }],
|
||||
segments: ['project segment'],
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'Project A',
|
||||
id: 'project-a',
|
||||
},
|
||||
{
|
||||
name: 'Project B',
|
||||
id: 'project-b',
|
||||
},
|
||||
],
|
||||
);
|
||||
render(<FeatureToggleListTable />);
|
||||
|
||||
await verifyTableFeature({
|
||||
name: 'Operational Feature',
|
||||
createdAt: '11/03/2023',
|
||||
segments: '1 segment',
|
||||
tags: '1 tag',
|
||||
project: 'project-a',
|
||||
state: 'Active',
|
||||
});
|
||||
|
||||
setupNoFeaturesReturned();
|
||||
await filterFeaturesByProject('Project B');
|
||||
|
||||
await screen.findByText(
|
||||
'No feature toggles available. Get started by adding a new feature toggle.',
|
||||
);
|
||||
expect(window.location.href).toContain('?columns=&project=IS%3Aproject-b');
|
||||
});
|
Loading…
Reference in New Issue
Block a user