package com.constellio.app.ui.pages.management.taxonomy;
import static com.constellio.app.ui.i18n.i18n.$;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.api.extensions.taxonomies.TaxonomyManagementClassifiedType;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.constants.RMTaxonomies;
import com.constellio.app.modules.rm.wrappers.Category;
import com.constellio.app.ui.entities.MetadataSchemaVO;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.UserVO;
import com.constellio.app.ui.framework.data.RecordVODataProvider;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.app.ui.params.ParamUtils;
import com.constellio.model.services.records.RecordServices;
import com.constellio.sdk.tests.ConstellioTest;
public class TaxonomyManagementPresenterAcceptTest extends ConstellioTest {
RecordServices recordServices;
RMTestRecords records = new RMTestRecords(zeCollection);
@Mock TaxonomyManagementView view;
@Mock SessionContext sessionContext;
@Mock RecordVO recordVO;
@Mock UserVO userVO;
@Mock MetadataSchemaVO metadataSchemaVO;
TaxonomyManagementPresenter presenter;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
.withFoldersAndContainersOfEveryStatus().withEvents()
);
inCollection(zeCollection).setCollectionTitleTo("Collection de test");
recordServices = getModelLayerFactory().newRecordServices();
when(view.getConstellioFactories()).thenReturn(getConstellioFactories());
when(view.getCollection()).thenReturn(zeCollection);
when(view.getSessionContext()).thenReturn(sessionContext);
when(sessionContext.getCurrentCollection()).thenReturn(zeCollection);
when(userVO.getUsername()).thenReturn(admin);
when(sessionContext.getCurrentUser()).thenReturn(userVO);
when(sessionContext.getCurrentLocale()).thenReturn(Locale.FRENCH);
presenter = new TaxonomyManagementPresenter(view);
}
@Test
public void whenLoadingForRootThenNoCurrentConceptAndRightValues() {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
assertThat(presenter.conceptId).isNull();
assertThat(presenter.taxonomy.getCode()).isEqualTo(RMTaxonomies.CLASSIFICATION_PLAN);
}
@Test
public void whenLoadingForLevelOneConceptThenAllValuesAreRight() {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
paramsMap.put(TaxonomyManagementPresenter.CONCEPT_ID, records.categoryId_X);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
assertThat(presenter.conceptId).isEqualTo(records.categoryId_X);
assertThat(presenter.taxonomy.getCode()).isEqualTo(RMTaxonomies.CLASSIFICATION_PLAN);
}
@Test
public void whenGettingDataProvidersThenExpectedRecordsProvided() {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
List<RecordVODataProvider> dataProviders = presenter.getDataProviders();
RecordVODataProvider dataProvider = dataProviders.get(0);
assertThat(dataProvider.getSchema().getCode()).isEqualTo(Category.DEFAULT_SCHEMA);
assertThat(getRecordIdsFromDataProvider(dataProvider)).containsOnly(records.categoryId_X, records.categoryId_Z);
}
@Test
public void givenAdministrativeUnitWhenGetClassifiedTypeThenReturnFolderTab()
throws Exception {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.ADMINISTRATIVE_UNITS);
paramsMap.put(TaxonomyManagementPresenter.CONCEPT_ID, records.unitId_12b);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
List<TaxonomyManagementClassifiedType> classifiedTypes = presenter.getClassifiedTypes();
assertThat(classifiedTypes).extracting("countLabel").isEqualTo(asList("Nombre de dossiers",
"Nombre de règles de conservation"));
assertThat(classifiedTypes.get(0).getDataProvider().size()).isEqualTo(10);
assertThat(idsOf(classifiedTypes.get(0).getDataProvider())).containsExactly(
records.folder_B52, records.folder_B02, records.folder_B04, records.folder_B06, records.folder_B08,
records.folder_B54, records.folder_B30, records.folder_B32, records.folder_B34, records.folder_B50);
}
private List<String> idsOf(RecordVODataProvider recordVODataProvider) {
List<String> ids = new ArrayList<>();
for (int i = 0; i < recordVODataProvider.size(); i++) {
RecordVO recordVO = recordVODataProvider.getRecordVO(i);
ids.add(recordVO.getId());
}
return ids;
}
@Test
public void givenCategoryWhenGetClassifiedTypeThenReturnFolderTab()
throws Exception {
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
paramsMap.put(TaxonomyManagementPresenter.CONCEPT_ID, "categoryId_Z112");
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
List<TaxonomyManagementClassifiedType> classifiedTypes = presenter.getClassifiedTypes();
assertThat(classifiedTypes).extracting("countLabel").isEqualTo(asList("Nombre de dossiers"));
assertThat(classifiedTypes.get(0).getDataProvider().size()).isEqualTo(5);
assertThat(idsOf(classifiedTypes.get(0).getDataProvider())).containsExactly(
records.folder_A08, records.folder_A07, records.folder_A09, records.folder_C03, records.folder_B03);
}
@Test
public void whenDeletingANotDeletableTaxonomyThenShowErrorMessage() {
when(recordVO.getId()).thenReturn(records.categoryId_X100);
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
paramsMap.put(TaxonomyManagementPresenter.CONCEPT_ID, records.categoryId_X);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
presenter.deleteButtonClicked(recordVO);
verify(view).showErrorMessage($("TaxonomyManagementView.cannotDelete"));
}
@Test
public void whenDeletingADeletableTaxonomyThenOk() {
when(recordVO.getId()).thenReturn(records.categoryId_X13);
when(recordVO.getSchema()).thenReturn(metadataSchemaVO);
when(metadataSchemaVO.getCode()).thenReturn(Category.DEFAULT_SCHEMA);
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put(TaxonomyManagementPresenter.TAXONOMY_CODE, RMTaxonomies.CLASSIFICATION_PLAN);
paramsMap.put(TaxonomyManagementPresenter.CONCEPT_ID, records.categoryId_X);
String params = ParamUtils.addParams(null, paramsMap);
presenter.forParams(params);
presenter.deleteButtonClicked(recordVO);
presenter.forParams(params);
List<RecordVODataProvider> dataProviders = presenter.getDataProviders();
RecordVODataProvider dataProvider = dataProviders.get(0);
assertThat(dataProvider.getSchema().getCode()).isEqualTo(Category.DEFAULT_SCHEMA);
assertThat(getRecordIdsFromDataProvider(dataProvider)).containsOnly(records.categoryId_X100);
verify(view).refreshTable();
}
private List<String> getRecordIdsFromDataProvider(RecordVODataProvider dataProvider) {
List<String> IDs = new ArrayList<>();
for (RecordVO recordVO : dataProvider.listRecordVOs(0, dataProvider.size())) {
IDs.add(recordVO.getId());
}
return IDs;
}
}