package com.constellio.app.ui.pages.management.extractors; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Locale; import java.util.regex.Pattern; import com.constellio.sdk.tests.MockedNavigation; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Email; import com.constellio.app.ui.application.CoreViews; import com.constellio.app.ui.entities.MetadataExtractorVO; import com.constellio.app.ui.entities.MetadataSchemaTypeVO; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder; import com.constellio.app.ui.framework.builders.MetadataSchemaTypeToVOBuilder; import com.constellio.app.ui.framework.builders.MetadataToVOBuilder; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.pages.management.extractors.builders.RegexConfigToVOBuilder; import com.constellio.app.ui.pages.management.extractors.entities.RegexConfigVO; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.RegexConfig; import com.constellio.model.entities.schemas.RegexConfig.RegexConfigType; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; public class AddEditMetadataExtractorPresenterAcceptTest extends ConstellioTest { @Mock AddEditMetadataExtractorView view; MockedNavigation navigator; AddEditMetadataExtractorPresenter presenter; SessionContext sessionContext; RMTestRecords rmTestRecords = new RMTestRecords(zeCollection); MetadataSchemasManager metadataSchemasManager; // MetadataSchemaTypes types; MetadataSchemaTypeToVOBuilder metadataSchemaTypeToVOBuilder = new MetadataSchemaTypeToVOBuilder(); MetadataSchemaToVOBuilder metadataSchemaToVOBuilder = new MetadataSchemaToVOBuilder(); MetadataToVOBuilder metadataToVOBuilder = new MetadataToVOBuilder(); RegexConfigToVOBuilder regexConfigToVOBuilder = new RegexConfigToVOBuilder(); @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withRMTest(rmTestRecords).withAllTestUsers() ); navigator = new MockedNavigation(); metadataSchemasManager = getModelLayerFactory().getMetadataSchemasManager(); sessionContext = FakeSessionContext.adminInCollection(zeCollection); sessionContext.setCurrentLocale(Locale.FRENCH); when(view.getSessionContext()).thenReturn(sessionContext); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); when(view.navigate()).thenReturn(navigator); presenter = new AddEditMetadataExtractorPresenter(view); } @Test public void givenUserWithPageAccessWhenHasPageAccessThenReturnFalse() throws Exception { assertThat(presenter.hasPageAccess("", rmTestRecords.getAdmin())).isTrue(); } @Test public void givenUserWithoutPageAccessWhenHasPageAccessThenReturnFalse() throws Exception { assertThat(presenter.hasPageAccess("", rmTestRecords.getBob_userInAC())).isFalse(); } @Test public void whenBackButtonClickedThenOk() throws Exception { presenter.backButtonClicked(); verify(view.navigate().to()).listMetadataExtractors(); } @Test public void whenCancelButtonClickedThenOk() throws Exception { presenter.cancelButtonClicked(); verify(view.navigate().to()).listMetadataExtractors(); } @Test public void givenAddActionMetadataExtractorWhenSaveButtonClickedThenAdded() throws Exception { presenter.forParams(""); MetadataExtractorVO metadataExtractorVO = presenter.getMetadataExtractorVO(); MetadataSchemaType schemaType = types().getSchemaType(Email.SCHEMA_TYPE); MetadataSchemaTypeVO metadataSchemaTypeVO = metadataSchemaTypeToVOBuilder.build(schemaType, sessionContext); MetadataSchema schema = types().getSchema(Email.SCHEMA); MetadataSchemaVO schemaVo = metadataSchemaToVOBuilder.build(schema, VIEW_MODE.FORM, sessionContext); presenter.schemaTypeSelected(metadataSchemaTypeVO); presenter.schemaSelected(schemaVo); Metadata metadata = types() .getMetadata(schemaVo.getCode() + "_" + Email.DESCRIPTION); MetadataVO metadataVO = metadataToVOBuilder.build(metadata, schemaVo, sessionContext); metadataExtractorVO.setMetadataVO(metadataVO); RegexConfigVO regexConfigVO = new RegexConfigVO("inputMetadata", "regex", "value", RegexConfigType.TRANSFORMATION); metadataExtractorVO.setProperties(Arrays.asList("property1")); metadataExtractorVO.setStyles(Arrays.asList("style1")); metadataExtractorVO.setRegexes(Arrays.asList(regexConfigVO)); presenter.saveButtonClicked(); verify(view.navigate().to()).listMetadataExtractors(); assertThat(types().getMetadata(schemaVo.getCode() + "_" + Email.DESCRIPTION).getPopulateConfigs().getStyles()) .isEqualTo(Arrays.asList("style1")); assertThat(types().getMetadata(schemaVo.getCode() + "_" + Email.DESCRIPTION).getPopulateConfigs().getProperties()) .isEqualTo(Arrays.asList("property1")); assertThat(types().getMetadata(schemaVo.getCode() + "_" + Email.DESCRIPTION).getPopulateConfigs().getRegexes()) .hasSize(1); RegexConfig regexConfig = types().getMetadata(schemaVo.getCode() + "_" + Email.DESCRIPTION).getPopulateConfigs() .getRegexes().get(0); assertThat(regexConfig.getInputMetadata()).isEqualTo(regexConfigVO.getInputMetadata()); assertThat(regexConfig.getValue()).isEqualTo(regexConfigVO.getValue()); assertThat(regexConfig.getRegex().toString()).isEqualTo(Pattern.compile(regexConfigVO.getRegex()).toString()); assertThat(regexConfig.getRegexConfigType()).isEqualTo(regexConfigVO.getRegexConfigType()); } @Test public void givenEditActionWhenSaveButtonClickedThenUpdate() throws Exception { String metadataCode = Document.DEFAULT_SCHEMA + "_" + Document.TITLE; presenter.forParams(metadataCode); MetadataExtractorVO metadataExtractorVO = presenter.getMetadataExtractorVO(); metadataExtractorVO.setProperties(Arrays.asList("property1")); metadataExtractorVO.setStyles(Arrays.asList("style1")); RegexConfigVO regexConfigVO = new RegexConfigVO("inputMetadata", "regex", "value", RegexConfigType.SUBSTITUTION); metadataExtractorVO.setRegexes(Arrays.asList(regexConfigVO)); presenter.saveButtonClicked(); verify(view.navigate().to()).listMetadataExtractors(); assertThat(types().getMetadata(metadataCode).getPopulateConfigs().getStyles()).isEqualTo(Arrays.asList("style1")); assertThat(types().getMetadata(metadataCode).getPopulateConfigs().getProperties()).isEqualTo(Arrays.asList("property1")); assertThat(types().getMetadata(metadataCode).getPopulateConfigs().getRegexes()).hasSize(1); RegexConfig regexConfig = types().getMetadata(metadataCode).getPopulateConfigs().getRegexes().get(0); assertThat(regexConfig.getInputMetadata()).isEqualTo(regexConfigVO.getInputMetadata()); assertThat(regexConfig.getValue()).isEqualTo(regexConfigVO.getValue()); assertThat(regexConfig.getRegex().toString()).isEqualTo(Pattern.compile(regexConfigVO.getRegex()).toString()); assertThat(regexConfig.getRegexConfigType()).isEqualTo(regexConfigVO.getRegexConfigType()); } @Test public void givenEditActionThenNoSameMetadataInMetadataRegexList() throws Exception { String metadataCode = Document.DEFAULT_SCHEMA + "_" + Document.TITLE; presenter.forParams(metadataCode); assertThat(presenter.getMetadataVOsForRegexes(Document.DEFAULT_SCHEMA, presenter.getMetadataVO())).extracting("code") .doesNotContain(metadataCode); } private MetadataSchemaTypes types() { return metadataSchemasManager.getSchemaTypes(zeCollection); } }