package com.constellio.app.services.extensions.plugins;
import static com.constellio.app.services.extensions.plugins.JSPFConstellioPluginManager.PREVIOUS_PLUGINS;
import static com.constellio.app.services.extensions.plugins.PluginActivationFailureCause.ID_MISMATCH;
import static com.constellio.app.services.extensions.plugins.PluginActivationFailureCause.MORE_THAN_ONE_INSTALLABLE_MODULE_PER_JAR;
import static com.constellio.app.services.extensions.plugins.PluginActivationFailureCause.NO_INSTALLABLE_MODULE_DETECTED_FROM_JAR;
import static com.constellio.app.services.extensions.plugins.pluginInfo.ConstellioPluginStatus.ENABLED;
import static com.constellio.app.services.extensions.plugins.pluginInfo.ConstellioPluginStatus.INVALID;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.constellio.app.services.extensions.plugins.pluginInfo.ConstellioPluginInfo;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.SDKFoldersLocator;
public class JSPFConstellioPluginWithDetectPluginsAcceptanceTest extends ConstellioTest {
private ConstellioPluginManager pluginManager;
@Before
public void setUp()
throws Exception {
notAUnitItest = true;
File stateFile = getTestResourceFile("saveStateWithPlugins.zip");
getCurrentTestSession().getFactoriesTestFeatures().givenSystemInState(stateFile).withFakeEncryptionServices()
.withPasswordsReset()
.withSDKPluginFolder();
pluginManager = getAppLayerFactory().getPluginManager();
deletePreviousPluginsFolder();
}
@BeforeClass
public static void beforeClass()
throws Exception {
createJarsFromZip(new SDKFoldersLocator().getPluginsJarsFolder());
}
private static void createJarsFromZip(File pluginsJarsFolder)
throws IOException {
for (File zip : FileUtils.listFiles(pluginsJarsFolder, new String[] { "zip" }, false)) {
String zipNameWithoutExtension = StringUtils.substringBeforeLast(zip.getName(), ".zip");
FileUtils.copyFile(zip, new File(pluginsJarsFolder, zipNameWithoutExtension + ".jar"));
}
}
@Test
public void givenInvalidModuleWhenDetectPluginsThenPluginWithAdequateErrorStatus() {
List<ConstellioPluginInfo> invalidPlugins = pluginManager.getPlugins(INVALID);
assertThat(invalidPlugins).extracting("code", "pluginActivationFailureCause").containsOnly(
//tuple("InvalidModuleInMigrate", "INVALID_MIGRATION_SCRIPT"),
//tuple("InvalidModuleInStart", "INVALID_START"),
tuple("NoInstallableModule", NO_INSTALLABLE_MODULE_DETECTED_FROM_JAR),
tuple("SeveralInstallableModules", MORE_THAN_ONE_INSTALLABLE_MODULE_PER_JAR),
tuple("IdMissMatch2", ID_MISMATCH)
);
List<ConstellioPluginInfo> validPluginsUntilMigration = pluginManager.getPlugins(ENABLED);
assertThat(validPluginsUntilMigration).extracting("code").contains(
"InvalidModuleInMigrate", "InvalidModuleInStart",
"ValidModule", "ValidModuleThrowingExceptionInMethodsDifferentFromStartAndMigrate"
, "WithoutConstellioVersion");
assertThat(pluginManager.getRegistredModulesAndActivePlugins()).extracting("id").contains(
"InvalidModuleInMigrate", "InvalidModuleInStart",
"ValidModule", "ValidModuleThrowingExceptionInMethodsDifferentFromStartAndMigrate"
, "WithoutConstellioVersion"
);
}
@After
public void deletePreviousPluginsFolder() {
File pluginsFolder = getAppLayerFactory().getAppLayerConfiguration().getPluginsFolder();
File previousPluginsFolder = new File(pluginsFolder, PREVIOUS_PLUGINS);
FileUtils.deleteQuietly(previousPluginsFolder);
}
}