package com.constellio.app.ui.pages.management.facet;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.entities.RecordVO.VIEW_MODE;
import com.constellio.app.ui.framework.builders.RecordToVOBuilder;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.app.ui.pages.management.facet.AddEditFacetConfigurationPresenter.AvailableFacetFieldMetadata;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.SchemasRecordsServices;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.FakeSessionContext;
public class FacetConfigurationServiceAcceptTest extends ConstellioTest {
@Mock AddEditFacetConfigurationView view;
FacetConfigurationPresenterService service;
SearchServices searchServices;
MetadataSchemasManager schemasManager;
RMTestRecords records = new RMTestRecords(zeCollection);
private SchemasRecordsServices schemasRecords;
private RecordServices recordServices;
private SessionContext sessionContext;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withRMTest(records).withFoldersAndContainersOfEveryStatus()
);
when(view.getConstellioFactories()).thenReturn(getConstellioFactories());
sessionContext = FakeSessionContext.adminInCollection(zeCollection);
when(view.getSessionContext()).thenReturn(sessionContext);
service = spy(new FacetConfigurationPresenterService(getConstellioFactories(),
FakeSessionContext.adminInCollection(zeCollection)));
schemasRecords = new SchemasRecordsServices(zeCollection, getModelLayerFactory());
recordServices = schemasRecords.getModelLayerFactory().newRecordServices();
searchServices = getModelLayerFactory().newSearchServices();
schemasManager = getModelLayerFactory().getMetadataSchemasManager();
recordServices.update(records.getFolder_A04().setKeywords(asList("King Dedede", "La passe de la baleine échouée")));
recordServices.update(records.getFolder_A07().setKeywords(asList("aKeyword")));
}
@Test
public void whenGetAvailableDataStoreCodeThenReturnGoodValues()
throws Exception {
List<AvailableFacetFieldMetadata> availableDataStoreCodes = service.getAvailableDataStoreCodes();
assertThat(availableDataStoreCodes).extracting("code")
.containsOnlyOnce("createdById_s", "retentionRuleId_s", "keywords_ss", "copyStatus_s", "borrowed_s", "schema_s")
.doesNotContain(Schemas.TITLE.getDataStoreCode(), Schemas.CREATED_ON.getDataStoreCode(),
Schemas.TOKENS.getDataStoreCode(), "title_s", "createdOn_dt", "content_s", "tokens_ss", "username_s",
"description_txt", "pendingAlerts_ss");
}
@Test
public void whenDataStoreCodeDoesntContainsIdThenAllowsLabel()
throws Exception {
assertThat(service.isDataStoreCodeSupportingLabelValues("schema_s")).isFalse();
assertThat(service.isDataStoreCodeSupportingLabelValues("createdById_s")).isFalse();
assertThat(service.isDataStoreCodeSupportingLabelValues("retentionRuleId_s")).isFalse();
assertThat(service.isDataStoreCodeSupportingLabelValues("keywords_ss")).isTrue();
assertThat(service.isDataStoreCodeSupportingLabelValues("copyStatus_s")).isFalse();
assertThat(service.isDataStoreCodeSupportingLabelValues("borrowed_s")).isTrue();
}
@Test
public void whenValidQueryThenEmpty() {
Map<Integer, Map<String, String>> values = new HashMap<>();
Map<String, String> map = new HashMap<>();
map.put("zeLabel", "*:*");
Map<String, String> map1 = new HashMap<>();
map1.put("zeLabel", "*:*");
values.put(1, map);
values.put(2, map1);
assertThat(service.getInvalidQuery(values)).hasSize(0);
}
@Test
public void whenInvalidQueryThenListed() {
Map<Integer, Map<String, String>> values = new HashMap<>();
Map<String, String> map = new HashMap<>();
map.put("zeLabel", "thisisinvalid");
Map<String, String> map1 = new HashMap<>();
map1.put("zeLabel", "*:*");
values.put(1, map);
values.put(2, map1);
assertThat(service.getInvalidQuery(values)).hasSize(1);
}
@Test
public void whenGetFieldFacetValuesThenObtainValidecordValues()
throws Exception {
assertThat(service.getFieldFacetValues("keywords_ss"))
.containsOnly("King Dedede", "La passe de la baleine échouée", "aKeyword");
assertThat(service.getFieldFacetValues("borrowed_s")).containsOnly("__TRUE__", "__FALSE__");
}
@Test
public void givenActiveFacetWhenIsActiveThenTrue()
throws Exception {
Record record = givenActiveFacetRecord();
RecordVO recordVO = buildRecordVO(record);
assertThat(service.isActive(recordVO)).isTrue();
}
@Test
public void givenActiveFacetWhenDeactivateThenIsActiveFalse()
throws Exception {
Record record = givenActiveFacetRecord();
service.deactivate(record.getId());
RecordVO recordVO = buildRecordVO(record);
assertThat(service.isActive(recordVO)).isFalse();
}
@Test
public void givenDeactivateFacetWhenActivateThenIsActiveTrue()
throws Exception {
Record record = givenActiveFacetRecord();
service.deactivate(record.getId());
RecordVO recordVO = buildRecordVO(record);
assertThat(service.isActive(recordVO)).isFalse();
service.activate(record.getId());
recordVO = new RecordToVOBuilder()
.build(recordServices.getDocumentById(record.getId()), VIEW_MODE.DISPLAY, sessionContext);
assertThat(service.isActive(recordVO)).isTrue();
}
//
private RecordVO buildRecordVO(Record record) {
return new RecordToVOBuilder()
.build(recordServices.getDocumentById(record.getId()), VIEW_MODE.DISPLAY, sessionContext);
}
private Record givenActiveFacetRecord() {
MetadataSchemaType type = schemasManager.getSchemaTypes(zeCollection).getSchemaType(Facet.SCHEMA_TYPE);
LogicalSearchCondition condition = LogicalSearchQueryOperators.from(type).where(schemasRecords.facet.active()).isTrue();
LogicalSearchQuery query = new LogicalSearchQuery();
query.setCondition(condition);
query.setNumberOfRows(1);
List<Record> records = searchServices.search(query);
assertThat(records.get(0).getSchemaCode()).startsWith(Facet.SCHEMA_TYPE);
return records.get(0);
}
}