Prohibit uninstallation of core plugins

This commit is contained in:
Rene Pfeuffer
2019-09-16 14:12:49 +02:00
parent 1bc8dea481
commit 38f05fe689
2 changed files with 14 additions and 0 deletions

View File

@@ -188,6 +188,7 @@ public class DefaultPluginManager implements PluginManager {
PluginPermissions.manage().check();
InstalledPlugin installed = getInstalled(name)
.orElseThrow(() -> NotFoundException.notFound(entity(InstalledPlugin.class, name)));
doThrow().violation("plugin is a core plugin and cannot be uninstalled").when(installed.isCore());
dependencyTracker.removeInstalled(installed.getDescriptor());

View File

@@ -344,6 +344,19 @@ class DefaultPluginManagerTest {
assertThat(temp.resolve("uninstall")).exists();
}
@Test
void shouldThrowExceptionWhenUninstallingCorePlugin(@TempDirectory.TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");
when(mailPlugin.getDirectory()).thenReturn(temp);
when(mailPlugin.isCore()).thenReturn(true);
when(loader.getInstalledPlugins()).thenReturn(singletonList(mailPlugin));
assertThrows(ScmConstraintViolationException.class, () -> manager.uninstall("scm-mail-plugin", false));
assertThat(temp.resolve("uninstall")).doesNotExist();
}
}
@Nested