package com.constellio.app.services.importExport; import static com.constellio.app.services.importExport.settings.model.ImportedDataEntry.asJEXLScript; import static com.constellio.model.entities.schemas.MetadataValueType.STRING; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.services.importExport.settings.SettingsImportServices; import com.constellio.app.services.importExport.settings.model.ImportedCollectionSettings; import com.constellio.app.services.importExport.settings.model.ImportedDataEntry; import com.constellio.app.services.importExport.settings.model.ImportedMetadataSchema; import com.constellio.app.services.importExport.settings.model.ImportedSettings; import com.constellio.app.services.importExport.settings.utils.SettingsXMLFileWriter; import com.constellio.data.utils.Factory; import com.constellio.data.utils.TimeProvider; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.TestUtils; import com.constellio.sdk.tests.annotations.InDevelopmentTest; import com.constellio.sdk.tests.annotations.UiTest; @InDevelopmentTest @UiTest public class RMImportServicesExamplesAcceptanceTest extends ConstellioTest { RecordServices recordServices; RMTestRecords records = new RMTestRecords(zeCollection); @Test public void createSequentialNumberBasedOnCategoryAndWhichIsReusedWithChildFolders() throws Exception { prepareSystem(withZeCollection().withConstellioRMModule().withRMTest(records).withAllTestUsers()); recordServices = getModelLayerFactory().newRecordServices(); ImportedSettings importedSettings = new ImportedSettings(); ImportedCollectionSettings zeCollectionSettings = importedSettings.newCollectionSettings(zeCollection); ImportedMetadataSchema folderSchema = zeCollectionSettings.newType(Folder.SCHEMA_TYPE).getDefaultSchema(); folderSchema.newMetadata("USRcategorySequentialNumber").setLabel("Numéro séquentiel de la rubrique").setType(STRING) .setDataEntry(ImportedDataEntry.asMetadataProvidingSequence(Folder.CATEGORY_ENTERED)).setVisibleInDisplay(false); folderSchema.newMetadata("USRsequentialNumber").setLabel("Numéro séquentiel").setType(STRING) .setVisibleInDisplay(true).setVisibleInSearchResult(true).setVisibleInTables(true).setDataEntry(asJEXLScript("" + "\nif (parentFolder.USRsequentialNumber == null) {" + "\n USRcategorySequentialNumber" + "\n} else {" + "\n parentFolder.USRsequentialNumber" + "\n}" )); getDataLayerFactory().getSequencesManager().set(records.categoryId_ZE42, 41); new SettingsImportServices(getAppLayerFactory()).importSettings(importedSettings); RMSchemasRecordsServices rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); System.out.println("Script to import : "); TestUtils.printDocument(new SettingsXMLFileWriter().writeSettings(importedSettings)); Folder folder1 = validFolderWithCategoryFactory.get().setTitle("1").setCategoryEntered(records.categoryId_X13); Folder folder2 = validFolderWithCategoryFactory.get().setTitle("2").setCategoryEntered(records.categoryId_X13); Folder folder3 = validFolderWithCategoryFactory.get().setTitle("3").setCategoryEntered(records.categoryId_ZE42); Folder childOfFolder1 = newChildFolderFactory.get().setTitle("4").setParentFolder(folder1); Folder childOfFolder2 = newChildFolderFactory.get().setTitle("5").setParentFolder(folder2); Folder childOfFolder3 = newChildFolderFactory.get().setTitle("6").setParentFolder(folder3); recordServices.execute(new Transaction(folder1, folder2, folder3, childOfFolder1, childOfFolder2, childOfFolder3)); TestUtils.assertThatRecords(folder1, folder2, folder3, childOfFolder1, childOfFolder2, childOfFolder3) .extractingMetadatas(Schemas.TITLE, rm.folder.schema().get("USRcategorySequentialNumber"), rm.folder.schema().get("USRsequentialNumber")).containsOnly( tuple("1", "1", "1"), tuple("2", "2", "2"), tuple("3", "42", "42"), tuple("4", null, "1"), tuple("5", null, "2"), tuple("6", null, "42") ); newWebDriver(); waitUntilICloseTheBrowsers(); } Factory<Folder> validFolderWithCategoryFactory = new Factory<Folder>() { @Override public Folder get() { RMSchemasRecordsServices rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); return rm.newFolder().setOpenDate(TimeProvider.getLocalDate()) .setAdministrativeUnitEntered(records.unitId_10) .setRetentionRuleEntered(records.ruleId_1); } }; Factory<Folder> newChildFolderFactory = new Factory<Folder>() { @Override public Folder get() { RMSchemasRecordsServices rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); return rm.newFolder().setOpenDate(TimeProvider.getLocalDate()); } }; }