package com.constellio.app.modules.rm.model; import static com.constellio.model.entities.enums.TitleMetadataPopulatePriority.PROPERTIES_FILENAME_STYLES; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.constants.RMTaxonomies; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Email; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.records.wrappers.UserDocument; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.contents.ContentManager; import com.constellio.model.services.contents.ContentVersionDataSummary; import com.constellio.model.services.migrations.ConstellioEIMConfigs; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.schemas.MetadataSchemaTypesAlteration; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.setups.Users; public class DocumentAcceptanceTest extends ConstellioTest { RMSchemasRecordsServices rm; RMTestRecords records = new RMTestRecords(zeCollection); Users users = new Users(); RecordServices recordServices; User dakota; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withAllTest(users) ); assertThat(getModelLayerFactory().getTaxonomiesManager().getPrincipalTaxonomy(zeCollection).getCode()) .isEqualTo(RMTaxonomies.ADMINISTRATIVE_UNITS); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); dakota = users.dakotaLIndienIn(zeCollection); } @Test public void whenCreatingADocumentWithoutDescriptionThenOK() throws Exception { Document document = rm.newDocument().setTitle("My document").setDescription("test").setFolder(records.folder_A03); recordServices.add(document); document.setDescription(null).setTitle("Z"); recordServices.update(document); } @Test public void givenFolderIsMovedThenDocumentPathIsUpdated() throws Exception { Document document = rm.newDocumentWithId("zeDocument").setTitle("My document").setDescription("test") .setFolder(records.folder_A03); recordServices.add(document); assertThat(document.getList(Schemas.PATH)).containsOnly( "/admUnits/unitId_10/unitId_10a/A03/zeDocument", "/plan/categoryId_X/categoryId_X100/categoryId_X110/A03/zeDocument"); recordServices.update(records.getFolder_A03().setCategoryEntered(records.categoryId_X120)); recordServices.refresh(document); assertThat(document.getList(Schemas.PATH)).containsOnly( "/admUnits/unitId_10/unitId_10a/A03/zeDocument", "/plan/categoryId_X/categoryId_X100/categoryId_X120/A03/zeDocument"); } @Test public void whenCreatingADocumentFromAMSGFileThenExtractMetadatas() throws Exception { ContentManager contentManager = rm.getModelLayerFactory().getContentManager(); ContentVersionDataSummary datasummary = contentManager.upload( getTestResourceInputStreamFactory("test.msg").create(SDK_STREAM)); Document document = rm.newDocumentWithId("zeId") .setFolder(records.folder_A05) .setTitle("a dummy title") .setContent(contentManager.createMajor(records.getAdmin(), "test.msg", datasummary)); recordServices.add(document); Email email = rm.getEmail("zeId"); assertThat(email.getSchemaCode()).isEqualTo(Email.SCHEMA); assertThat(email.getTitle()).isEqualTo("a dummy title"); assertThat(email.getEmailFrom()).isEqualTo("Addin"); assertThat(email.getEmailTo()).isEqualTo(asList("ff@doculibre.com", "ll@doculibre.com")); assertThat(email.getEmailBCCTo()).isEqualTo(asList("rccr@doculibre.com", "hcch@doculibre.com")); assertThat(email.getEmailCCTo()).isEqualTo(asList("rr@doculibre.com", "hh@doculibre.com")); assertThat(email.getEmailObject()).isEqualTo("broullion2"); } @Test public void whenCreatingADocumentFromAMSGFileUsingACustomSchemaThenDoesNotExtractMetadatas() throws Exception { getModelLayerFactory().getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchemaType(Document.SCHEMA_TYPE).createCustomSchema("aCustomSchema"); } }); ContentManager contentManager = rm.getModelLayerFactory().getContentManager(); ContentVersionDataSummary datasummary = contentManager.upload( getTestResourceInputStreamFactory("test.msg").create(SDK_STREAM)); Document document = rm.newDocumentWithId("zeId") .setFolder(records.folder_A05) .setTitle("a dummy title") .setContent(contentManager.createMajor(records.getAdmin(), "test.msg", datasummary)); document.changeSchemaTo("aCustomSchema"); recordServices.add(document); Document email = rm.getDocument("zeId"); assertThat(email.getSchemaCode()).isEqualTo("document_aCustomSchema"); assertThat(email.getTitle()).isEqualTo("a dummy title"); } @Test public void whenCreatingAUserDocumentFromAMSGFileThenExtractMetadatas() throws Exception { ContentManager contentManager = rm.getModelLayerFactory().getContentManager(); ContentVersionDataSummary datasummary = contentManager.upload( getTestResourceInputStreamFactory("test.msg").create(SDK_STREAM)); UserDocument userDocument = rm.newUserDocumentWithId("zeId") .setContent(contentManager.createMajor(records.getAdmin(), "test.msg", datasummary)); recordServices.add(userDocument); UserDocument email = rm.getUserDocument("zeId"); assertThat(email.getSchemaCode()).isEqualTo(UserDocument.DEFAULT_SCHEMA); assertThat(email.getTitle()).isEqualTo("test.msg"); } @Test public void givenPropertyArePreferedToFileNameWhenAddingMsgThenHasSubjectAsTitle() throws Exception { givenConfig(ConstellioEIMConfigs.TITLE_METADATA_POPULATE_PRIORITY, PROPERTIES_FILENAME_STYLES); ContentManager contentManager = rm.getModelLayerFactory().getContentManager(); ContentVersionDataSummary datasummary = contentManager.upload( getTestResourceInputStreamFactory("test.msg").create(SDK_STREAM)); UserDocument userDocument = rm.newUserDocumentWithId("zeId") .setContent(contentManager.createMajor(records.getAdmin(), "test.msg", datasummary)); recordServices.add(userDocument); UserDocument email = rm.getUserDocument("zeId"); assertThat(email.getSchemaCode()).isEqualTo(UserDocument.DEFAULT_SCHEMA); assertThat(email.getTitle()).isEqualTo("broullion2"); } @Test public void whenCreatingADocumentWithAMicrosofContentThenConverted() throws Exception { ContentManager contentManager = getModelLayerFactory().getContentManager(); ContentVersionDataSummary version1 = contentManager.upload(getTestResourceInputStream("test.docx")); ContentVersionDataSummary version2 = contentManager.upload(getTestResourceInputStream("test2.docx")); Document wordDocument = newDocumentWithContent(contentManager.createMajor(dakota, "test.docx", version1)); recordServices.add(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isTrue(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isFalse(); contentManager.convertPendingContentForPreview(); recordServices.refresh(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isFalse(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isTrue(); wordDocument.getContent().updateContent(dakota, version2, false); recordServices.update(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isTrue(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isFalse(); contentManager.convertPendingContentForPreview(); recordServices.refresh(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isFalse(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isTrue(); wordDocument.setContent(contentManager.createMajor(dakota, "test.docx", version1)); recordServices.update(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isTrue(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isTrue(); contentManager.convertPendingContentForPreview(); recordServices.refresh(wordDocument); assertThat(wordDocument.isMarkedForPreviewConversion()).isFalse(); assertThat(contentManager.hasContentPreview(wordDocument.getContent().getCurrentVersion().getHash())).isTrue(); } @Test public void whenCreatingADocumentThenOnlySupportedTypesAreMarkedForConversion() throws Exception { ContentManager contentManager = getModelLayerFactory().getContentManager(); ContentVersionDataSummary version = contentManager.upload(getTestResourceInputStream("test.docx")); Transaction transaction = new Transaction(); Document docWithDoc = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.doc", version))); Document docWithXls = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.xls", version))); Document doxWithPpt = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.ppt", version))); Document docWithDocx = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.docx", version))); Document docWithXlsx = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.xlsx", version))); Document docWithPptx = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.pptx", version))); Document docWithPdf = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.pdf", version))); Document docWithDot = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.dot", version))); Document docWithOdt = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.odt", version))); Document docWithMp4 = transaction.add(newDocumentWithContent(contentManager.createMajor(dakota, "test.mp4", version))); recordServices.execute(transaction); assertThat(docWithDoc.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithXls.isMarkedForPreviewConversion()).isTrue(); assertThat(doxWithPpt.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithDocx.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithXlsx.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithPptx.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithPdf.isMarkedForPreviewConversion()).isFalse(); assertThat(docWithDot.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithOdt.isMarkedForPreviewConversion()).isTrue(); assertThat(docWithMp4.isMarkedForPreviewConversion()).isFalse(); } private Document newDocumentWithContent(Content content) { return rm.newDocument().setFolder(records.getFolder_A03()).setTitle("ze title").setContent(content); } }