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

fix: force deletion of archived toggles when deleting a project (#5080)

This commit is contained in:
Simon Hornby 2023-10-19 10:45:09 +02:00 committed by GitHub
parent f3a7bfd470
commit 1ca3e8d893
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 0 deletions

View File

@ -390,6 +390,17 @@ export default class ProjectService {
);
}
const archivedToggles = await this.featureToggleStore.getAll({
project: id,
archived: true,
});
this.featureToggleService.deleteFeatures(
archivedToggles.map((toggle) => toggle.name),
id,
user.name,
);
await this.projectStore.delete(id);
await this.eventService.storeEvent({

View File

@ -1814,3 +1814,44 @@ describe('feature flag naming patterns', () => {
expect(updatedProject.featureNaming!.description).toBeFalsy();
});
});
test('deleting a project with archived toggles should result in any remaining archived toggles being deleted', async () => {
const project = {
id: 'project-with-archived-toggles',
name: 'project-with-archived-toggles',
};
const toggleName = 'archived-and-deleted';
await projectService.createProject(project, user.id);
await stores.featureToggleStore.create(project.id, {
name: toggleName,
project: project.id,
enabled: false,
defaultStickiness: 'default',
});
await stores.featureToggleStore.archive(toggleName);
await projectService.deleteProject(project.id, user);
// bring the project back again, previously this would allow those archived toggles to be resurrected
// we now expect them to be deleted correctly
await projectService.createProject(project, user.id);
const toggles = await stores.featureToggleStore.getAll({
project: project.id,
archived: true,
});
expect(toggles.find((t) => t.name === toggleName)).toBeUndefined();
});
test('deleting a project with no archived toggles should not result in an error', async () => {
const project = {
id: 'project-with-nothing',
name: 'project-with-nothing',
};
await projectService.createProject(project, user.id);
await projectService.deleteProject(project.id, user);
});