package io.lumify.it;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import io.lumify.web.clientapi.LumifyApi;
import io.lumify.web.clientapi.codegen.ApiException;
import io.lumify.web.clientapi.codegen.EdgeApi;
import io.lumify.web.clientapi.codegen.VertexApi;
import io.lumify.web.clientapi.model.ClientApiElement;
import io.lumify.web.clientapi.model.ClientApiVertex;
import org.apache.commons.collections.iterators.LoopingIterator;
import org.junit.Before;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
public abstract class VertextTestBase extends TestBase {
protected static final int NUM_DEFAULT_PROPERTIES = 2;
protected static final List<String> PUBLIC_VISIBILITY = ImmutableList.of("");
protected static final String PROPERTY_NAME = "http://lumify.io/test#firstName";
protected static final String PROPERTY_KEY_PREFIX = "key-firstName-";
protected static final String PROPERTY_VALUE_PREFIX = "First Name ";
protected static final String EDGE_LABEL1 = "http://lumify.io/test#worksFor";
protected static final String EDGE_LABEL2 = "http://lumify.io/test#sibling";
protected LumifyApi setupLumifyApi;
protected VertexApi setupVertexApi;
protected EdgeApi setupEdgeApi;
@Before
public void setUp() throws ApiException {
setupLumifyApi = login(USERNAME_TEST_USER_1);
setupVertexApi = setupLumifyApi.getVertexApi();
setupEdgeApi = setupLumifyApi.getEdgeApi();
addUserAuths(setupLumifyApi, USERNAME_TEST_USER_1, "a", "b", "c", "d", "e", "f", "x", "y", "z");
}
protected List<String> createVertices(int numVertices, List<String> vertexVisibilities,
int numPropertiesPerVertex, List<String> propertyVisibilities)
throws ApiException {
LoopingIterator vertexVizIterator = new LoopingIterator(vertexVisibilities);
LoopingIterator propertyVizIterator = new LoopingIterator(propertyVisibilities);
List<String> vertexIds = new ArrayList<>();
for (int i = 0; i < numVertices; i++) {
ClientApiElement vertex = setupVertexApi.create(TestOntology.CONCEPT_PERSON, (String) vertexVizIterator.next());
String vertexId = vertex.getId();
setVertexProperties(numPropertiesPerVertex, propertyVizIterator, vertexId);
vertexIds.add(vertexId);
}
return vertexIds;
}
protected List<String> createPublicVertices(int numVertices, int numPropertiesPerVertex) throws ApiException {
return createVertices(numVertices, PUBLIC_VISIBILITY, numPropertiesPerVertex, PUBLIC_VISIBILITY);
}
protected void setVertexProperties(int numPropertiesPerVertex, LoopingIterator propertyAuthIterator, String vertexId)
throws ApiException {
for (int j = 0; j < numPropertiesPerVertex; j++) {
setupVertexApi.setProperty(vertexId, PROPERTY_KEY_PREFIX + j, PROPERTY_NAME, PROPERTY_VALUE_PREFIX + j,
(String) propertyAuthIterator.next(), "", null, null);
}
}
protected void createEdge(String sourceVertexId, String destVertexId, String edgeLabel) throws ApiException {
setupEdgeApi.create(sourceVertexId, destVertexId, edgeLabel, "", "ok", "{}");
}
protected void assertVertexIds(List<String> expectedVertexIds, List<ClientApiVertex> actualVertices) {
List<String> expectedIds = new ArrayList<>(expectedVertexIds);
List<String> actualIds = new ArrayList<>(Lists.transform(actualVertices, new Function<ClientApiVertex, String>() {
public String apply(ClientApiVertex vertex) {
return vertex.getId();
}
}));
Collections.sort(expectedIds);
Collections.sort(actualIds);
assertEquals(expectedIds, actualIds);
}
}