package com.lordofthejars.nosqlunit.elasticsearch.integration;
import static com.lordofthejars.nosqlunit.elasticsearch.EmbeddedElasticsearch.EmbeddedElasticsearchRuleBuilder.newEmbeddedElasticsearchRule;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.fail;
import java.io.ByteArrayInputStream;
import org.elasticsearch.client.Client;
import org.elasticsearch.node.Node;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import com.lordofthejars.nosqlunit.core.NoSqlAssertionError;
import com.lordofthejars.nosqlunit.elasticsearch.ElasticsearchOperation;
import com.lordofthejars.nosqlunit.elasticsearch.EmbeddedElasticsearch;
import com.lordofthejars.nosqlunit.elasticsearch.EmbeddedElasticsearchInstancesFactory;
public class WhenExpectedDataShouldBeCompared {
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" +
"}";
private static final String ELASTICSEARCH_TWO_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" +
" \"document\":[\n" +
" {\n" +
" \"index\":{\n" +
" \"indexName\":\"tweeter\",\n" +
" \"indexType\":\"tweet\",\n" +
" \"indexId\":\"2\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"data\":{\n" +
" \"name\":\"c\",\n" +
" \"msg\":\"d\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
private static final String ELASTICSEARCH_DATA_INDEX_NOT_FOUND = "{\n" +
" \"documents\":[\n" +
" {\n" +
" \"document\":[\n" +
" {\n" +
" \"index\":{\n" +
" \"indexName\":\"tweeter\",\n" +
" \"indexType\":\"tweet\",\n" +
" \"indexId\":\"2\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"data\":{\n" +
" \"name\":\"a\",\n" +
" \"msg\":\"b\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
private static final String ELASTICSEARCH_DATA_NOT_FOUND = "{\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\":\"c\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
@ClassRule
public static EmbeddedElasticsearch embeddedElasticsearch = newEmbeddedElasticsearchRule().build();
private ElasticsearchOperation elasticsearchOperation;
@Before
public void setUp() {
Node defaultEmbeddedInstance = EmbeddedElasticsearchInstancesFactory.getInstance().getDefaultEmbeddedInstance();
Client client = defaultEmbeddedInstance.client();
elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.deleteAll();
}
@Test
public void no_exception_should_be_thrown_if_data_is_expected() {
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
boolean result = elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
assertThat(result, is(true));
}
@Test
public void exception_should_be_thrown_if_different_number_of_documents() {
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
try {
elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_TWO_DATA.getBytes()));
fail();
} catch(NoSqlAssertionError e) {
assertThat(e.getMessage(), is("Expected number of documents are 2 but 1 has been found."));
}
}
@Test
public void exception_should_be_thrown_if_index_not_found() {
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
try {
elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_DATA_INDEX_NOT_FOUND.getBytes()));
fail();
} catch(NoSqlAssertionError e) {
assertThat(e.getMessage(), is("Document with index: tweeter - type: tweet - id: 2 has not returned any document."));
}
}
@Test
public void exception_should_be_thrown_if_different_() {
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
try {
elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_DATA_NOT_FOUND.getBytes()));
fail();
} catch(NoSqlAssertionError e) {
assertThat(e.getMessage(), is("Expected document for index: tweeter - type: tweet - id: 1 is {\"name\":\"a\",\"msg\":\"c\"}, but {\"name\":\"a\",\"msg\":\"b\"} was found."));
}
}
}