package com.lordofthejars.nosqlunit.elasticsearch2.integration;
import com.lordofthejars.nosqlunit.elasticsearch2.ElasticsearchOperation;
import com.lordofthejars.nosqlunit.elasticsearch2.EmbeddedElasticsearch;
import com.lordofthejars.nosqlunit.elasticsearch2.EmbeddedElasticsearchInstancesFactory;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.node.Node;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.util.Map;
import static com.lordofthejars.nosqlunit.elasticsearch2.EmbeddedElasticsearch.EmbeddedElasticsearchRuleBuilder.newEmbeddedElasticsearchRule;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
import static org.junit.Assert.assertThat;
public class WhenEmbeddedElasticsearchOperationsAreRequired {
private static final String ELASTICSEARCH_DATA = "{\n" +
" \"documents\":[\n" +
" {\n" +
" \"document\":[\n" +
" {\n" +
" \"index\":{\n" +
" \"indexName\":\"tweeter\",\n" +
" \"indexType\":\"tweet\",\n" +
" \"indexId\":\"1\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"data\":{\n" +
" \"name\":\"a\",\n" +
" \"msg\":\"b\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
@ClassRule
public static final EmbeddedElasticsearch EMBEDDED_ELASTICSEARCH = newEmbeddedElasticsearchRule().build();
@After
public void removeIndexes() {
Node defaultEmbeddedInstance = EmbeddedElasticsearchInstancesFactory.getInstance().getDefaultEmbeddedInstance();
try (final Client client = defaultEmbeddedInstance.client()) {
client.admin().indices().prepareDelete("*").execute().actionGet();
client.admin().indices().prepareRefresh().execute().actionGet();
}
}
@Test
public void insert_operation_should_index_all_dataset() {
Node defaultEmbeddedInstance = EmbeddedElasticsearchInstancesFactory.getInstance().getDefaultEmbeddedInstance();
Client client = defaultEmbeddedInstance.client();
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
GetResponse document = client.prepareGet("tweeter", "tweet", "1").execute().actionGet();
Map<String, Object> documentSource = document.getSource();
//Strange a cast to Object
assertThat(documentSource, hasEntry("name", (Object) "a"));
assertThat(documentSource, hasEntry("msg", (Object) "b"));
client.close();
}
@Test
public void delete_operation_should_remove_all_Indexes() {
Node defaultEmbeddedInstance = EmbeddedElasticsearchInstancesFactory.getInstance().getDefaultEmbeddedInstance();
Client client = defaultEmbeddedInstance.client();
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
elasticsearchOperation.deleteAll();
GetResponse document = client.prepareGet("tweeter", "tweet", "1").execute().actionGet();
assertThat(document.isSourceEmpty(), is(true));
client.close();
}
@Test
public void databaseIs_operation_should_compare_all_Indexes() {
Node defaultEmbeddedInstance = EmbeddedElasticsearchInstancesFactory.getInstance().getDefaultEmbeddedInstance();
Client client = defaultEmbeddedInstance.client();
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
boolean isEqual = elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
assertThat(isEqual, is(true));
client.close();
}
}