package com.constellio.app.servlet; import static com.constellio.app.servlet.ConstellioGetSchemaMetadatasAcceptTestRessources.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.tuple; import java.io.StringReader; import java.util.List; import com.constellio.sdk.tests.annotations.InDevelopmentTest; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.input.SAXBuilder; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.setups.Users; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.WebClient; public class ConstellioGetSchemaMetadatasAcceptTest extends ConstellioTest { RMSchemasRecordsServices rmSchemasRecordsServices; RecordServices recordServices; UserServices userServices; Users users = new Users(); @Before public void setUp() throws Exception { prepareSystem(withZeCollection().withConstellioRMModule().withAllTest(users)); startApplication(); } @After public void stopApplicationAfterTest() { stopApplication(); } @Test public void whenGetDefaultFolderSchemaMetadatasThenValidReturnedDocument() throws Exception { Document document = callGetSchemaMetadatas(zeCollection, "folder_default"); assertThat(document.getRootElement().getAttributeValue("language")).isEqualTo("fr"); assertThat(document.getRootElement().getAttributeValue("code")).isEqualTo("folder_default"); assertThat(document.getRootElement().getAttributeValue("collection")).isEqualTo("zeCollection"); assertThat(document.getRootElement().getAttributeValue("search-field")).isEqualTo("search_txt_fr"); List<Element> metadatas = document.getRootElement().getChildren("metadata"); Element keywordMetadata = find("keywords", metadatas); assertThat(keywordMetadata.getAttributeValue("code")).isEqualTo("keywords"); assertThat(keywordMetadata.getAttributeValue("title")).isEqualTo("Mots-clés"); assertThat(keywordMetadata.getAttributeValue("type")).isEqualTo("STRING"); assertThat(keywordMetadata.getAttributeValue("multivalue")).isEqualTo("true"); assertThat(keywordMetadata.getAttributeValue("solr-field")).isEqualTo("keywords_ss"); assertThat(keywordMetadata.getAttributeValue("solr-analyzed-field")).isEqualTo("keywords_txt_fr"); Element typeMetadata = find("type", metadatas); assertThat(typeMetadata.getAttributeValue("code")).isEqualTo("type"); assertThat(typeMetadata.getAttributeValue("title")).isEqualTo("Type"); assertThat(typeMetadata.getAttributeValue("type")).isEqualTo("REFERENCE"); assertThat(typeMetadata.getAttributeValue("multivalue")).isEqualTo("false"); assertThat(typeMetadata.getAttributeValue("solr-field")).isEqualTo("typeId_s"); } @Test public void whenGetDefaultFolderSchemaMetadatasFromTypeAndLabelThenValidReturnedDocument() throws Exception { Document document = callGetSchemaMetadatasWithType(zeCollection, "folder", "Dossier"); assertThat(document.getRootElement().getAttributeValue("code")).isEqualTo(zeCollection); Element schema = document.getRootElement().getChildren("schema").get(0); assertThat(schema.getAttributes()).extracting("name", "value").contains( expectedFolderDefaultSchemaMetadatas() ); List<Element> metadatas = schema.getChildren("metadata"); Element keywordMetadata = find("keywords", metadatas); assertThat(keywordMetadata.getAttributes()).extracting("name", "value").contains( expectedKeywordMetadatas() ); Element typeMetadata = find("type", metadatas); assertThat(typeMetadata.getAttributes()).extracting("name", "value").contains( expectedTypeMetadatas() ); } @Test public void whenGetAllFolderSchemasAndMetadatasFromTypeThenValidReturnedDocument() throws Exception { Document document = callGetSchemaMetadatasWithType(zeCollection, "document"); assertThat(document.getRootElement().getAttributeValue("code")).isEqualTo(zeCollection); List<Element> schemas = document.getRootElement().getChildren("schema"); Element schemaWithLabelDocument = find("document_default", schemas); Element schemaWithLabelCourriel = find("document_email", schemas); assertThat(schemaWithLabelDocument.getAttributes()).extracting("name", "value").contains( expectedDocumentDefaultSchemaMetadatas() ); assertThat(schemaWithLabelCourriel.getAttributes()).extracting("name", "value").contains( expectedDocumentEmailSchemaMetadatas() ); List<Element> documentMetadatas = schemaWithLabelDocument.getChildren("metadata"); Element documentKeywordMetadata = find("keywords", documentMetadatas); assertThat(documentKeywordMetadata.getAttributes()).extracting("name", "value").contains( expectedKeywordMetadatas() ); List<Element> courrielMetadatas = schemaWithLabelCourriel.getChildren("metadata"); Element courrielKeywordMetadata = find("keywords", courrielMetadatas); assertThat(courrielKeywordMetadata.getAttributes()).extracting("name", "value").contains( expectedKeywordMetadatas() ); } @Test public void whenGetDdvDocumentTypeFromTypeReThenValidReturnedDocument() throws Exception { Document document = callGetSchemaMetadatasWithType(zeCollection, "ddv", "Types de documents"); assertThat(document.getRootElement().getAttributeValue("code")).isEqualTo(zeCollection); Element schema = document.getRootElement().getChildren("schema").get(0); assertThat(schema.getAttributes()).extracting("name", "value").contains( expectedDdvDocumentMetadatas() ); List<Element> metadatas = schema.getChildren("metadata"); Element allauthorizationsMetadata = find("allauthorizations", metadatas); assertThat(allauthorizationsMetadata.getAttributes()).extracting("name", "value").contains( expectedAllauthorizationsMetadatas() ); } @Test public void whenGetAllDdvFromTypeThenValidReturnedDocument() throws Exception { Document document = callGetSchemaMetadatasWithType(zeCollection, "ddv"); assertThat(document.getRootElement().getAttributeValue("code")).isEqualTo(zeCollection); List<Element> schemas = document.getRootElement().getChildren("schema"); Element schemaWithLabelDocument = find("ddvDocumentType_default", schemas); Element schemaWithLabelContainer = find("ddvContainerRecordType_default", schemas); assertThat(schemaWithLabelDocument.getAttributes()).extracting("name", "value").contains( expectedDdvDocumentMetadatas() ); assertThat(schemaWithLabelContainer.getAttributes()).extracting("name", "value").contains( expectedDdvContainerMetadatas() ); List<Element> documentMetadatas = schemaWithLabelDocument.getChildren("metadata"); Element documentAllAuthorizationsMetadata = find("allauthorizations", documentMetadatas); assertThat(documentAllAuthorizationsMetadata.getAttributes()).extracting("name", "value").contains( expectedAllauthorizationsMetadatas() ); List<Element> containerMetadatas = schemaWithLabelContainer.getChildren("metadata"); Element containerAllAuthorizationsMetadata = find("allauthorizations", containerMetadatas); assertThat(containerAllAuthorizationsMetadata.getAttributes()).extracting("name", "value").contains( expectedAllauthorizationsMetadatas() ); } private Element find(String code, List<Element> metadatas) { for (Element metadata : metadatas) { if (code.equals(metadata.getAttributeValue("code"))) { return metadata; } } throw new RuntimeException("No such metadata with code '" + code + "'"); } private Document callGetSchemaMetadatas(String collection, String schema) throws Exception { String url = "http://localhost:7070/constellio/getSchemaMetadatas?collection=" + collection + "&schema=" + schema; WebClient webClient = new WebClient(); Page page = webClient.getPage(url); String response = page.getWebResponse().getContentAsString("UTF-8"); SAXBuilder builder = new SAXBuilder(); //builder.ge return builder.build(new StringReader(response)); } private Document callGetSchemaMetadatasWithType(String collection, String type) throws Exception { String url = "http://localhost:7070/constellio/getSchemaMetadatas?collection=" + collection + "&type=" + type; WebClient webClient = new WebClient(); Page page = webClient.getPage(url); String response = page.getWebResponse().getContentAsString("UTF-8"); SAXBuilder builder = new SAXBuilder(); //builder.ge return builder.build(new StringReader(response)); } private Document callGetSchemaMetadatasWithType(String collection, String type, String label) throws Exception { label = label.replace(" ", "%20"); String url = "http://localhost:7070/constellio/getSchemaMetadatas?collection=" + collection + "&type=" + type + "&label=" + label; WebClient webClient = new WebClient(); Page page = webClient.getPage(url); String response = page.getWebResponse().getContentAsString("UTF-8"); SAXBuilder builder = new SAXBuilder(); //builder.ge return builder.build(new StringReader(response)); } }