package com.constellio.app.modules.es.services;
import static com.constellio.model.entities.schemas.Schemas.IDENTIFIER;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import org.eclipse.jetty.server.Server;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.modules.es.connectors.http.utils.WebsitesUtils;
import com.constellio.app.modules.es.connectors.spi.ConnectorLogger;
import com.constellio.app.modules.es.connectors.spi.ConsoleConnectorLogger;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpDocument;
import com.constellio.app.modules.es.model.connectors.http.ConnectorHttpInstance;
import com.constellio.app.modules.es.sdk.TestConnectorEventObserver;
import com.constellio.app.modules.es.services.crawler.ConnectorCrawler;
import com.constellio.app.modules.es.services.crawler.DefaultConnectorEventObserver;
import com.constellio.model.services.records.RecordServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.SlowTest;
@SlowTest
public class ConnectorManager_DeleteDocumentsAcceptanceTest extends ConstellioTest {
private static String WEBSITE = "http://localhost:4242/";
Server server;
ConnectorManager connectorManager;
RecordServices recordServices;
ESSchemasRecordsServices es;
ConnectorHttpInstance connectorInstance;
ConnectorLogger logger = new ConsoleConnectorLogger();
private String zeMimetypeCode = "zeMimetype";
private List<ConnectorHttpDocument> connectorDocuments;
private TestConnectorEventObserver eventObserver;
@Before
public void setUp()
throws Exception {
prepareSystem(withZeCollection().withConstellioESModule().withAllTestUsers());
es = new ESSchemasRecordsServices(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
connectorManager = es.getConnectorManager();
eventObserver = new TestConnectorEventObserver(es, new DefaultConnectorEventObserver(es, logger, "crawlerObserver"));
connectorManager.setCrawler(ConnectorCrawler.runningJobsSequentially(es, eventObserver).withoutSleeps());
}
@Test
public void whenIndexingAWebsiteAndDeletingConnectorDocumentsThenAllDocumentsDeleted()
throws Exception {
givenTestWebsiteInState1();
givenDataSet1Connector();
connectorDocuments = tickAndGetAllDocuments();
assertThat(connectorDocuments).isNotEmpty();
connectorManager.totallyDeleteConnectorRecordsSkippingValidation(getDataLayerFactory().newRecordDao(), connectorInstance);
assertThat(connectorDocuments()).isEmpty();
}
@Test
public void whenIndexingAWebsiteAndDeletingConnectorDocumentsThenAllDocumentsDeleted2()
throws Exception {
givenTestWebsiteInState1();
givenDataSet1Connector();
connectorDocuments = tickAndGetAllDocuments();
assertThat(connectorDocuments).isNotEmpty();
connectorManager.totallyDeleteConnectorRecordsSkippingValidation(getDataLayerFactory().newRecordDao(), connectorInstance);
assertThat(connectorDocuments()).isEmpty();
}
@After
public void tearDown()
throws Exception {
eventObserver.close();
if (server != null) {
stopWebsiteServer();
}
}
private void stopWebsiteServer() {
try {
server.stop();
server.join();
server = null;
} catch (Exception e) {
}
}
private void givenTestWebsiteInState1() {
if (server != null) {
try {
server.stop();
server.join();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
server = WebsitesUtils.startWebsiteInState1();
}
private void givenDataSet1Connector() {
connectorInstance = connectorManager.createConnector(es.newConnectorHttpInstance().setCode("zeConnector")
.setTitle("Ze connector").setEnabled(true).setSeeds(WEBSITE + "index.html"));
}
private List<ConnectorHttpDocument> tickAndGetAllDocuments() {
connectorManager.getCrawler().crawlNTimes(1);
return connectorDocuments();
}
private List<ConnectorHttpDocument> connectorDocuments() {
return es.searchConnectorHttpDocuments(where(IDENTIFIER).isNotNull());
}
}