Browse Source

added tests, refactoring

pull/8094/head
dashevchenko 4 years ago
parent
commit
bbbea0fc31
  1. 17
      application/src/main/java/org/thingsboard/server/controller/BaseController.java
  2. 25
      application/src/main/java/org/thingsboard/server/controller/UserController.java
  3. 397
      application/src/test/java/org/thingsboard/server/controller/BaseUserControllerTest.java

17
application/src/main/java/org/thingsboard/server/controller/BaseController.java

@ -93,6 +93,8 @@ import org.thingsboard.server.common.data.page.SortOrder;
import org.thingsboard.server.common.data.page.TimePageLink; import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.common.data.plugin.ComponentDescriptor; import org.thingsboard.server.common.data.plugin.ComponentDescriptor;
import org.thingsboard.server.common.data.plugin.ComponentType; import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.common.data.query.EntityDataSortOrder;
import org.thingsboard.server.common.data.query.EntityKey;
import org.thingsboard.server.common.data.queue.Queue; import org.thingsboard.server.common.data.queue.Queue;
import org.thingsboard.server.common.data.rpc.Rpc; import org.thingsboard.server.common.data.rpc.Rpc;
import org.thingsboard.server.common.data.rule.RuleChain; import org.thingsboard.server.common.data.rule.RuleChain;
@ -160,6 +162,8 @@ import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.thingsboard.server.common.data.StringUtils.isNotEmpty;
import static org.thingsboard.server.common.data.query.EntityKeyType.ENTITY_FIELD;
import static org.thingsboard.server.controller.ControllerConstants.INCORRECT_TENANT_ID; import static org.thingsboard.server.controller.ControllerConstants.INCORRECT_TENANT_ID;
import static org.thingsboard.server.controller.UserController.YOU_DON_T_HAVE_PERMISSION_TO_PERFORM_THIS_OPERATION; import static org.thingsboard.server.controller.UserController.YOU_DON_T_HAVE_PERMISSION_TO_PERFORM_THIS_OPERATION;
import static org.thingsboard.server.dao.service.Validator.validateId; import static org.thingsboard.server.dao.service.Validator.validateId;
@ -987,4 +991,17 @@ public abstract class BaseController {
}, MoreExecutors.directExecutor()); }, MoreExecutors.directExecutor());
return deferredResult; return deferredResult;
} }
protected EntityDataSortOrder createEntityDataSortOrder(String sortProperty, String sortOrder) {
if (isNotEmpty(sortProperty)) {
EntityDataSortOrder entityDataSortOrder = new EntityDataSortOrder();
entityDataSortOrder.setKey(new EntityKey(ENTITY_FIELD, sortProperty));
if (isNotEmpty(sortOrder)) {
entityDataSortOrder.setDirection(EntityDataSortOrder.Direction.valueOf(sortOrder));
}
return entityDataSortOrder;
} else {
return null;
}
}
} }

25
application/src/main/java/org/thingsboard/server/controller/UserController.java

@ -54,6 +54,7 @@ import org.thingsboard.server.common.data.query.EntityDataQuery;
import org.thingsboard.server.common.data.query.EntityDataSortOrder; import org.thingsboard.server.common.data.query.EntityDataSortOrder;
import org.thingsboard.server.common.data.query.EntityKey; import org.thingsboard.server.common.data.query.EntityKey;
import org.thingsboard.server.common.data.query.EntityTypeFilter; import org.thingsboard.server.common.data.query.EntityTypeFilter;
import org.thingsboard.server.common.data.query.TsValue;
import org.thingsboard.server.common.data.security.Authority; import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.security.UserCredentials; import org.thingsboard.server.common.data.security.UserCredentials;
import org.thingsboard.server.common.data.security.UserSettings; import org.thingsboard.server.common.data.security.UserSettings;
@ -73,6 +74,7 @@ import javax.servlet.http.HttpServletRequest;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map;
import static org.thingsboard.server.common.data.StringUtils.isNotEmpty; import static org.thingsboard.server.common.data.StringUtils.isNotEmpty;
import static org.thingsboard.server.common.data.query.EntityKeyType.ENTITY_FIELD; import static org.thingsboard.server.common.data.query.EntityKeyType.ENTITY_FIELD;
@ -348,10 +350,13 @@ public class UserController extends BaseController {
EntityDataQuery query = new EntityDataQuery(entityFilter, pageLink, entityFields, null, null); EntityDataQuery query = new EntityDataQuery(entityFilter, pageLink, entityFields, null, null);
return entityQueryService.findEntityDataByQuery(securityUser, query).mapData(entityData -> return entityQueryService.findEntityDataByQuery(securityUser, query).mapData(entityData ->
new UserData(UserId.fromString(entityData.getEntityId().getId().toString()), {
entityData.getLatest().get(ENTITY_FIELD).get("email").getValue(), Map<String, TsValue> keyValueMap = entityData.getLatest().get(ENTITY_FIELD);
entityData.getLatest().get(ENTITY_FIELD).get("firstName").getValue(), return new UserData(UserId.fromString(entityData.getEntityId().getId().toString()),
entityData.getLatest().get(ENTITY_FIELD).get("lastName").getValue())); keyValueMap.get("email").getValue(),
keyValueMap.get("firstName").getValue(),
keyValueMap.get("lastName").getValue());
});
} }
@ApiOperation(value = "Get Tenant Users (getTenantAdmins)", @ApiOperation(value = "Get Tenant Users (getTenantAdmins)",
@ -485,16 +490,4 @@ public class UserController extends BaseController {
userSettingsService.deleteUserSettings(currentUser.getTenantId(), currentUser.getId(), Arrays.asList(paths.split(","))); userSettingsService.deleteUserSettings(currentUser.getTenantId(), currentUser.getId(), Arrays.asList(paths.split(",")));
} }
private EntityDataSortOrder createEntityDataSortOrder(String sortProperty, String sortOrder) {
if (isNotEmpty(sortProperty)) {
EntityDataSortOrder entityDataSortOrder = new EntityDataSortOrder();
entityDataSortOrder.setKey(new EntityKey(ENTITY_FIELD, sortProperty));
if (isNotEmpty(sortOrder)) {
entityDataSortOrder.setDirection(EntityDataSortOrder.Direction.valueOf(sortOrder));
}
return entityDataSortOrder;
} else {
return null;
}
}
} }

397
application/src/test/java/org/thingsboard/server/controller/BaseUserControllerTest.java

@ -18,6 +18,7 @@ package org.thingsboard.server.controller;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.jetbrains.annotations.NotNull;
import org.junit.After; import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Ignore; import org.junit.Ignore;
@ -87,21 +88,15 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testSaveUser() throws Exception { public void testSaveUser() throws Exception {
loginSysAdmin(); loginSysAdmin();
String email = "tenant2@thingsboard.org"; User user = createTenantAdminUser();
User user = new User(); String email = user.getEmail();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email);
user.setFirstName("Joe");
user.setLastName("Downs");
Mockito.reset(tbClusterService, auditLogService); Mockito.reset(tbClusterService, auditLogService);
User savedUser = doPost("/api/user", user, User.class); User savedUser = doPost("/api/user", user, User.class);
Assert.assertNotNull(savedUser); Assert.assertNotNull(savedUser);
Assert.assertNotNull(savedUser.getId()); Assert.assertNotNull(savedUser.getId());
Assert.assertTrue(savedUser.getCreatedTime() > 0); Assert.assertTrue(savedUser.getCreatedTime() > 0);
Assert.assertEquals(user.getEmail(), savedUser.getEmail()); Assert.assertEquals(email, savedUser.getEmail());
User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class); User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
Assert.assertEquals(foundUser, savedUser); Assert.assertEquals(foundUser, savedUser);
@ -156,13 +151,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
Mockito.reset(tbClusterService, auditLogService); Mockito.reset(tbClusterService, auditLogService);
String email = "tenant2@thingsboard.org"; User user = createTenantAdminUser(StringUtils.randomAlphabetic(300), "Brown");
User user = new User();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email);
user.setFirstName(StringUtils.randomAlphabetic(300));
user.setLastName("Downs");
String msgError = msgErrorFieldLength("first name"); String msgError = msgErrorFieldLength("first name");
doPost("/api/user", user) doPost("/api/user", user)
.andExpect(status().isBadRequest()) .andExpect(status().isBadRequest())
@ -189,12 +178,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testUpdateUserFromDifferentTenant() throws Exception { public void testUpdateUserFromDifferentTenant() throws Exception {
loginSysAdmin(); loginSysAdmin();
User tenantAdmin = new User(); User tenantAdmin = createTenantAdminUser();
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("tenant2@thingsboard.org");
tenantAdmin.setFirstName("Joe");
tenantAdmin.setLastName("Downs");
tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
loginDifferentTenant(); loginDifferentTenant();
@ -214,14 +198,8 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testResetPassword() throws Exception { public void testResetPassword() throws Exception {
loginSysAdmin(); loginSysAdmin();
String email = "tenant2@thingsboard.org"; User user = createTenantAdminUser();
User user = new User(); String email = user.getEmail();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email);
user.setFirstName("Joe");
user.setLastName("Downs");
User savedUser = createUserAndLogin(user, "testPassword1"); User savedUser = createUserAndLogin(user, "testPassword1");
resetTokens(); resetTokens();
@ -266,13 +244,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testFindUserById() throws Exception { public void testFindUserById() throws Exception {
loginSysAdmin(); loginSysAdmin();
String email = "tenant2@thingsboard.org"; User user = createTenantAdminUser();
User user = new User();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email);
user.setFirstName("Joe");
user.setLastName("Downs");
User savedUser = doPost("/api/user", user, User.class); User savedUser = doPost("/api/user", user, User.class);
User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class); User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
@ -286,15 +258,12 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
Mockito.reset(tbClusterService, auditLogService); Mockito.reset(tbClusterService, auditLogService);
String email = TENANT_ADMIN_EMAIL;
User user = new User(); User user = new User();
user.setAuthority(Authority.TENANT_ADMIN); user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId); user.setTenantId(tenantId);
user.setEmail(email); user.setEmail(TENANT_ADMIN_EMAIL);
user.setFirstName("Joe");
user.setLastName("Downs");
String msgError = "User with email '" + email + "' already present in database"; String msgError = "User with email '" + TENANT_ADMIN_EMAIL + "' already present in database";
doPost("/api/user", user) doPost("/api/user", user)
.andExpect(status().isBadRequest()) .andExpect(status().isBadRequest())
.andExpect(statusReason(containsString(msgError))); .andExpect(statusReason(containsString(msgError)));
@ -311,12 +280,8 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
Mockito.reset(tbClusterService, auditLogService); Mockito.reset(tbClusterService, auditLogService);
String email = "tenant_thingsboard.org"; String email = "tenant_thingsboard.org";
User user = new User(); User user = createTenantAdminUser();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email); user.setEmail(email);
user.setFirstName("Joe");
user.setLastName("Downs");
String msgError = "Invalid email address format '" + email + "'"; String msgError = "Invalid email address format '" + email + "'";
doPost("/api/user", user) doPost("/api/user", user)
@ -377,13 +342,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testDeleteUser() throws Exception { public void testDeleteUser() throws Exception {
loginSysAdmin(); loginSysAdmin();
String email = "tenant2@thingsboard.org"; User user = createTenantAdminUser();
User user = new User();
user.setAuthority(Authority.TENANT_ADMIN);
user.setTenantId(tenantId);
user.setEmail(email);
user.setFirstName("Joe");
user.setLastName("Downs");
User savedUser = doPost("/api/user", user, User.class); User savedUser = doPost("/api/user", user, User.class);
User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class); User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
@ -565,20 +524,10 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testFindCustomerUsers() throws Exception { public void testFindCustomerUsers() throws Exception {
loginSysAdmin(); loginSysAdmin();
User tenantAdmin = new User(); User tenantAdmin = createTenantAdminUser();
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("tenant2@thingsboard.org");
tenantAdmin.setFirstName("Joe");
tenantAdmin.setLastName("Downs");
createUserAndLogin(tenantAdmin, "testPassword1"); createUserAndLogin(tenantAdmin, "testPassword1");
Customer customer = new Customer(); CustomerId customerId = postCustomer();
customer.setTitle("My customer");
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
CustomerId customerId = savedCustomer.getId();
List<User> customerUsers = new ArrayList<>(); List<User> customerUsers = new ArrayList<>();
for (int i = 0; i < 56; i++) { for (int i = 0; i < 56; i++) {
@ -615,47 +564,22 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
public void testFindCustomerUsersByEmail() throws Exception { public void testFindCustomerUsersByEmail() throws Exception {
loginSysAdmin(); loginSysAdmin();
User tenantAdmin = new User(); User tenantAdmin = createTenantAdminUser();
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("tenant2@thingsboard.org");
tenantAdmin.setFirstName("Joe");
tenantAdmin.setLastName("Downs");
createUserAndLogin(tenantAdmin, "testPassword1"); createUserAndLogin(tenantAdmin, "testPassword1");
Customer customer = new Customer(); CustomerId customerId = postCustomer();
customer.setTitle("My customer");
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
CustomerId customerId = savedCustomer.getId();
String email1 = "testEmail1"; String email1 = "testEmail1";
List<User> customerUsersEmail1 = new ArrayList<>();
for (int i = 0; i < 74; i++) {
User user = new User();
user.setAuthority(Authority.CUSTOMER_USER);
user.setCustomerId(customerId);
String suffix = StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
String email = email1 + suffix + "@thingsboard.org";
email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase();
user.setEmail(email);
customerUsersEmail1.add(doPost("/api/user", user, User.class));
}
String email2 = "testEmail2"; String email2 = "testEmail2";
List<User> customerUsersEmail2 = new ArrayList<>(); List<User> customerUsersEmail1 = new ArrayList<>();
List<User> customerUsersEmail2= new ArrayList<>();
for (int i = 0; i < 92; i++) { for (int i = 0; i < 45; i++) {
User user = new User(); User customerUser = createCustomerUser( customerId);
user.setAuthority(Authority.CUSTOMER_USER); customerUser.setEmail(email1 + StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10)) + "@thingsboard.org");
user.setCustomerId(customerId); customerUsersEmail1.add(doPost("/api/user", customerUser, User.class));
String suffix = StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
String email = email2 + suffix + "@thingsboard.org"; customerUser.setEmail(email2 + StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10)) + "@thingsboard.org");
email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase(); customerUsersEmail2.add(doPost("/api/user", customerUser, User.class));
user.setEmail(email);
customerUsersEmail2.add(doPost("/api/user", user, User.class));
} }
List<User> loadedCustomerUsersEmail1 = new ArrayList<>(); List<User> loadedCustomerUsersEmail1 = new ArrayList<>();
@ -723,14 +647,18 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
@Test @Test
public void testDeleteUserWithDeleteRelationsOk() throws Exception { public void testDeleteUserWithDeleteRelationsOk() throws Exception {
UserId userId = createUser().getId(); loginSysAdmin();
User tenantAdminUser = createTenantAdminUser();
UserId userId = doPost("/api/user", tenantAdminUser, User.class).getId();
testEntityDaoWithRelationsOk(tenantId, userId, "/api/user/" + userId); testEntityDaoWithRelationsOk(tenantId, userId, "/api/user/" + userId);
} }
@Ignore @Ignore
@Test @Test
public void testDeleteUserExceptionWithRelationsTransactional() throws Exception { public void testDeleteUserExceptionWithRelationsTransactional() throws Exception {
UserId userId = createUser().getId(); loginSysAdmin();
User tenantAdminUser = createTenantAdminUser("Joe", "Downs");
UserId userId = doPost("/api/user", tenantAdminUser, User.class).getId();
testEntityDaoWithRelationsTransactionalException(userDao, tenantId, userId, "/api/user/" + userId); testEntityDaoWithRelationsTransactionalException(userDao, tenantId, userId, "/api/user/" + userId);
} }
@ -862,180 +790,177 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
} }
@Test @Test
public void shouldFindCustomerUsersByFirstName() throws Exception { public void checkCustomerUserDoNotSeeTenantAndOtherCustomerUsers() throws Exception {
loginSysAdmin(); loginSysAdmin();
User tenantAdmin = new User(); User tenantAdmin = createTenantAdminUser("Joe", "Brown");
tenantAdmin.setAuthority(Authority.TENANT_ADMIN); createUserAndLogin(tenantAdmin, "testPassword1");
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("tenant2@thingsboard.org"); CustomerId customerId = postCustomer();
tenantAdmin.setFirstName("Joe"); User user = createCustomerUser("Joe", "Downs", customerId);
tenantAdmin.setLastName("Downs"); doPost("/api/user", user, User.class);
CustomerId customerId2 = postCustomer();
User user2 = createCustomerUser(customerId2);
createUserAndLogin(user2, "testPassword2");
PageLink pageLink = new PageLink(10, 0, "Joe");
List<UserData> usersInfo = getUsersInfo(pageLink);
Assert.assertEquals(usersInfo.size(), 0);
}
@Test
public void shouldFindCustomerUsersByFirstName() throws Exception {
loginSysAdmin();
User tenantAdmin = createTenantAdminUser();
createUserAndLogin(tenantAdmin, "testPassword1"); createUserAndLogin(tenantAdmin, "testPassword1");
Customer customer = new Customer(); String searchText = "Philip";
customer.setTitle("My customer");
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
CustomerId customerId = savedCustomer.getId();
Customer customer2 = new Customer(); CustomerId customerId = postCustomer();
customer2.setTitle("My customer2"); CustomerId customerId2 = postCustomer();
Customer savedCustomer2 = doPost("/api/customer", customer2, Customer.class);
CustomerId customerId2 = savedCustomer2.getId();
List<User> customerUsers = new ArrayList<>(); List<User> customerUsersContainingWord = new ArrayList<>();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
User user = new User(); String suffix = StringUtils.randomAlphabetic((int) (5 + Math.random() * 10));
user.setAuthority(Authority.CUSTOMER_USER);
user.setCustomerId(customerId); customerUsersContainingWord.add(doPost("/api/user", createCustomerUser(searchText + i, "Last" + i, customerId), User.class));
user.setFirstName("Name" + i); customerUsersContainingWord.add(doPost("/api/user", createCustomerUser(null, null, searchText + suffix + "@thingsboard.org", customerId), User.class));
user.setLastName("Lastname" + i); doPost("/api/user", createCustomerUser(null, null, customerId), User.class);
user.setEmail("testCustomer" + i + "@thingsboard.org");
customerUsers.add(doPost("/api/user", user, User.class)); doPost("/api/user", createCustomerUser(searchText + i, "Last" + i, customerId2), User.class);
}
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAuthority(Authority.CUSTOMER_USER);
user.setCustomerId(customerId2);
user.setFirstName("SecondCustomerName" + i);
user.setLastName("SecondCustomerLastname" + i);
user.setEmail("SecondCustomerUser" + i + "@thingsboard.org");
doPost("/api/user", user, User.class);
} }
User user = new User(); createUserAndLogin(createCustomerUser(customerId), "testPassword2");
user.setAuthority(Authority.CUSTOMER_USER);
user.setCustomerId(customerId);
user.setEmail("testCustomerUser@thingsboard.org");
createUserAndLogin(user, "testPassword2");
// find user my name // find users by search text
List<UserData> loadedCustomerUsers = new ArrayList<>(); PageLink pageLink = new PageLink(10, 0, searchText);
PageLink pageLink = new PageLink(10, 0, "Name"); List<UserData> usersInfo = getUsersInfo(pageLink);
PageData<UserData> pageData = null;
do {
pageData = doGetTypedWithPageLink("/api/users/info?",
new TypeReference<>() {
}, pageLink);
loadedCustomerUsers.addAll(pageData.getData());
if (pageData.hasNext()) {
pageLink = pageLink.nextPageLink();
}
} while (pageData.hasNext());
List<UserData> customerUserDatas = customerUsers.stream().map(customerUser -> new UserData(customerUser.getId(), List<UserData> expectedUserInfos = customerUsersContainingWord.stream().map(customerUser -> new UserData(customerUser.getId(),
customerUser.getEmail(), customerUser.getFirstName(), customerUser.getLastName())) customerUser.getEmail(), customerUser.getFirstName() == null ? "" : customerUser.getFirstName(),
customerUser.getLastName() == null ? "" : customerUser.getLastName()))
.sorted(userDataIdComparator).collect(Collectors.toList()); .sorted(userDataIdComparator).collect(Collectors.toList());
loadedCustomerUsers.sort(userDataIdComparator); usersInfo.sort(userDataIdComparator);
Assert.assertEquals(customerUserDatas, loadedCustomerUsers); Assert.assertEquals(expectedUserInfos, usersInfo);
// find user my full name // find user by full name
loadedCustomerUsers.clear(); pageLink = new PageLink(10, 0, searchText + "5");
pageLink = new PageLink(10, 0, "Name3"); usersInfo = getUsersInfo(pageLink);
pageData = doGetTypedWithPageLink("/api/users/info?", Assert.assertEquals(1, usersInfo.size());
new TypeReference<>() {
}, pageLink);
loadedCustomerUsers.addAll(pageData.getData());
Assert.assertEquals(pageData.getData().size(), 1);
Assert.assertEquals(pageData.getData().get(0).getEmail(), "testCustomer3@thingsboard.org");
//clear users //clear users
loginUser(tenantAdmin.getEmail(), "testPassword1"); loginUser(tenantAdmin.getEmail(), "testPassword1");
doDelete("/api/customer/" + customerId.getId().toString()) doDelete("/api/customer/" + customerId.getId().toString())
.andExpect(status().isOk()); .andExpect(status().isOk());
doDelete("/api/customer/" + customerId2.getId().toString())
.andExpect(status().isOk());
} }
@Test @Test
public void shouldFindTenantUsersByLastName() throws Exception { public void shouldFindTenantUsersByTextFromLastName() throws Exception {
loginSysAdmin(); loginSysAdmin();
User tenantAdmin = new User(); User tenantAdmin = createTenantAdminUser();
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("tenant2@thingsboard.org");
tenantAdmin.setFirstName("Joe");
tenantAdmin.setLastName("Downs");
createUserAndLogin(tenantAdmin, "testPassword1"); createUserAndLogin(tenantAdmin, "testPassword1");
CustomerId customerId = postCustomer();
CustomerId customerId2 = postCustomer();
Customer customer = new Customer(); String searchText = "Brown";
customer.setTitle("My customer");
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
CustomerId customerId = savedCustomer.getId();
Customer customer2 = new Customer();
customer2.setTitle("My customer2");
Customer savedCustomer2 = doPost("/api/customer", customer2, Customer.class);
CustomerId customerId2 = savedCustomer2.getId();
List<User> customerUsers = new ArrayList<>(); List<User> usersContainingWord = new ArrayList<>();
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
User user = new User(); String suffix = StringUtils.randomAlphabetic((int) (5 + Math.random() * 10));
user.setAuthority(Authority.CUSTOMER_USER); usersContainingWord.add(doPost("/api/user", createCustomerUser("First" + i, searchText + i, customerId), User.class));
user.setCustomerId(customerId); usersContainingWord.add(doPost("/api/user", createCustomerUser(null, null, searchText + suffix + "@thingsboard.org", customerId), User.class));
user.setFirstName("Name" + i);
user.setLastName("Lastname" + i); suffix = StringUtils.randomAlphabetic((int) (5 + Math.random() * 10));
user.setEmail("testCustomer" + i + "@thingsboard.org"); usersContainingWord.add(doPost("/api/user", createCustomerUser("First" + i, searchText + i, customerId2), User.class));
customerUsers.add(doPost("/api/user", user, User.class)); usersContainingWord.add(doPost("/api/user", createCustomerUser(null, null, searchText + suffix + "@thingsboard.org", customerId2), User.class));
}
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAuthority(Authority.CUSTOMER_USER);
user.setCustomerId(customerId2);
user.setFirstName("SecondCustomerName" + i);
user.setLastName("SecondCustomerLastname" + i);
user.setEmail("SecondCustomerUser" + i + "@thingsboard.org");
customerUsers.add(doPost("/api/user", user, User.class));
} }
// find user my name loginDifferentTenant();
List<UserData> loadedCustomerUsers = new ArrayList<>(); CustomerId customerId3 = postCustomer();
PageLink pageLink = new PageLink(10, 0, "Name"); doPost("/api/user", createCustomerUser("Jane", searchText, customerId3), User.class);
PageData<UserData> pageData = null;
do {
pageData = doGetTypedWithPageLink("/api/users/info?",
new TypeReference<>() {
}, pageLink);
loadedCustomerUsers.addAll(pageData.getData());
if (pageData.hasNext()) {
pageLink = pageLink.nextPageLink();
}
} while (pageData.hasNext());
List<UserData> customerUserDatas = customerUsers.stream().map(customerUser -> new UserData(customerUser.getId(), // find users by search text
customerUser.getEmail(), customerUser.getFirstName(), customerUser.getLastName())) loginUser(tenantAdmin.getEmail(), "testPassword1");
PageLink pageLink = new PageLink(10, 0, searchText);
List<UserData> usersInfo = getUsersInfo(pageLink);
List<UserData> expectedUserInfos = usersContainingWord.stream().map(customerUser -> new UserData(customerUser.getId(),
customerUser.getEmail(), customerUser.getFirstName() == null ? "" : customerUser.getFirstName(),
customerUser.getLastName() == null ? "" : customerUser.getLastName()))
.sorted(userDataIdComparator).collect(Collectors.toList()); .sorted(userDataIdComparator).collect(Collectors.toList());
loadedCustomerUsers.sort(userDataIdComparator); usersInfo.sort(userDataIdComparator);
Assert.assertEquals(customerUserDatas, loadedCustomerUsers); Assert.assertEquals(expectedUserInfos, usersInfo);
// find user my full name // find user by full last name
loadedCustomerUsers.clear(); pageLink = new PageLink(10, 0, searchText + "3");
pageLink = new PageLink(10, 0, "SecondCustomerLastname3"); usersInfo = getUsersInfo(pageLink);
pageData = doGetTypedWithPageLink("/api/users/info?", Assert.assertEquals(2, usersInfo.size());
new TypeReference<>() {
}, pageLink);
loadedCustomerUsers.addAll(pageData.getData());
Assert.assertEquals(pageData.getData().size(), 1);
Assert.assertEquals(pageData.getData().get(0).getEmail(), "SecondCustomerUser3@thingsboard.org");
//clear users //clear users
loginUser(tenantAdmin.getEmail(), "testPassword1");
doDelete("/api/customer/" + customerId.getId().toString()) doDelete("/api/customer/" + customerId.getId().toString())
.andExpect(status().isOk()); .andExpect(status().isOk());
doDelete("/api/customer/" + customerId2.getId().toString())
.andExpect(status().isOk());
} }
private User createUser() throws Exception { private CustomerId postCustomer() {
loginSysAdmin(); Customer customer = new Customer();
String email = "tenant2@thingsboard.org"; customer.setTitle(StringUtils.randomAlphabetic(9));
Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
return savedCustomer.getId();
}
private static User createCustomerUser(CustomerId customerId) {
return createCustomerUser(null, null, customerId);
}
private static User createCustomerUser(String firstName, String lastName, CustomerId customerId) {
String suffix = StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
return createCustomerUser(firstName, lastName, "testMail" + suffix + "@thingsboard.org", customerId);
}
private static User createCustomerUser(String firstName, String lastName, String email, CustomerId customerId) {
User user = new User(); User user = new User();
user.setAuthority(Authority.TENANT_ADMIN); user.setAuthority(Authority.CUSTOMER_USER);
user.setTenantId(tenantId); user.setFirstName(firstName);
user.setLastName(lastName);
user.setCustomerId(customerId);
user.setEmail(email); user.setEmail(email);
user.setFirstName("Joe"); return user;
user.setLastName("Downs"); }
return doPost("/api/user", user, User.class);
private User createTenantAdminUser() {
return createTenantAdminUser(null, null);
}
private User createTenantAdminUser(String firstName, String lastName) {
String suffix = StringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
User tenantAdmin = new User();
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
tenantAdmin.setTenantId(tenantId);
tenantAdmin.setEmail("testEmail" + suffix + "@thingsbord.org");
tenantAdmin.setFirstName(firstName);
tenantAdmin.setLastName(lastName);
return tenantAdmin;
} }
private List<UserData> getUsersInfo(PageLink pageLink) throws Exception {
List<UserData> loadedCustomerUsers = new ArrayList<>();
PageData<UserData> pageData = null;
do {
pageData = doGetTypedWithPageLink("/api/users/info?", new TypeReference<>() {}, pageLink);
loadedCustomerUsers.addAll(pageData.getData());
if (pageData.hasNext()) {
pageLink = pageLink.nextPageLink();
}
} while (pageData.hasNext());
return loadedCustomerUsers;
}
} }

Loading…
Cancel
Save