mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	fix: allow deletion of segments referencing strategies in archived f… (#6406)
Subset of #6392, allowing you to delete segments that are referenced in strategies on archived features.
This commit is contained in:
		
							parent
							
								
									a08bada1de
								
							
						
					
					
						commit
						bfbd18eb97
					
				| @ -3,7 +3,7 @@ import { Dialogue } from 'component/common/Dialogue/Dialogue'; | ||||
| import Input from 'component/common/Input/Input'; | ||||
| import { ISegment } from 'interfaces/segment'; | ||||
| import { SEGMENT_DIALOG_NAME_ID } from 'utils/testIds'; | ||||
| import { styled } from '@mui/material'; | ||||
| import { Alert, styled } from '@mui/material'; | ||||
| 
 | ||||
| const StyledInput = styled(Input)(({ theme }) => ({ | ||||
|     marginTop: theme.spacing(2), | ||||
| @ -46,6 +46,11 @@ export const SegmentDeleteConfirm = ({ | ||||
|             onClose={handleCancel} | ||||
|             formId={formId} | ||||
|         > | ||||
|             <Alert sx={{ marginBottom: 2 }} severity='warning'> | ||||
|                 Deleted segments may be referenced in strategies if the feature | ||||
|                 flag is archived. Removing the segment will also remove the | ||||
|                 segments from strategies of archived flags. | ||||
|             </Alert> | ||||
|             <p> | ||||
|                 In order to delete this segment, please enter the name of the | ||||
|                 segment in the field below: <strong>{segment?.name}</strong> | ||||
|  | ||||
| @ -814,7 +814,14 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore { | ||||
|                 `${T.featureStrategySegment}.feature_strategy_id`, | ||||
|                 `${T.featureStrategies}.id`, | ||||
|             ) | ||||
|             .where(`${T.featureStrategySegment}.segment_id`, '=', segmentId); | ||||
|             .join( | ||||
|                 T.features, | ||||
|                 `${T.features}.name`, | ||||
|                 `${T.featureStrategies}.feature_name`, | ||||
|             ) | ||||
|             .where(`${T.featureStrategySegment}.segment_id`, '=', segmentId) | ||||
|             .andWhere(`${T.features}.archived_at`, 'IS', null); | ||||
| 
 | ||||
|         stopTimer(); | ||||
|         return rows.map(mapRow); | ||||
|     } | ||||
|  | ||||
| @ -290,6 +290,36 @@ test('should not delete segments used by strategies', async () => { | ||||
|     expect((await fetchSegments()).length).toEqual(1); | ||||
| }); | ||||
| 
 | ||||
| test('should delete segments used by strategies in archived feature toggles', async () => { | ||||
|     await app.createSegment({ | ||||
|         name: 'a', | ||||
|         constraints: [], | ||||
|     }); | ||||
|     const toggle = mockFeatureToggle(); | ||||
|     await createFeatureToggle(app, toggle); | ||||
|     const [segment] = await fetchSegments(); | ||||
| 
 | ||||
|     await addStrategyToFeatureEnv( | ||||
|         app, | ||||
|         { ...toggle.strategies[0] }, | ||||
|         'default', | ||||
|         toggle.name, | ||||
|     ); | ||||
|     const [feature] = await fetchFeatures(); | ||||
|     //@ts-ignore
 | ||||
|     await addSegmentsToStrategy([segment.id], feature.strategies[0].id); | ||||
|     const segments = await fetchSegments(); | ||||
|     expect(segments.length).toEqual(1); | ||||
| 
 | ||||
|     await app.archiveFeature(feature.name); | ||||
| 
 | ||||
|     await app.request | ||||
|         .delete(`${SEGMENTS_BASE_PATH}/${segments[0].id}`) | ||||
|         .expect(204); | ||||
| 
 | ||||
|     expect((await fetchSegments()).length).toEqual(0); | ||||
| }); | ||||
| 
 | ||||
| test('should list strategies by segment', async () => { | ||||
|     await app.createSegment({ | ||||
|         name: 'S1', | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user