package com.constellio.model.services.search.services; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.SchemasRecordsServices; import com.constellio.model.services.search.Elevations; import com.constellio.model.services.search.Elevations.QueryElevation.DocElevation; import com.constellio.model.services.search.SearchServices; import com.constellio.sdk.tests.SolrSafeConstellioAcceptanceTest; import com.constellio.sdk.tests.annotations.SlowTest; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @SlowTest public class ElevationServiceImplAcceptanceTest extends SolrSafeConstellioAcceptanceTest { ElevationService elevationService; private RecordServices recordServices; private SearchServices searchServices; private String query1 = "query1"; Record query1RecordElevationInZeCollection; Record query2RecordElevationInZeCollection; Record query1RecordAnswerInZeCollection; Record query1RecordElevationInBusinessCollection; private String query2 = "query2"; private MetadataSchema zeSchema; @Before public void setUp() throws Exception { givenCollection(zeCollection); givenCollection(businessCollection); recordServices = getModelLayerFactory().newRecordServices(); searchServices = getModelLayerFactory().newSearchServices(); SchemasRecordsServices zSchemas = new SchemasRecordsServices(zeCollection, getModelLayerFactory()); zeSchema = zSchemas.userSchema(); SchemasRecordsServices bSchemas = new SchemasRecordsServices(businessCollection, getModelLayerFactory()); MetadataSchema businessSchema = bSchemas.userSchema(); Transaction transaction = new Transaction(); transaction.addUpdate(query1RecordElevationInZeCollection = recordServices.newRecordWithSchema(zeSchema)); transaction.addUpdate(query2RecordElevationInZeCollection = recordServices.newRecordWithSchema(zeSchema)); transaction.addUpdate(query1RecordAnswerInZeCollection = recordServices.newRecordWithSchema(zeSchema).set( zSchemas.userUsername(), query1)); recordServices.execute(transaction); transaction = new Transaction(); transaction.addUpdate( query1RecordElevationInBusinessCollection = recordServices.newRecordWithSchema(businessSchema)); recordServices.execute(transaction); elevationService = new ElevationServiceImpl(getDataLayerFactory().getRecordsVaultServer(), getModelLayerFactory()); elevationService.elevate(query1RecordElevationInZeCollection, query1); elevationService.elevate(query2RecordElevationInZeCollection, query2); elevationService.elevate(query1RecordElevationInBusinessCollection, query1); } @Test public void whenGetZeCollectionElevationForQuery1ThenReturnQuery1RecordElevationInZeCollection() throws Exception { List<DocElevation> elevation = elevationService .getCollectionElevation(zeCollection, query1); assertThat(elevation.size()).isEqualTo(1); assertThat(elevation.get(0).getId()).isEqualTo(query1RecordElevationInZeCollection.getId()); } @Test public void whenGetZeCollectionElevationThenReturnQuery1RecordElevationInZeCollectionAndQuery2RecordElevationInZeCollection() throws Exception { Elevations elevations = elevationService.getCollectionElevations(zeCollection); assertThat(elevations.getQueryElevation(query1).getDocElevations().size()).isEqualTo(1); assertThat(elevations.getQueryElevation(query1).getDocElevations().get(0).getId()) .isEqualTo(query1RecordElevationInZeCollection.getId()); assertThat(elevations.getQueryElevation(query2).getDocElevations().size()).isEqualTo(1); assertThat(elevations.getQueryElevation(query2).getDocElevations().get(0).getId()) .isEqualTo(query2RecordElevationInZeCollection.getId()); } @Test public void givenEmptyQueryWhenElevateRecordThenRecordElevatedForSearchAllQuery() throws Exception { Record zeRecord; recordServices.add(zeRecord = recordServices.newRecordWithSchema(zeSchema)); elevationService.elevate(zeRecord, null); assertThat(elevationService.getCollectionElevation(zeCollection, "*:*")) .isEqualTo(elevationService.getCollectionElevation(zeCollection, null)) .isEqualTo(elevationService.getCollectionElevation(zeCollection, "")).isEqualTo( elevationService.getCollectionElevation(zeCollection, " ")); assertThat(elevationService.getCollectionElevation(zeCollection, "*:*").size()).isEqualTo(1); assertThat(elevationService.getCollectionElevation(zeCollection, "*:*").get(0).getId()).isEqualTo(zeRecord.getId()); } //TODO: /* Currently, because the all the Constellio collections store in one solr collection, it is not possible * to change one Constellio collection configurations for the Elevation feature without any side effect on the * other Constellio collections. */ @Ignore @Test public void whenRemoveZeCollectionElevationForQuery1ThenQuery1RecordElevationRemovedOnlyForQuery1AndZeCollection() throws Exception { elevationService.removeCollectionElevation(zeCollection, query1); List<DocElevation> elevation = elevationService .getCollectionElevation(zeCollection, query1); assertThat(elevation.size()).isEqualTo(0); elevation = elevationService .getCollectionElevation(businessCollection, query1); assertThat(elevation.size()).isEqualTo(2); assertThat(elevation).extracting("id").contains(query1RecordElevationInBusinessCollection.getId()); elevation = elevationService .getCollectionElevation(zeCollection, query2); assertThat(elevation.size()).isEqualTo(1); assertThat(elevation.get(0).getId()).isEqualTo(query2RecordElevationInZeCollection.getId()); } //TODO /* Currently, because the all the Constellio collections store in one solr collection, it is not possible * to change one Constellio collection configurations for the Elevation feature without any side effect on the * other Constellio collections. */ @Ignore @Test public void whenRemoveZeCollectionElevationThenAllZeCollectionElevationsRemoved() throws Exception { elevationService.removeCollectionElevations(zeCollection); List<DocElevation> elevation = elevationService .getCollectionElevation(zeCollection, query1); assertThat(elevation.size()).isEqualTo(0); elevation = elevationService .getCollectionElevation(businessCollection, query1); assertThat(elevation.size()).isEqualTo(2); assertThat(elevation).extracting("id").contains(query1RecordElevationInBusinessCollection.getId()); elevation = elevationService .getCollectionElevation(zeCollection, query2); assertThat(elevation.size()).isEqualTo(0); } }