package com.constellio.sdk.tests; import static org.mockito.Mockito.doReturn; import java.util.ArrayList; import java.util.List; import com.constellio.app.entities.modules.InstallableModule; import com.constellio.app.modules.es.ConstellioESModule; import com.constellio.app.modules.rm.ConstellioRMModule; import com.constellio.app.modules.robots.ConstellioRobotsModule; import com.constellio.app.modules.tasks.TaskModule; import com.constellio.app.services.extensions.ConstellioModulesManagerRuntimeException.FailedToInstall; import com.constellio.app.services.extensions.ConstellioModulesManagerRuntimeException.FailedToStart; import com.constellio.app.services.extensions.plugins.ConstellioPluginManager; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.extensions.ConstellioModulesManager; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.users.UserPhotosServices; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.setups.Users; public class ModulesAndMigrationsTestFeatures { Users users; FactoriesTestFeatures factoriesTestFeatures; String collection; List<InstallableModule> modules = new ArrayList<>(); boolean mockedAvailableModules = true; public ModulesAndMigrationsTestFeatures(FactoriesTestFeatures factoriesTestFeatures, String collection) { this.factoriesTestFeatures = factoriesTestFeatures; this.collection = collection; } public ModulesAndMigrationsTestFeatures withModule(Class<? extends InstallableModule> moduleClass) { AppLayerFactory appFactory = factoriesTestFeatures.getConstellioFactories().getAppLayerFactory(); ModelLayerFactory modelFactory = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory(); ConstellioPluginManager pluginManager = appFactory.getPluginManager(); if (mockedAvailableModules) { try { this.modules.add(moduleClass.newInstance()); } catch (Exception e) { throw new RuntimeException(e); } doReturn(modules).when(pluginManager).getRegistredModulesAndActivePlugins(); } ConstellioModulesManager modulesManager = appFactory.getModulesManager(); try { InstallableModule module = moduleClass.newInstance(); if (!modulesManager.isInstalled(module)) { modulesManager.installValidModuleAndGetInvalidOnes(module, modelFactory.getCollectionsListManager()); } modulesManager.enableValidModuleAndGetInvalidOnes(collection, module); } catch (FailedToInstall failedToStart) { throw new RuntimeException(failedToStart); } catch (InstantiationException | IllegalAccessException e) { throw new RuntimeException(e); } catch (FailedToStart failedToStart) { throw new RuntimeException(failedToStart); } return this; } public ModulesAndMigrationsTestFeatures withMockedAvailableModules(boolean mockedAvailableModules) { this.mockedAvailableModules = mockedAvailableModules; return this; } public ModulesAndMigrationsTestFeatures withConstellioESModule() { return withModule(ConstellioESModule.class); } public ModulesAndMigrationsTestFeatures withConstellioRMModule() { withTaskModule(); return withModule(ConstellioRMModule.class); } public ModulesAndMigrationsTestFeatures withTaskModule() { return withModule(TaskModule.class); } public ModulesAndMigrationsTestFeatures withRobotsModule() { return withModule(ConstellioRobotsModule.class); } public ModulesAndMigrationsTestFeatures withAdmin() { UserServices userServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newUserServices(); UserPhotosServices userPhotosServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory() .newUserPhotosServices(); if (users == null) { users = new Users(); users.setUp(userServices).withPhotos(userPhotosServices); } userServices.addUserToCollection(users.admin(), collection); return this; } public ModulesAndMigrationsTestFeatures withAllTestUsers() { return withAllTest(new Users()); } public ModulesAndMigrationsTestFeatures withAllTest(Users usingUsers) { UserServices userServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newUserServices(); UserPhotosServices userPhotosServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory() .newUserPhotosServices(); if (this.users == null) { users = usingUsers; users.setUp(userServices).withPhotos(userPhotosServices); } userServices.addUserToCollection(users.admin(), collection); userServices.addUserToCollection(users.alice(), collection); userServices.addUserToCollection(users.bob(), collection); userServices.addUserToCollection(users.charles(), collection); userServices.addUserToCollection(users.chuckNorris(), collection); userServices.addUserToCollection(users.dakotaLIndien(), collection); userServices.addUserToCollection(users.edouardLechat(), collection); userServices.addUserToCollection(users.gandalfLeblanc(), collection); userServices.addUserToCollection(users.robin(), collection); userServices.addUserToCollection(users.sasquatch(), collection); return this; } public ModulesAndMigrationsTestFeatures andUsersWithReadAccess(String... usersWithReadAccess) { UserServices userServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newUserServices(); RecordServices recordServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newRecordServices(); Transaction transaction = new Transaction(); for (String userWithReadAccess : usersWithReadAccess) { User user = userServices.getUserInCollection(userWithReadAccess, collection); user.setCollectionReadAccess(true); transaction.add(user.getWrappedRecord()); } try { recordServices.execute(transaction); } catch (RecordServicesException e) { throw new RuntimeException(e); } return this; } public ModulesAndMigrationsTestFeatures andUsersWithWriteAccess(String... usersWithWriteAccess) { UserServices userServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newUserServices(); RecordServices recordServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newRecordServices(); Transaction transaction = new Transaction(); for (String userWithReadAccess : usersWithWriteAccess) { User user = userServices.getUserInCollection(userWithReadAccess, collection); user.setCollectionReadAccess(true); user.setCollectionWriteAccess(true); transaction.add(user.getWrappedRecord()); } try { recordServices.execute(transaction); } catch (RecordServicesException e) { throw new RuntimeException(e); } return this; } public ModulesAndMigrationsTestFeatures andUsersWithWriteAndDeleteAccess(String... usersWithWriteAndDeleteAccess) { UserServices userServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newUserServices(); RecordServices recordServices = factoriesTestFeatures.getConstellioFactories().getModelLayerFactory().newRecordServices(); Transaction transaction = new Transaction(); for (String userWithReadAccess : usersWithWriteAndDeleteAccess) { User user = userServices.getUserInCollection(userWithReadAccess, collection); user.setCollectionReadAccess(true); user.setCollectionWriteAccess(true); user.setCollectionDeleteAccess(true); transaction.add(user.getWrappedRecord()); } try { recordServices.execute(transaction); } catch (RecordServicesException e) { throw new RuntimeException(e); } return this; } }