1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-09 00:18:00 +01:00

fix: show Changes scheduled badge for strategies even if change reque… (#5599)

show Changes scheduled badge for strategies even if change requests are
disabled

Closes #
[1-1745](https://linear.app/unleash/issue/1-1745/show-changes-scheduled-badge-in-strategy-item-even-if-change-requests)

---------

Signed-off-by: andreas-unleash <andreas@getunleash.ai>
This commit is contained in:
andreas-unleash 2023-12-12 09:30:57 +02:00 committed by GitHub
parent abf540a1cc
commit e02c252636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 78 additions and 11 deletions

View File

@ -314,7 +314,13 @@ describe('Change request badges for strategies', () => {
testServerRoute( testServerRoute(
server, server,
'/api/admin/projects/default/change-requests/pending/feature1', '/api/admin/projects/default/change-requests/pending/feature1',
[scheduledRequest('updateStrategy')], [],
);
testServerRoute(
server,
'/api/admin/projects/default/change-requests/scheduled',
[{ id: 1 }],
); );
render(<Component />, { render(<Component />, {
@ -336,6 +342,11 @@ describe('Change request badges for strategies', () => {
'/api/admin/projects/default/change-requests/pending/feature1', '/api/admin/projects/default/change-requests/pending/feature1',
[scheduledRequest('deleteStrategy')], [scheduledRequest('deleteStrategy')],
); );
testServerRoute(
server,
'/api/admin/projects/default/change-requests/scheduled',
[{ id: 1 }],
);
render(<Component />, { render(<Component />, {
route: '/projects/default/features/feature1', route: '/projects/default/features/feature1',
@ -359,6 +370,11 @@ describe('Change request badges for strategies', () => {
draftRequest('updateStrategy', 1), draftRequest('updateStrategy', 1),
], ],
); );
testServerRoute(
server,
'/api/admin/projects/default/change-requests/scheduled',
[{ id: 1 }],
);
render(<Component />, { render(<Component />, {
route: '/projects/default/features/feature1', route: '/projects/default/features/feature1',
@ -382,6 +398,11 @@ describe('Change request badges for strategies', () => {
draftRequest('deleteStrategy', 1), draftRequest('deleteStrategy', 1),
], ],
); );
testServerRoute(
server,
'/api/admin/projects/default/change-requests/scheduled',
[{ id: 1 }],
);
render(<Component />, { render(<Component />, {
route: '/projects/default/features/feature1', route: '/projects/default/features/feature1',
@ -395,4 +416,45 @@ describe('Change request badges for strategies', () => {
await screen.findByText('Changes Scheduled'); await screen.findByText('Changes Scheduled');
await screen.findByText('Deleted in draft'); await screen.findByText('Deleted in draft');
}); });
test('should render "Changes scheduled" badge if strategy is modified in a scheduled request event if change requests are disabled', async () => {
testServerRoute(
server,
'/api/admin/projects/default/change-requests/config',
[
{
environment: 'development',
type: 'development',
changeRequestEnabled: false,
},
{
environment: 'production',
type: 'production',
changeRequestEnabled: false,
},
],
'get',
);
testServerRoute(
server,
'/api/admin/projects/default/change-requests/pending/feature1',
[],
);
testServerRoute(
server,
'/api/admin/projects/default/change-requests/scheduled',
[{ id: 1 }],
);
render(<Component />, {
route: '/projects/default/features/feature1',
permissions: [
{
permission: ADMIN,
},
],
});
await screen.findByText('Changes Scheduled');
});
}); });

View File

@ -13,6 +13,10 @@ import {
import { ChangesScheduledBadge } from 'component/changeRequest/ModifiedInChangeRequestStatusBadge/ChangesScheduledBadge'; import { ChangesScheduledBadge } from 'component/changeRequest/ModifiedInChangeRequestStatusBadge/ChangesScheduledBadge';
import { IFeatureChange } from 'component/changeRequest/changeRequest.types'; import { IFeatureChange } from 'component/changeRequest/changeRequest.types';
import { Badge } from 'component/common/Badge/Badge'; import { Badge } from 'component/common/Badge/Badge';
import {
ChangeRequestIdentityData,
useScheduledChangeRequestsWithStrategy,
} from 'hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy';
interface IStrategyDraggableItemProps { interface IStrategyDraggableItemProps {
strategy: IFeatureStrategy; strategy: IFeatureStrategy;
@ -51,6 +55,9 @@ export const StrategyDraggableItem = ({
strategy.id, strategy.id,
); );
const { changeRequests: scheduledChangesUsingStrategy } =
useScheduledChangeRequestsWithStrategy(projectId, strategy.id);
return ( return (
<Box <Box
key={strategy.id} key={strategy.id}
@ -72,6 +79,7 @@ export const StrategyDraggableItem = ({
orderNumber={index + 1} orderNumber={index + 1}
headerChildren={renderHeaderChildren( headerChildren={renderHeaderChildren(
strategyChangesFromRequest, strategyChangesFromRequest,
scheduledChangesUsingStrategy,
)} )}
/> />
</Box> </Box>
@ -105,14 +113,15 @@ const ChangeRequestStatusBadge = ({
}; };
const renderHeaderChildren = ( const renderHeaderChildren = (
changes: UseStrategyChangeFromRequestResult, changes?: UseStrategyChangeFromRequestResult,
scheduledChanges?: ChangeRequestIdentityData[],
): JSX.Element[] => { ): JSX.Element[] => {
const badges: JSX.Element[] = []; const badges: JSX.Element[] = [];
if (changes.length === 0) { if (changes?.length === 0 && scheduledChanges?.length === 0) {
return []; return [];
} }
const draftChange = changes.find( const draftChange = changes?.find(
({ isScheduledChange }) => !isScheduledChange, ({ isScheduledChange }) => !isScheduledChange,
); );
@ -125,16 +134,12 @@ const renderHeaderChildren = (
); );
} }
const scheduledChanges = changes.filter( if (scheduledChanges && scheduledChanges.length > 0) {
({ isScheduledChange }) => isScheduledChange,
);
if (scheduledChanges.length > 0) {
badges.push( badges.push(
<ChangesScheduledBadge <ChangesScheduledBadge
key='scheduled-changes' key='scheduled-changes'
scheduledChangeRequestIds={scheduledChanges.map( scheduledChangeRequestIds={scheduledChanges.map(
(scheduledChange) => scheduledChange.changeRequestId, (scheduledChange) => scheduledChange.id,
)} )}
/>, />,
); );

View File

@ -8,7 +8,7 @@ const fetcher = (path: string) => {
.then((res) => res.json()); .then((res) => res.json());
}; };
type ChangeRequestIdentityData = { export type ChangeRequestIdentityData = {
id: number; id: number;
title?: string; title?: string;
}; };