|
|
|
@ -5,7 +5,7 @@ |
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
* You may obtain a copy of the License at |
|
|
|
* |
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
* |
|
|
|
* Unless required by applicable law or agreed to in writing, software |
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
|
|
@ -15,39 +15,46 @@ |
|
|
|
*/ |
|
|
|
package org.thingsboard.server.controller; |
|
|
|
|
|
|
|
import com.datastax.driver.core.utils.UUIDs; |
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
|
import org.apache.commons.lang3.RandomStringUtils; |
|
|
|
import org.junit.After; |
|
|
|
import org.junit.Assert; |
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Test; |
|
|
|
import org.thingsboard.server.common.data.Customer; |
|
|
|
import org.thingsboard.server.common.data.EntitySubtype; |
|
|
|
import org.thingsboard.server.common.data.Tenant; |
|
|
|
import org.thingsboard.server.common.data.User; |
|
|
|
import org.thingsboard.server.common.data.edge.Edge; |
|
|
|
import org.thingsboard.server.common.data.id.CustomerId; |
|
|
|
import org.thingsboard.server.common.data.page.TextPageData; |
|
|
|
import org.thingsboard.server.common.data.page.TextPageLink; |
|
|
|
import org.thingsboard.server.common.data.security.Authority; |
|
|
|
import org.thingsboard.server.dao.model.ModelConstants; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import static org.hamcrest.Matchers.containsString; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
|
|
|
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
|
|
|
|
|
|
|
public abstract class BaseEdgeControllerTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
private IdComparator<Edge> idComparator; |
|
|
|
private IdComparator<Edge> idComparator = new IdComparator<>(); |
|
|
|
|
|
|
|
private Tenant savedTenant; |
|
|
|
private User tenantAdmin; |
|
|
|
|
|
|
|
@Before |
|
|
|
public void beforeTest() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
idComparator = new IdComparator<>(); |
|
|
|
|
|
|
|
savedTenant = doPost("/api/tenant", getNewTenant("My tenant"), Tenant.class); |
|
|
|
Tenant tenant = new Tenant(); |
|
|
|
tenant.setTitle("My tenant"); |
|
|
|
savedTenant = doPost("/api/tenant", tenant, Tenant.class); |
|
|
|
Assert.assertNotNull(savedTenant); |
|
|
|
|
|
|
|
tenantAdmin = new User(); |
|
|
|
@ -56,44 +63,88 @@ public abstract class BaseEdgeControllerTest extends AbstractControllerTest { |
|
|
|
tenantAdmin.setEmail("tenant2@thingsboard.org"); |
|
|
|
tenantAdmin.setFirstName("Joe"); |
|
|
|
tenantAdmin.setLastName("Downs"); |
|
|
|
tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); |
|
|
|
|
|
|
|
tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); |
|
|
|
} |
|
|
|
|
|
|
|
@After |
|
|
|
public void afterTest() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
doDelete("/api/tenant/" + savedTenant.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindEdgeById() throws Exception { |
|
|
|
Edge savedEdge = getNewSavedEdge("Test edge"); |
|
|
|
Edge foundEdge = doGet("/api/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertNotNull(foundEdge); |
|
|
|
assertEquals(savedEdge, foundEdge); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveEdge() throws Exception { |
|
|
|
Edge savedEdge = getNewSavedEdge("Test edge"); |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
|
|
|
|
Assert.assertNotNull(savedEdge); |
|
|
|
Assert.assertNotNull(savedEdge.getId()); |
|
|
|
Assert.assertTrue(savedEdge.getCreatedTime() > 0); |
|
|
|
assertEquals(savedTenant.getId(), savedEdge.getTenantId()); |
|
|
|
Assert.assertEquals(savedTenant.getId(), savedEdge.getTenantId()); |
|
|
|
Assert.assertNotNull(savedEdge.getCustomerId()); |
|
|
|
Assert.assertEquals(NULL_UUID, savedEdge.getCustomerId().getId()); |
|
|
|
Assert.assertEquals(edge.getName(), savedEdge.getName()); |
|
|
|
|
|
|
|
savedEdge.setName("New test edge"); |
|
|
|
savedEdge.setName("My new edge"); |
|
|
|
doPost("/api/edge", savedEdge, Edge.class); |
|
|
|
|
|
|
|
Edge foundEdge = doGet("/api/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertEquals(foundEdge.getName(), savedEdge.getName()); |
|
|
|
} |
|
|
|
|
|
|
|
assertEquals(foundEdge.getName(), savedEdge.getName()); |
|
|
|
@Test |
|
|
|
public void testFindEdgeById() throws Exception { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
Edge foundEdge = doGet("/api/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertNotNull(foundEdge); |
|
|
|
Assert.assertEquals(savedEdge, foundEdge); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindEdgeTypesByTenantId() throws Exception { |
|
|
|
List<Edge> edges = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge B" + i); |
|
|
|
edge.setType("typeB"); |
|
|
|
edges.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
for (int i = 0; i < 7; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge C" + i); |
|
|
|
edge.setType("typeC"); |
|
|
|
edges.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
for (int i = 0; i < 9; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge A" + i); |
|
|
|
edge.setType("typeA"); |
|
|
|
edges.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
List<EntitySubtype> edgeTypes = doGetTyped("/api/edge/types", |
|
|
|
new TypeReference<List<EntitySubtype>>() { |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.assertNotNull(edgeTypes); |
|
|
|
Assert.assertEquals(3, edgeTypes.size()); |
|
|
|
Assert.assertEquals("typeA", edgeTypes.get(0).getType()); |
|
|
|
Assert.assertEquals("typeB", edgeTypes.get(1).getType()); |
|
|
|
Assert.assertEquals("typeC", edgeTypes.get(2).getType()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testDeleteEdge() throws Exception { |
|
|
|
Edge edge = getNewSavedEdge("Test edge"); |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
|
|
|
|
doDelete("/api/edge/" + savedEdge.getId().getId().toString()) |
|
|
|
@ -103,104 +154,524 @@ public abstract class BaseEdgeControllerTest extends AbstractControllerTest { |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveEdgeWithEmptyType() throws Exception { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
doPost("/api/edge", edge) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Edge type should be specified"))); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveEdgeWithEmptyName() throws Exception { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setType("default"); |
|
|
|
doPost("/api/edge", edge) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Edge name should be specified!"))); |
|
|
|
.andExpect(statusReason(containsString("Edge name should be specified"))); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignUnassignEdgeToCustomer() throws Exception { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
|
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("My customer"); |
|
|
|
Customer savedCustomer = doPost("/api/customer", customer, Customer.class); |
|
|
|
|
|
|
|
Edge assignedEdge = doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
|
|
|
+ "/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertEquals(savedCustomer.getId(), assignedEdge.getCustomerId()); |
|
|
|
|
|
|
|
Edge foundEdge = doGet("/api/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertEquals(savedCustomer.getId(), foundEdge.getCustomerId()); |
|
|
|
|
|
|
|
Edge unassignedEdge = |
|
|
|
doDelete("/api/customer/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertEquals(ModelConstants.NULL_UUID, unassignedEdge.getCustomerId().getId()); |
|
|
|
|
|
|
|
foundEdge = doGet("/api/edge/" + savedEdge.getId().getId().toString(), Edge.class); |
|
|
|
Assert.assertEquals(ModelConstants.NULL_UUID, foundEdge.getCustomerId().getId()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testGetEdges() throws Exception { |
|
|
|
public void testAssignEdgeToNonExistentCustomer() throws Exception { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
|
|
|
|
doPost("/api/customer/" + UUIDs.timeBased().toString() |
|
|
|
+ "/edge/" + savedEdge.getId().getId().toString()) |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignEdgeToCustomerFromDifferentTenant() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
Tenant tenant2 = new Tenant(); |
|
|
|
tenant2.setTitle("Different tenant"); |
|
|
|
Tenant savedTenant2 = doPost("/api/tenant", tenant2, Tenant.class); |
|
|
|
Assert.assertNotNull(savedTenant2); |
|
|
|
|
|
|
|
User tenantAdmin2 = new User(); |
|
|
|
tenantAdmin2.setAuthority(Authority.TENANT_ADMIN); |
|
|
|
tenantAdmin2.setTenantId(savedTenant2.getId()); |
|
|
|
tenantAdmin2.setEmail("tenant3@thingsboard.org"); |
|
|
|
tenantAdmin2.setFirstName("Joe"); |
|
|
|
tenantAdmin2.setLastName("Downs"); |
|
|
|
|
|
|
|
tenantAdmin2 = createUserAndLogin(tenantAdmin2, "testPassword1"); |
|
|
|
|
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Different customer"); |
|
|
|
Customer savedCustomer = doPost("/api/customer", customer, Customer.class); |
|
|
|
|
|
|
|
login(tenantAdmin.getEmail(), "testPassword1"); |
|
|
|
|
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("My edge"); |
|
|
|
edge.setType("default"); |
|
|
|
Edge savedEdge = doPost("/api/edge", edge, Edge.class); |
|
|
|
|
|
|
|
doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
|
|
|
+ "/edge/" + savedEdge.getId().getId().toString()) |
|
|
|
.andExpect(status().isForbidden()); |
|
|
|
|
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
doDelete("/api/tenant/" + savedTenant2.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindTenantEdges() throws Exception { |
|
|
|
List<Edge> edges = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 178; i++) { |
|
|
|
edges.add(getNewSavedEdge("Test edge " + i)); |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("Edge" + i); |
|
|
|
edge.setType("default"); |
|
|
|
edges.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
List<Edge> loadedEdges = loadListOf(new TextPageLink(23), "/api/edges?"); |
|
|
|
List<Edge> loadedEdges = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(23); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdges.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edges, idComparator); |
|
|
|
Collections.sort(loadedEdges, idComparator); |
|
|
|
|
|
|
|
assertEquals(edges, loadedEdges); |
|
|
|
Assert.assertEquals(edges, loadedEdges); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testGetEdgesByName() throws Exception { |
|
|
|
String name1 = "Entity edge1"; |
|
|
|
List<Edge> namesOfEdge1 = fillListOf(143, name1); |
|
|
|
List<Edge> loadedNamesOfEdge1 = loadListOf(new TextPageLink(15, name1), "/api/edges?"); |
|
|
|
Collections.sort(namesOfEdge1, idComparator); |
|
|
|
Collections.sort(loadedNamesOfEdge1, idComparator); |
|
|
|
assertEquals(namesOfEdge1, loadedNamesOfEdge1); |
|
|
|
|
|
|
|
String name2 = "Entity edge2"; |
|
|
|
List<Edge> namesOfEdge2 = fillListOf(75, name2); |
|
|
|
List<Edge> loadedNamesOfEdge2 = loadListOf(new TextPageLink(4, name2), "/api/edges?"); |
|
|
|
Collections.sort(namesOfEdge2, idComparator); |
|
|
|
Collections.sort(loadedNamesOfEdge2, idComparator); |
|
|
|
assertEquals(namesOfEdge2, loadedNamesOfEdge2); |
|
|
|
|
|
|
|
for (Edge edge : loadedNamesOfEdge1) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()).andExpect(status().isOk()); |
|
|
|
} |
|
|
|
TextPageData<Edge> pageData = doGetTypedWithPageLink("/api/edges?", |
|
|
|
public void testFindTenantEdgesByName() throws Exception { |
|
|
|
String title1 = "Edge title 1"; |
|
|
|
List<Edge> edgesTitle1 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType("default"); |
|
|
|
edgesTitle1.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
String title2 = "Edge title 2"; |
|
|
|
List<Edge> edgesTitle2 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 75; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType("default"); |
|
|
|
edgesTitle2.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
|
|
|
|
List<Edge> loadedEdgesTitle1 = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(15, title1); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdgesTitle1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesTitle1, idComparator); |
|
|
|
Collections.sort(loadedEdgesTitle1, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesTitle1, loadedEdgesTitle1); |
|
|
|
|
|
|
|
List<Edge> loadedEdgesTitle2 = new ArrayList<>(); |
|
|
|
pageLink = new TextPageLink(4, title2); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdgesTitle2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesTitle2, idComparator); |
|
|
|
Collections.sort(loadedEdgesTitle2, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesTitle2, loadedEdgesTitle2); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesTitle1) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4, title1); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, new TextPageLink(4, name1)); |
|
|
|
}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
assertEquals(0, pageData.getData().size()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
for (Edge edge : loadedNamesOfEdge2) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()).andExpect(status().isOk()); |
|
|
|
for (Edge edge : loadedEdgesTitle2) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
pageData = doGetTypedWithPageLink("/api/edges?", new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, new TextPageLink(4, name2)); |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4, title2); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
assertEquals(0, pageData.getData().size()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
|
|
|
|
private Edge getNewSavedEdge(String name) throws Exception { |
|
|
|
Edge edge = createEdge(name); |
|
|
|
return doPost("/api/edge", edge, Edge.class); |
|
|
|
} |
|
|
|
@Test |
|
|
|
public void testFindTenantEdgesByType() throws Exception { |
|
|
|
String title1 = "Edge title 1"; |
|
|
|
String type1 = "typeA"; |
|
|
|
List<Edge> edgesType1 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType(type1); |
|
|
|
edgesType1.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
String title2 = "Edge title 2"; |
|
|
|
String type2 = "typeB"; |
|
|
|
List<Edge> edgesType2 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 75; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType(type2); |
|
|
|
edgesType2.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
} |
|
|
|
|
|
|
|
private Edge createEdge(String name) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setTenantId(savedTenant.getId()); |
|
|
|
edge.setName(name); |
|
|
|
return edge; |
|
|
|
List<Edge> loadedEdgesType1 = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(15); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type1); |
|
|
|
loadedEdgesType1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesType1, idComparator); |
|
|
|
Collections.sort(loadedEdgesType1, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesType1, loadedEdgesType1); |
|
|
|
|
|
|
|
List<Edge> loadedEdgesType2 = new ArrayList<>(); |
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type2); |
|
|
|
loadedEdgesType2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesType2, idComparator); |
|
|
|
Collections.sort(loadedEdgesType2, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesType2, loadedEdgesType2); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesType1) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type1); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesType2) { |
|
|
|
doDelete("/api/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type2); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
|
|
|
|
private Tenant getNewTenant(String title) { |
|
|
|
Tenant tenant = new Tenant(); |
|
|
|
tenant.setTitle(title); |
|
|
|
return tenant; |
|
|
|
@Test |
|
|
|
public void testFindCustomerEdges() throws Exception { |
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Test customer"); |
|
|
|
customer = doPost("/api/customer", customer, Customer.class); |
|
|
|
CustomerId customerId = customer.getId(); |
|
|
|
|
|
|
|
List<Edge> edges = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 128; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
edge.setName("Edge" + i); |
|
|
|
edge.setType("default"); |
|
|
|
edge = doPost("/api/edge", edge, Edge.class); |
|
|
|
edges.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/edge/" + edge.getId().getId().toString(), Edge.class)); |
|
|
|
} |
|
|
|
|
|
|
|
List<Edge> loadedEdges = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(23); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdges.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edges, idComparator); |
|
|
|
Collections.sort(loadedEdges, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edges, loadedEdges); |
|
|
|
} |
|
|
|
|
|
|
|
private List<Edge> fillListOf(int limit, String partOfName) throws Exception { |
|
|
|
List<Edge> edgeNames = new ArrayList<>(); |
|
|
|
for (int i = 0; i < limit; i++) { |
|
|
|
String fullName = partOfName + ' ' + RandomStringUtils.randomAlphanumeric(15); |
|
|
|
fullName = i % 2 == 0 ? fullName.toLowerCase() : fullName.toUpperCase(); |
|
|
|
Edge edge = getNewSavedEdge(fullName); |
|
|
|
edgeNames.add(doPost("/api/edge", edge, Edge.class)); |
|
|
|
@Test |
|
|
|
public void testFindCustomerEdgesByName() throws Exception { |
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Test customer"); |
|
|
|
customer = doPost("/api/customer", customer, Customer.class); |
|
|
|
CustomerId customerId = customer.getId(); |
|
|
|
|
|
|
|
String title1 = "Edge title 1"; |
|
|
|
List<Edge> edgesTitle1 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 125; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType("default"); |
|
|
|
edge = doPost("/api/edge", edge, Edge.class); |
|
|
|
edgesTitle1.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/edge/" + edge.getId().getId().toString(), Edge.class)); |
|
|
|
} |
|
|
|
String title2 = "Edge title 2"; |
|
|
|
List<Edge> edgesTitle2 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType("default"); |
|
|
|
edge = doPost("/api/edge", edge, Edge.class); |
|
|
|
edgesTitle2.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/edge/" + edge.getId().getId().toString(), Edge.class)); |
|
|
|
} |
|
|
|
|
|
|
|
List<Edge> loadedEdgesTitle1 = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(15, title1); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdgesTitle1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesTitle1, idComparator); |
|
|
|
Collections.sort(loadedEdgesTitle1, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesTitle1, loadedEdgesTitle1); |
|
|
|
|
|
|
|
List<Edge> loadedEdgesTitle2 = new ArrayList<>(); |
|
|
|
pageLink = new TextPageLink(4, title2); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedEdgesTitle2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesTitle2, idComparator); |
|
|
|
Collections.sort(loadedEdgesTitle2, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesTitle2, loadedEdgesTitle2); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesTitle1) { |
|
|
|
doDelete("/api/customer/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4, title1); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesTitle2) { |
|
|
|
doDelete("/api/customer/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
return edgeNames; |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4, title2); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
|
|
|
|
private List<Edge> loadListOf(TextPageLink pageLink, String urlTemplate) throws Exception { |
|
|
|
List<Edge> loadedItems = new ArrayList<>(); |
|
|
|
TextPageData<Edge> pageData; |
|
|
|
@Test |
|
|
|
public void testFindCustomerEdgesByType() throws Exception { |
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Test customer"); |
|
|
|
customer = doPost("/api/customer", customer, Customer.class); |
|
|
|
CustomerId customerId = customer.getId(); |
|
|
|
|
|
|
|
String title1 = "Edge title 1"; |
|
|
|
String type1 = "typeC"; |
|
|
|
List<Edge> edgesType1 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 125; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType(type1); |
|
|
|
edge = doPost("/api/edge", edge, Edge.class); |
|
|
|
edgesType1.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/edge/" + edge.getId().getId().toString(), Edge.class)); |
|
|
|
} |
|
|
|
String title2 = "Edge title 2"; |
|
|
|
String type2 = "typeD"; |
|
|
|
List<Edge> edgesType2 = new ArrayList<>(); |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Edge edge = new Edge(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
edge.setName(name); |
|
|
|
edge.setType(type2); |
|
|
|
edge = doPost("/api/edge", edge, Edge.class); |
|
|
|
edgesType2.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/edge/" + edge.getId().getId().toString(), Edge.class)); |
|
|
|
} |
|
|
|
|
|
|
|
List<Edge> loadedEdgesType1 = new ArrayList<>(); |
|
|
|
TextPageLink pageLink = new TextPageLink(15); |
|
|
|
TextPageData<Edge> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type1); |
|
|
|
loadedEdgesType1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
Collections.sort(edgesType1, idComparator); |
|
|
|
Collections.sort(loadedEdgesType1, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesType1, loadedEdgesType1); |
|
|
|
|
|
|
|
List<Edge> loadedEdgesType2 = new ArrayList<>(); |
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink(urlTemplate, new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink); |
|
|
|
loadedItems.addAll(pageData.getData()); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type2); |
|
|
|
loadedEdgesType2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageData.getNextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
return loadedItems; |
|
|
|
Collections.sort(edgesType2, idComparator); |
|
|
|
Collections.sort(loadedEdgesType2, idComparator); |
|
|
|
|
|
|
|
Assert.assertEquals(edgesType2, loadedEdgesType2); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesType1) { |
|
|
|
doDelete("/api/customer/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type1); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
for (Edge edge : loadedEdgesType2) { |
|
|
|
doDelete("/api/customer/edge/" + edge.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new TextPageLink(4); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/edges?type={type}&", |
|
|
|
new TypeReference<TextPageData<Edge>>() { |
|
|
|
}, pageLink, type2); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
} |
|
|
|
|