1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
unleash.unleash/frontend/src/component/changeRequest/ChangeRequest/Changes/Change/FeatureChange.test.tsx
Gastón Fournier abe160eb7d
feat: Unleash v7 ESM migration (#9877)
We're migrating to ESM, which will allow us to import the latest
versions of our dependencies.

Co-Authored-By: Christopher Kolstad <chriswk@getunleash.io>
2025-05-14 09:47:12 +02:00

154 lines
4.6 KiB
TypeScript

import { render } from 'utils/testRenderer';
import { screen } from '@testing-library/react';
import { FeatureChange } from './FeatureChange.tsx';
import type {
ChangeRequestState,
ChangeRequestType,
IChangeRequestFeature,
IFeatureChange,
} from 'component/changeRequest/changeRequest.types';
describe('Schedule conflicts', () => {
const change = {
id: 15,
action: 'deleteStrategy' as const,
payload: {
id: 'b3ac8595-8ad3-419e-aa18-4d82f2b6bc4c',
name: 'flexibleRollout',
},
createdAt: new Date(),
createdBy: {
id: 1,
username: 'admin',
imageUrl: '',
},
scheduleConflicts: {
changeRequests: [
{
id: 73,
},
{
id: 80,
title: 'Adjust rollout percentage',
},
],
},
};
const feature = (change: IFeatureChange): IChangeRequestFeature => ({
name: 'conflict-test',
changes: [change],
});
const changeRequest =
(feature: IChangeRequestFeature) =>
(state: ChangeRequestState): ChangeRequestType => {
const shared = {
id: 1,
title: '',
project: 'default',
environment: 'default',
minApprovals: 1,
createdBy: { id: 1, username: 'user1', imageUrl: '' },
createdAt: new Date(),
features: [feature],
segments: [],
approvals: [],
rejections: [],
comments: [],
};
if (state === 'Scheduled') {
return {
...shared,
state,
schedule: {
scheduledAt: '2024-01-12T09:46:51+05:30',
status: 'pending',
},
};
}
return {
...shared,
state,
};
};
it.each(['Draft', 'Scheduled', 'In review', 'Approved'])(
'should show schedule conflicts (when they exist) for change request in the %s state',
async (changeRequestState) => {
const flag = feature(change);
render(
<FeatureChange
actions={null}
index={0}
changeRequest={changeRequest(flag)(
changeRequestState as ChangeRequestState,
)}
change={change}
feature={flag}
/>,
);
const alert = await screen.findByRole('alert');
expect(
alert.textContent!.startsWith('Potential conflict'),
).toBeTruthy();
const links = await screen.findAllByRole('link');
expect(links).toHaveLength(
change.scheduleConflicts.changeRequests.length,
);
const [link1, link2] = links;
expect(link1).toHaveTextContent('#73');
expect(link1).toHaveAccessibleDescription('Change request 73');
expect(link1).toHaveAttribute(
'href',
`/projects/default/change-requests/73`,
);
expect(link2).toHaveTextContent('#80 (Adjust rollout percentage)');
expect(link2).toHaveAccessibleDescription('Change request 80');
expect(link2).toHaveAttribute(
'href',
`/projects/default/change-requests/80`,
);
},
);
it.each(['Draft', 'Scheduled', 'In review', 'Approved'])(
'should not show schedule conflicts when they do not exist for change request in the %s state',
async (changeRequestState) => {
const { scheduleConflicts, ...changeWithNoScheduleConflicts } =
change;
const flag = feature(changeWithNoScheduleConflicts);
render(
<FeatureChange
actions={null}
index={0}
changeRequest={changeRequest(flag)(
changeRequestState as ChangeRequestState,
)}
change={changeWithNoScheduleConflicts}
feature={flag}
/>,
);
const links = screen.queryByRole('link');
expect(links).toBe(null);
const alert = screen.queryByRole('alert');
expect(alert).toBe(null);
},
);
});