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 Input from 'component/common/Input/Input';
 | 
				
			||||||
import { ISegment } from 'interfaces/segment';
 | 
					import { ISegment } from 'interfaces/segment';
 | 
				
			||||||
import { SEGMENT_DIALOG_NAME_ID } from 'utils/testIds';
 | 
					import { SEGMENT_DIALOG_NAME_ID } from 'utils/testIds';
 | 
				
			||||||
import { styled } from '@mui/material';
 | 
					import { Alert, styled } from '@mui/material';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const StyledInput = styled(Input)(({ theme }) => ({
 | 
					const StyledInput = styled(Input)(({ theme }) => ({
 | 
				
			||||||
    marginTop: theme.spacing(2),
 | 
					    marginTop: theme.spacing(2),
 | 
				
			||||||
@ -46,6 +46,11 @@ export const SegmentDeleteConfirm = ({
 | 
				
			|||||||
            onClose={handleCancel}
 | 
					            onClose={handleCancel}
 | 
				
			||||||
            formId={formId}
 | 
					            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>
 | 
					            <p>
 | 
				
			||||||
                In order to delete this segment, please enter the name of the
 | 
					                In order to delete this segment, please enter the name of the
 | 
				
			||||||
                segment in the field below: <strong>{segment?.name}</strong>
 | 
					                segment in the field below: <strong>{segment?.name}</strong>
 | 
				
			||||||
 | 
				
			|||||||
@ -814,7 +814,14 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
 | 
				
			|||||||
                `${T.featureStrategySegment}.feature_strategy_id`,
 | 
					                `${T.featureStrategySegment}.feature_strategy_id`,
 | 
				
			||||||
                `${T.featureStrategies}.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();
 | 
					        stopTimer();
 | 
				
			||||||
        return rows.map(mapRow);
 | 
					        return rows.map(mapRow);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -290,6 +290,36 @@ test('should not delete segments used by strategies', async () => {
 | 
				
			|||||||
    expect((await fetchSegments()).length).toEqual(1);
 | 
					    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 () => {
 | 
					test('should list strategies by segment', async () => {
 | 
				
			||||||
    await app.createSegment({
 | 
					    await app.createSegment({
 | 
				
			||||||
        name: 'S1',
 | 
					        name: 'S1',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user