diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx index d8b893f6e9..ab091f565f 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.test.tsx @@ -314,7 +314,13 @@ describe('Change request badges for strategies', () => { testServerRoute( server, '/api/admin/projects/default/change-requests/pending/feature1', - [scheduledRequest('updateStrategy')], + [], + ); + + testServerRoute( + server, + '/api/admin/projects/default/change-requests/scheduled', + [{ id: 1 }], ); render(, { @@ -336,6 +342,11 @@ describe('Change request badges for strategies', () => { '/api/admin/projects/default/change-requests/pending/feature1', [scheduledRequest('deleteStrategy')], ); + testServerRoute( + server, + '/api/admin/projects/default/change-requests/scheduled', + [{ id: 1 }], + ); render(, { route: '/projects/default/features/feature1', @@ -359,6 +370,11 @@ describe('Change request badges for strategies', () => { draftRequest('updateStrategy', 1), ], ); + testServerRoute( + server, + '/api/admin/projects/default/change-requests/scheduled', + [{ id: 1 }], + ); render(, { route: '/projects/default/features/feature1', @@ -382,6 +398,11 @@ describe('Change request badges for strategies', () => { draftRequest('deleteStrategy', 1), ], ); + testServerRoute( + server, + '/api/admin/projects/default/change-requests/scheduled', + [{ id: 1 }], + ); render(, { route: '/projects/default/features/feature1', @@ -395,4 +416,45 @@ describe('Change request badges for strategies', () => { await screen.findByText('Changes Scheduled'); 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(, { + route: '/projects/default/features/feature1', + permissions: [ + { + permission: ADMIN, + }, + ], + }); + + await screen.findByText('Changes Scheduled'); + }); }); diff --git a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx index 58135ddbf9..a3a83cde5c 100644 --- a/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx +++ b/frontend/src/component/feature/FeatureView/FeatureOverview/FeatureOverviewEnvironments/FeatureOverviewEnvironment/EnvironmentAccordionBody/StrategyDraggableItem/StrategyDraggableItem.tsx @@ -13,6 +13,10 @@ import { import { ChangesScheduledBadge } from 'component/changeRequest/ModifiedInChangeRequestStatusBadge/ChangesScheduledBadge'; import { IFeatureChange } from 'component/changeRequest/changeRequest.types'; import { Badge } from 'component/common/Badge/Badge'; +import { + ChangeRequestIdentityData, + useScheduledChangeRequestsWithStrategy, +} from 'hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy'; interface IStrategyDraggableItemProps { strategy: IFeatureStrategy; @@ -51,6 +55,9 @@ export const StrategyDraggableItem = ({ strategy.id, ); + const { changeRequests: scheduledChangesUsingStrategy } = + useScheduledChangeRequestsWithStrategy(projectId, strategy.id); + return ( @@ -105,14 +113,15 @@ const ChangeRequestStatusBadge = ({ }; const renderHeaderChildren = ( - changes: UseStrategyChangeFromRequestResult, + changes?: UseStrategyChangeFromRequestResult, + scheduledChanges?: ChangeRequestIdentityData[], ): JSX.Element[] => { const badges: JSX.Element[] = []; - if (changes.length === 0) { + if (changes?.length === 0 && scheduledChanges?.length === 0) { return []; } - const draftChange = changes.find( + const draftChange = changes?.find( ({ isScheduledChange }) => !isScheduledChange, ); @@ -125,16 +134,12 @@ const renderHeaderChildren = ( ); } - const scheduledChanges = changes.filter( - ({ isScheduledChange }) => isScheduledChange, - ); - - if (scheduledChanges.length > 0) { + if (scheduledChanges && scheduledChanges.length > 0) { badges.push( scheduledChange.changeRequestId, + (scheduledChange) => scheduledChange.id, )} />, ); diff --git a/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts b/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts index d36c64ecbf..02f498ceb4 100644 --- a/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts +++ b/frontend/src/hooks/api/getters/useScheduledChangeRequestsWithStrategy/useScheduledChangeRequestsWithStrategy.ts @@ -8,7 +8,7 @@ const fetcher = (path: string) => { .then((res) => res.json()); }; -type ChangeRequestIdentityData = { +export type ChangeRequestIdentityData = { id: number; title?: string; };