package com.constellio.app.ui.pages.management.schemas.metadata; import com.constellio.app.entities.schemasDisplay.MetadataDisplayConfig; import com.constellio.app.entities.schemasDisplay.enums.MetadataDisplayType; import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.services.schemasDisplay.SchemasDisplayManager; import com.constellio.app.ui.entities.FormMetadataVO; import com.constellio.model.entities.Language; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.FakeSessionContext; import com.constellio.sdk.tests.MockedNavigation; import com.constellio.sdk.tests.schemas.TestsSchemasSetup; import com.constellio.sdk.tests.schemas.TestsSchemasSetup.*; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import java.util.HashMap; import java.util.Map; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.*; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; public class AddEditMetadataPresenterAcceptanceTest extends ConstellioTest { TestsSchemasSetup setup = new TestsSchemasSetup(zeCollection); ZeSchemaMetadatas zeSchema = setup.new ZeSchemaMetadatas(); ZeCustomSchemaMetadatas zeCustomSchema = setup.new ZeCustomSchemaMetadatas(); AddEditMetadataPresenter presenter; @Mock AddEditMetadataViewImpl view; MockedNavigation navigator; Map<String, String> newLabels = new HashMap<>(); @Before public void setUp() throws Exception { prepareSystem( withZeCollection() ); navigator = new MockedNavigation(); defineSchemasManager() .using(setup.andCustomSchema().withAStringMetadataInCustomSchema(whichIsMultivalue, whichIsSearchable) .withAStringMetadata(whichIsSortable, whichIsEnabled)); when(view.getSessionContext()).thenReturn(FakeSessionContext.adminInCollection(zeCollection)); when(view.getCollection()).thenReturn(zeCollection); when(view.getConstellioFactories()).thenReturn(getConstellioFactories()); when(view.navigate()).thenReturn(navigator); presenter = new AddEditMetadataPresenter(view); Map<String, String> parameters = new HashMap<>(); parameters.put("schemaTypeCode", setup.zeCustomSchemaTypeCode()); presenter.setParameters(parameters); } @Test public void givenNewMetadataWhenGetFormThenNullForm() throws Exception { FormMetadataVO resultVO = presenter.getFormMetadataVO(); assertThat(resultVO).isNull(); } //TODO Maxime Broken @Test public void givenEditMetadataWhenGetFormThenCorrectForm() throws Exception { Metadata stringDefault = zeSchema.stringMetadata(); presenter.setSchemaCode(zeSchema.code()); presenter.setMetadataCode(stringDefault.getCode()); FormMetadataVO resultVO = presenter.getFormMetadataVO(); assertThat(resultVO).isNotNull(); assertThat(resultVO.getCode()).isEqualTo(stringDefault.getCode()); assertThat(resultVO.getLabel("fr")).isEqualTo(stringDefault.getLabel(Language.French)); } @Test public void givenNewMetadataFormFilledWhenSaveButtonClickThenMetadataSaved() throws Exception { presenter.setSchemaCode(zeSchema.code()); newLabels.put("fr", "zeTitle"); FormMetadataVO newMetadataForm = new FormMetadataVO(zeSchema.code() + "_zeMetadataCode", MetadataValueType.BOOLEAN, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.FIELD, MetadataDisplayType.VERTICAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, false); Metadata result = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection) .getMetadata(zeSchema.code() + "_USRzeMetadataCode"); assertThat(result).isNotNull(); assertThat(result.getCode()).isEqualTo(zeSchema.code() + "_USRzeMetadataCode"); assertThat(result.getLabel(Language.French)).isEqualTo("zeTitle"); assertThat(result.getType()).isEqualTo(MetadataValueType.BOOLEAN); assertThat(result.isDefaultRequirement()).isFalse(); assertThat(result.isEnabled()).isTrue(); assertThat(result.isSchemaAutocomplete()).isFalse(); assertThat(result.isMultivalue()).isFalse(); assertThat(result.isSortable()).isFalse(); assertThat(result.isDuplicable()).isFalse(); } //TODO Maxime Broken @Test@Test public void givenNewMetadataFormFromCustomSchemFilledWhenSaveButtonClickThenMetadataSaved() throws Exception { doNothing().when(navigator).to().listSchema(zeCustomSchema.code()); presenter.setSchemaCode(zeCustomSchema.code()); newLabels.put("fr", "zeTitle"); FormMetadataVO newMetadataForm = new FormMetadataVO(zeSchema.code() + "_zeMetadataCode", MetadataValueType.BOOLEAN, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.FIELD, MetadataDisplayType.VERTICAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, false); Metadata result = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection) .getMetadata(zeCustomSchema.code() + "_USRzeMetadataCode"); assertThat(result).isNotNull(); assertThat(result.getCode()).isEqualTo(zeCustomSchema.code() + "_USRzeMetadataCode"); assertThat(result.getLabel(Language.French)).isEqualTo("zeTitle"); assertThat(result.getType()).isEqualTo(MetadataValueType.BOOLEAN); assertThat(result.isDefaultRequirement()).isFalse(); assertThat(result.isEnabled()).isTrue(); assertThat(result.isSchemaAutocomplete()).isFalse(); assertThat(result.isMultivalue()).isFalse(); assertThat(result.isSortable()).isFalse(); assertThat(result.isDuplicable()).isFalse(); } @Test public void givenEditMetadataFormFilledWhenSaveButtonClickThenMetadataSaved() throws Exception { presenter.setSchemaCode(zeSchema.code()); Metadata stringMeta = zeSchema.stringMetadata(); newLabels.put("fr", "zeTitleChanged"); FormMetadataVO newMetadataForm = new FormMetadataVO(stringMeta.getCode(), MetadataValueType.STRING, false, null, "", newLabels, false, false, true, false, false, MetadataInputType.FIELD, MetadataDisplayType.VERTICAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, true); Metadata result = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection).getMetadata( stringMeta.getCode()); assertThat(result).isNotNull(); assertThat(result.getCode()).isEqualTo(stringMeta.getCode()); assertThat(result.getLabel(Language.French)).isEqualTo("zeTitleChanged"); assertThat(result.getType()).isEqualTo(MetadataValueType.STRING); assertThat(result.isDefaultRequirement()).isFalse(); assertThat(result.isEnabled()).isTrue(); assertThat(result.isSchemaAutocomplete()).isFalse(); assertThat(result.isMultivalue()).isFalse(); assertThat(result.isSortable()).isTrue(); assertThat(result.isDuplicable()).isFalse(); } @Test public void givenEditMetadataFormFromCustomSchemaFilledWhenSaveButtonClickThenMetadataSaved() throws Exception { presenter.setSchemaCode(zeCustomSchema.code()); Metadata stringMeta = zeCustomSchema.stringMetadata(); newLabels.put("fr", "zeTitleChanged"); FormMetadataVO newMetadataForm = new FormMetadataVO(stringMeta.getCode(), MetadataValueType.STRING, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.FIELD, MetadataDisplayType.HORIZONTAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, true); Metadata result = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection).getMetadata( stringMeta.getCode()); assertThat(result).isNotNull(); assertThat(result.getCode()).isEqualTo(stringMeta.getCode()); assertThat(result.getLabel(Language.French)).isEqualTo("zeTitleChanged"); assertThat(result.getType()).isEqualTo(MetadataValueType.STRING); assertThat(result.isDefaultRequirement()).isFalse(); assertThat(result.isEnabled()).isTrue(); assertThat(result.isSchemaAutocomplete()).isFalse(); assertThat(result.isMultivalue()).isFalse(); assertThat(result.isSortable()).isTrue(); assertThat(result.isDuplicable()).isFalse(); } @Test public void givenEditInheritedMetadataInputMaskThenAllSchemaSaved() throws Exception { RMSchemasRecordsServices rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); MetadataSchemasManager schemasManager = getModelLayerFactory().getMetadataSchemasManager(); MetadataSchemaTypesBuilder types = schemasManager.modify(zeCollection); Map<String, String> labels = new HashMap<>(); labels.put("fr", "zeNewSchema"); types.getDefaultSchema("zeSchemaType").create("zeMask").setInputMask("9999-9999").addLabel(Language.French, "Mask").setType(MetadataValueType.STRING); types.getSchemaType("zeSchemaType").createCustomSchema("zeNewSchema", labels).setDefaultSchema(types.getDefaultSchema("zeSchemaType")); schemasManager.saveUpdateSchemaTypes(types); Metadata zeNewSchemaMetadata = rm.schema("zeSchemaType_zeNewSchema").getMetadata("zeMask"); Metadata defaultMetadata = rm.schema("zeSchemaType_default").getMetadata("zeMask"); assertThat(zeNewSchemaMetadata.getInputMask()).isEqualTo("9999-9999"); assertThat(defaultMetadata.getInputMask()).isEqualTo("9999-9999"); presenter.setSchemaCode("zeSchemaType_zeNewSchema"); FormMetadataVO newMetadataForm = new FormMetadataVO("zeSchemaType_zeNewSchema_zeMask", MetadataValueType.STRING, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.FIELD, MetadataDisplayType.VERTICAL, false, false, true, "default", null, "AAAA-AAAA", false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, true); zeNewSchemaMetadata = rm.schema("zeSchemaType_zeNewSchema").getMetadata("zeMask"); defaultMetadata = rm.schema("zeSchemaType_default").getMetadata("zeMask"); assertThat(zeNewSchemaMetadata.getInputMask()).isEqualTo("AAAA-AAAA"); assertThat(defaultMetadata.getInputMask()).isEqualTo("AAAA-AAAA"); } @Test public void givenEditMetadataFormFromCustomSchemaFilledWhenSaveButtonClickThenDisplayConfigSaved() throws Exception { presenter.setSchemaCode(zeCustomSchema.code()); Metadata stringMeta = zeCustomSchema.stringMetadata(); newLabels.put("fr", "zeTitleChanged"); FormMetadataVO newMetadataForm = new FormMetadataVO(stringMeta.getCode(), MetadataValueType.REFERENCE, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.RADIO_BUTTONS, MetadataDisplayType.HORIZONTAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, true); SchemasDisplayManager schemasDisplayManager = getAppLayerFactory().getMetadataSchemasDisplayManager(); MetadataDisplayConfig metadataDisplayConfig = schemasDisplayManager .getMetadata(zeCollection, stringMeta.getCode()); assertThat(metadataDisplayConfig).isNotNull(); assertThat(metadataDisplayConfig.getInputType()).isEqualTo(MetadataInputType.RADIO_BUTTONS); assertThat(metadataDisplayConfig.getDisplayType()).isEqualTo(MetadataDisplayType.HORIZONTAL); newMetadataForm = new FormMetadataVO(stringMeta.getCode(), MetadataValueType.REFERENCE, false, null, "", newLabels, false, false, false, false, false, MetadataInputType.RADIO_BUTTONS, MetadataDisplayType.VERTICAL, false, false, true, "default", null, null, false, view.getSessionContext()); presenter.preSaveButtonClicked(newMetadataForm, true); schemasDisplayManager = getAppLayerFactory().getMetadataSchemasDisplayManager(); metadataDisplayConfig = schemasDisplayManager .getMetadata(zeCollection, stringMeta.getCode()); assertThat(metadataDisplayConfig).isNotNull(); assertThat(metadataDisplayConfig.getInputType()).isEqualTo(MetadataInputType.RADIO_BUTTONS); assertThat(metadataDisplayConfig.getDisplayType()).isEqualTo(MetadataDisplayType.VERTICAL); } }