package services;
import helpers.ElasticsearchTestGrid;
import helpers.JsonLdConstants;
import helpers.JsonTest;
import helpers.ResourceHelpers;
import models.Resource;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import services.repository.ElasticsearchRepository;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ElasticsearchRepositoryTest extends ElasticsearchTestGrid implements JsonTest {
private static ElasticsearchRepository mElasticsearchRepo = new ElasticsearchRepository(mConfig);
@BeforeClass
public static void setupResources() throws IOException {
mElasticsearchRepo.deleteIndex(mConfig.getString("es.index.name"));
mElasticsearchRepo.createIndex(mConfig.getString("es.index.name"));
}
@Test
public void testAddAndQueryResources() throws IOException {
Resource in1 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.1.json");
Resource in2 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.2.json");
mElasticsearchRepo.addResource(in1, new HashMap<>());
mElasticsearchRepo.addResource(in2, new HashMap<>());
List<Resource> resourcesGotBack = ResourceHelpers.unwrapRecords(mElasticsearchRepo.getAll("Person"));
Assert.assertTrue(resourcesGotBack.contains(in1));
Assert.assertFalse(resourcesGotBack.contains(in2));
}
@Test
public void testUniqueFields() throws IOException {
Resource in1 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.1.json");
Resource in2 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.2.json");
mElasticsearchRepo.addResource(in1, new HashMap<>());
mElasticsearchRepo.addResource(in2, new HashMap<>());
List<Resource> resourcesGotBack = ResourceHelpers.unwrapRecords(mElasticsearchRepo.getAll("Person"));
Set<String> ids = new HashSet<String>();
Set<String> names = new HashSet<String>();
Set<String> employers = new HashSet<String>();
for (Resource r : resourcesGotBack) {
ids.add(r.getAsString(JsonLdConstants.ID));
if (r.get("name") != null) {
names.add(r.get("name").toString());
}
if (r.get("worksFor") != null) {
employers.add(r.get("worksFor").toString());
}
}
// unique fields: ids and names (in this case shall be unique, i. e.
// appearing exactly one time per Resource
Assert.assertTrue(resourcesGotBack.size() == ids.size() && ids.size() == names.size());
}
@Test
public void testGetResourcesWithWildcard() throws IOException {
Resource in1 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.1.json");
Resource in2 = getResourceFromJsonFile(
"BaseRepositoryTest/testGetResourcesWithWildcard.DB.2.json");
mElasticsearchRepo.addResource(in1, new HashMap<>());
mElasticsearchRepo.addResource(in2, new HashMap<>());
Assert.assertEquals(2, mElasticsearchRepo.getResources("\\*.@id", "info:123").size());
}
}