Commit 1a285ff9a12d97d70e777f88b933a8330af595ee

Authored by YevhenBondarenko
1 parent 8d3a797f

added test update entity by different tenant to controllers tests

Showing 21 changed files with 476 additions and 442 deletions
... ... @@ -85,7 +85,7 @@ public class AlarmController extends BaseController {
85 85 try {
86 86 alarm.setTenantId(getCurrentUser().getTenantId());
87 87
88   - checkEntity(alarm.getId(), alarm);
  88 + checkEntity(alarm.getId(), alarm, Resource.ALARM);
89 89
90 90 Alarm savedAlarm = checkNotNull(alarmService.createOrUpdateAlarm(alarm));
91 91 logEntityAction(savedAlarm.getId(), savedAlarm,
... ...
... ... @@ -76,7 +76,7 @@ public class AssetController extends BaseController {
76 76 try {
77 77 asset.setTenantId(getCurrentUser().getTenantId());
78 78
79   - checkEntity(asset.getId(), asset);
  79 + checkEntity(asset.getId(), asset, Resource.ASSET);
80 80
81 81 Asset savedAsset = checkNotNull(assetService.saveAsset(asset));
82 82
... ...
... ... @@ -330,10 +330,10 @@ public abstract class BaseController {
330 330 }
331 331 }
332 332
333   - protected <I extends EntityId, T extends HasTenantId> void checkEntity(I entityId, T entity) throws ThingsboardException {
  333 + protected <I extends EntityId, T extends HasTenantId> void checkEntity(I entityId, T entity, Resource resource) throws ThingsboardException {
334 334 if (entityId == null) {
335 335 accessControlService
336   - .checkPermission(getCurrentUser(), Resource.ALARM, Operation.CREATE, null, entity);
  336 + .checkPermission(getCurrentUser(), resource, Operation.CREATE, null, entity);
337 337 } else {
338 338 checkEntityId(entityId, Operation.WRITE);
339 339 }
... ...
... ... @@ -100,7 +100,7 @@ public class CustomerController extends BaseController {
100 100 try {
101 101 customer.setTenantId(getCurrentUser().getTenantId());
102 102
103   - checkEntity(customer.getId(), customer);
  103 + checkEntity(customer.getId(), customer, Resource.CUSTOMER);
104 104
105 105 Customer savedCustomer = checkNotNull(customerService.saveCustomer(customer));
106 106
... ...
... ... @@ -92,7 +92,7 @@ public class DeviceController extends BaseController {
92 92 try {
93 93 device.setTenantId(getCurrentUser().getTenantId());
94 94
95   - checkEntity(device.getId(), device);
  95 + checkEntity(device.getId(), device, Resource.DEVICE);
96 96
97 97 Device savedDevice = checkNotNull(deviceService.saveDeviceWithAccessToken(device, accessToken));
98 98
... ...
... ... @@ -92,7 +92,7 @@ public class EntityViewController extends BaseController {
92 92 try {
93 93 entityView.setTenantId(getCurrentUser().getTenantId());
94 94
95   - checkEntity(entityView.getId(), entityView);
  95 + checkEntity(entityView.getId(), entityView, Resource.ENTITY_VIEW);
96 96
97 97 EntityView savedEntityView = checkNotNull(entityViewService.saveEntityView(entityView));
98 98 List<ListenableFuture<List<Void>>> futures = new ArrayList<>();
... ...
... ... @@ -126,7 +126,7 @@ public class RuleChainController extends BaseController {
126 126 boolean created = ruleChain.getId() == null;
127 127 ruleChain.setTenantId(getCurrentUser().getTenantId());
128 128
129   - checkEntity(ruleChain.getId(), ruleChain);
  129 + checkEntity(ruleChain.getId(), ruleChain, Resource.RULE_CHAIN);
130 130
131 131 RuleChain savedRuleChain = checkNotNull(ruleChainService.saveRuleChain(ruleChain));
132 132
... ...
... ... @@ -72,7 +72,7 @@ public class TenantController extends BaseController {
72 72 try {
73 73 boolean newTenant = tenant.getId() == null;
74 74
75   - checkEntity(tenant.getId(), tenant);
  75 + checkEntity(tenant.getId(), tenant, Resource.TENANT);
76 76
77 77 tenant = checkNotNull(tenantService.saveTenant(tenant));
78 78 if (newTenant) {
... ...
... ... @@ -138,7 +138,7 @@ public class UserController extends BaseController {
138 138 user.setTenantId(getCurrentUser().getTenantId());
139 139 }
140 140
141   - checkEntity(user.getId(), user);
  141 + checkEntity(user.getId(), user, Resource.USER);
142 142
143 143 boolean sendEmail = user.getId() == null && sendActivationMail;
144 144 User savedUser = checkNotNull(userService.saveUser(user));
... ...
... ... @@ -66,7 +66,7 @@ public class WidgetTypeController extends BaseController {
66 66 widgetType.setTenantId(getCurrentUser().getTenantId());
67 67 }
68 68
69   - checkEntity(widgetType.getId(), widgetType);
  69 + checkEntity(widgetType.getId(), widgetType, Resource.WIDGET_TYPE);
70 70
71 71 return checkNotNull(widgetTypeService.saveWidgetType(widgetType));
72 72 } catch (Exception e) {
... ...
... ... @@ -61,15 +61,13 @@ public class WidgetsBundleController extends BaseController {
61 61 @ResponseBody
62 62 public WidgetsBundle saveWidgetsBundle(@RequestBody WidgetsBundle widgetsBundle) throws ThingsboardException {
63 63 try {
64   - checkEntity(widgetsBundle.getId(), widgetsBundle);
65   -
66   - if (widgetsBundle.getId() == null) {
67   - accessControlService
68   - .checkPermission(getCurrentUser(), Resource.WIDGETS_BUNDLE, Operation.CREATE, widgetsBundle.getId(), widgetsBundle);
  64 + if (getCurrentUser().getAuthority() == Authority.SYS_ADMIN) {
  65 + widgetsBundle.setTenantId(TenantId.SYS_TENANT_ID);
69 66 } else {
70   - checkWidgetsBundleId(widgetsBundle.getId(), Operation.WRITE);
  67 + widgetsBundle.setTenantId(getCurrentUser().getTenantId());
71 68 }
72 69
  70 + checkEntity(widgetsBundle.getId(), widgetsBundle, Resource.WIDGETS_BUNDLE);
73 71 return checkNotNull(widgetsBundleService.saveWidgetsBundle(widgetsBundle));
74 72 } catch (Exception e) {
75 73 throw handleException(e);
... ...
... ... @@ -46,4 +46,13 @@ public enum Resource {
46 46 public Optional<EntityType> getEntityType() {
47 47 return Optional.ofNullable(entityType);
48 48 }
  49 +
  50 + public static Resource of(EntityType entityType) {
  51 + for (Resource resource : Resource.values()) {
  52 + if (resource.getEntityType().get() == entityType) {
  53 + return resource;
  54 + }
  55 + }
  56 + throw new IllegalArgumentException("Unknown EntityType: " + entityType.name());
  57 + }
49 58 }
... ...
... ... @@ -223,6 +223,27 @@ public abstract class AbstractControllerTest {
223 223 login(CUSTOMER_USER_EMAIL, CUSTOMER_USER_PASSWORD);
224 224 }
225 225
  226 + private Tenant savedDifferentTenant;
  227 + protected void loginDifferentTenant() throws Exception {
  228 + loginSysAdmin();
  229 + Tenant tenant = new Tenant();
  230 + tenant.setTitle("Different tenant");
  231 + savedDifferentTenant = doPost("/api/tenant", tenant, Tenant.class);
  232 + Assert.assertNotNull(savedDifferentTenant);
  233 + User differentTenantAdmin = new User();
  234 + differentTenantAdmin.setAuthority(Authority.TENANT_ADMIN);
  235 + differentTenantAdmin.setTenantId(savedDifferentTenant.getId());
  236 + differentTenantAdmin.setEmail("different_tenant@thingsboard.org");
  237 +
  238 + createUserAndLogin(differentTenantAdmin, "testPassword");
  239 + }
  240 +
  241 + protected void deleteDifferentTenant() throws Exception {
  242 + loginSysAdmin();
  243 + doDelete("/api/tenant/" + savedDifferentTenant.getId().getId().toString())
  244 + .andExpect(status().isOk());
  245 + }
  246 +
226 247 protected User createUserAndLogin(User user, String password) throws Exception {
227 248 User savedUser = doPost("/api/user", user, User.class);
228 249 logout();
... ...
... ... @@ -99,6 +99,18 @@ public abstract class BaseAssetControllerTest extends AbstractControllerTest {
99 99 }
100 100
101 101 @Test
  102 + public void testUpdateAssetFromDifferentTenant() throws Exception {
  103 + Asset asset = new Asset();
  104 + asset.setName("My asset");
  105 + asset.setType("default");
  106 + Asset savedAsset = doPost("/api/asset", asset, Asset.class);
  107 +
  108 + loginDifferentTenant();
  109 + doPost("/api/asset", savedAsset, Asset.class, status().isForbidden());
  110 + deleteDifferentTenant();
  111 + }
  112 +
  113 + @Test
102 114 public void testFindAssetById() throws Exception {
103 115 Asset asset = new Asset();
104 116 asset.setName("My asset");
... ...
... ... @@ -23,6 +23,8 @@ import java.util.Collections;
23 23 import java.util.List;
24 24
25 25 import org.apache.commons.lang3.RandomStringUtils;
  26 +import org.junit.After;
  27 +import org.junit.Before;
26 28 import org.thingsboard.server.common.data.Customer;
27 29 import org.thingsboard.server.common.data.Tenant;
28 30 import org.thingsboard.server.common.data.User;
... ... @@ -38,25 +40,39 @@ import com.fasterxml.jackson.core.type.TypeReference;
38 40 public abstract class BaseCustomerControllerTest extends AbstractControllerTest {
39 41
40 42 private IdComparator<Customer> idComparator = new IdComparator<>();
41   -
42   - @Test
43   - public void testSaveCustomer() throws Exception {
  43 +
  44 + private Tenant savedTenant;
  45 + private User tenantAdmin;
  46 +
  47 + @Before
  48 + public void beforeTest() throws Exception {
44 49 loginSysAdmin();
45 50
46 51 Tenant tenant = new Tenant();
47 52 tenant.setTitle("My tenant");
48   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
  53 + savedTenant = doPost("/api/tenant", tenant, Tenant.class);
49 54 Assert.assertNotNull(savedTenant);
50   -
51   - User tenantAdmin = new User();
  55 +
  56 + tenantAdmin = new User();
52 57 tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
53 58 tenantAdmin.setTenantId(savedTenant.getId());
54 59 tenantAdmin.setEmail("tenant2@thingsboard.org");
55 60 tenantAdmin.setFirstName("Joe");
56 61 tenantAdmin.setLastName("Downs");
57   -
  62 +
58 63 tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
59   -
  64 + }
  65 +
  66 + @After
  67 + public void afterTest() throws Exception {
  68 + loginSysAdmin();
  69 +
  70 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  71 + .andExpect(status().isOk());
  72 + }
  73 +
  74 + @Test
  75 + public void testSaveCustomer() throws Exception {
60 76 Customer customer = new Customer();
61 77 customer.setTitle("My customer");
62 78 Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
... ... @@ -66,266 +82,159 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
66 82 Assert.assertEquals(customer.getTitle(), savedCustomer.getTitle());
67 83 savedCustomer.setTitle("My new customer");
68 84 doPost("/api/customer", savedCustomer, Customer.class);
69   -
70   - Customer foundCustomer = doGet("/api/customer/"+savedCustomer.getId().getId().toString(), Customer.class);
  85 +
  86 + Customer foundCustomer = doGet("/api/customer/"+savedCustomer.getId().getId().toString(), Customer.class);
71 87 Assert.assertEquals(foundCustomer.getTitle(), savedCustomer.getTitle());
72   -
  88 +
73 89 doDelete("/api/customer/"+savedCustomer.getId().getId().toString())
74 90 .andExpect(status().isOk());
75   -
76   - loginSysAdmin();
77   -
78   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
79   - .andExpect(status().isOk());
80 91 }
81   -
  92 +
82 93 @Test
83   - public void testFindCustomerById() throws Exception {
84   -
85   - loginSysAdmin();
  94 + public void testUpdateCustomerFromDifferentTenant() throws Exception {
  95 + Customer customer = new Customer();
  96 + customer.setTitle("My customer");
  97 + Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
  98 + doPost("/api/customer", savedCustomer, Customer.class);
86 99
87   - Tenant tenant = new Tenant();
88   - tenant.setTitle("My tenant");
89   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
90   - Assert.assertNotNull(savedTenant);
91   -
92   - User tenantAdmin = new User();
93   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
94   - tenantAdmin.setTenantId(savedTenant.getId());
95   - tenantAdmin.setEmail("tenant2@thingsboard.org");
96   - tenantAdmin.setFirstName("Joe");
97   - tenantAdmin.setLastName("Downs");
98   -
99   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
100   -
  100 + loginDifferentTenant();
  101 + doPost("/api/customer", savedCustomer, Customer.class, status().isForbidden());
  102 + deleteDifferentTenant();
  103 +
  104 + login(tenantAdmin.getName(), "testPassword1");
  105 + doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
  106 + .andExpect(status().isOk());
  107 + }
  108 +
  109 + @Test
  110 + public void testFindCustomerById() throws Exception {
101 111 Customer customer = new Customer();
102 112 customer.setTitle("My customer");
103 113 Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
104   -
105   - Customer foundCustomer = doGet("/api/customer/"+savedCustomer.getId().getId().toString(), Customer.class);
  114 +
  115 + Customer foundCustomer = doGet("/api/customer/" + savedCustomer.getId().getId().toString(), Customer.class);
106 116 Assert.assertNotNull(foundCustomer);
107 117 Assert.assertEquals(savedCustomer, foundCustomer);
108   -
109   - doDelete("/api/customer/"+savedCustomer.getId().getId().toString())
110   - .andExpect(status().isOk());
111   -
112   - loginSysAdmin();
113   -
114   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
115   - .andExpect(status().isOk());
  118 +
  119 + doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
  120 + .andExpect(status().isOk());
116 121 }
117   -
  122 +
118 123 @Test
119 124 public void testDeleteCustomer() throws Exception {
120   -
121   - loginSysAdmin();
122   -
123   - Tenant tenant = new Tenant();
124   - tenant.setTitle("My tenant");
125   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
126   - Assert.assertNotNull(savedTenant);
127   -
128   - User tenantAdmin = new User();
129   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
130   - tenantAdmin.setTenantId(savedTenant.getId());
131   - tenantAdmin.setEmail("tenant2@thingsboard.org");
132   - tenantAdmin.setFirstName("Joe");
133   - tenantAdmin.setLastName("Downs");
134   -
135   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
136   -
137 125 Customer customer = new Customer();
138 126 customer.setTitle("My customer");
139 127 Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
140   -
141   - doDelete("/api/customer/"+savedCustomer.getId().getId().toString())
142   - .andExpect(status().isOk());
143 128
144   - doGet("/api/customer/"+savedCustomer.getId().getId().toString())
145   - .andExpect(status().isNotFound());
146   -
147   - loginSysAdmin();
148   -
149   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
150   - .andExpect(status().isOk());
  129 + doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
  130 + .andExpect(status().isOk());
  131 +
  132 + doGet("/api/customer/" + savedCustomer.getId().getId().toString())
  133 + .andExpect(status().isNotFound());
151 134 }
152   -
  135 +
153 136 @Test
154 137 public void testSaveCustomerWithEmptyTitle() throws Exception {
155   -
156   - loginSysAdmin();
157   -
158   - Tenant tenant = new Tenant();
159   - tenant.setTitle("My tenant");
160   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
161   - Assert.assertNotNull(savedTenant);
162   -
163   - User tenantAdmin = new User();
164   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
165   - tenantAdmin.setTenantId(savedTenant.getId());
166   - tenantAdmin.setEmail("tenant2@thingsboard.org");
167   - tenantAdmin.setFirstName("Joe");
168   - tenantAdmin.setLastName("Downs");
169   -
170   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
171   -
172 138 Customer customer = new Customer();
173 139 doPost("/api/customer", customer)
174   - .andExpect(status().isBadRequest())
175   - .andExpect(statusReason(containsString("Customer title should be specified")));
176   -
177   - loginSysAdmin();
178   -
179   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
180   - .andExpect(status().isOk());
  140 + .andExpect(status().isBadRequest())
  141 + .andExpect(statusReason(containsString("Customer title should be specified")));
181 142 }
182   -
  143 +
183 144 @Test
184 145 public void testSaveCustomerWithInvalidEmail() throws Exception {
185   -
186   - loginSysAdmin();
187   -
188   - Tenant tenant = new Tenant();
189   - tenant.setTitle("My tenant");
190   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
191   - Assert.assertNotNull(savedTenant);
192   -
193   - User tenantAdmin = new User();
194   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
195   - tenantAdmin.setTenantId(savedTenant.getId());
196   - tenantAdmin.setEmail("tenant2@thingsboard.org");
197   - tenantAdmin.setFirstName("Joe");
198   - tenantAdmin.setLastName("Downs");
199   -
200   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
201   -
202 146 Customer customer = new Customer();
203 147 customer.setTitle("My customer");
204 148 customer.setEmail("invalid@mail");
205 149 doPost("/api/customer", customer)
206   - .andExpect(status().isBadRequest())
207   - .andExpect(statusReason(containsString("Invalid email address format 'invalid@mail'")));
208   -
209   - loginSysAdmin();
210   -
211   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
212   - .andExpect(status().isOk());
  150 + .andExpect(status().isBadRequest())
  151 + .andExpect(statusReason(containsString("Invalid email address format 'invalid@mail'")));
  152 +
  153 +// loginSysAdmin();
  154 +//
  155 +// doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
  156 +// .andExpect(status().isOk());
213 157 }
214   -
  158 +
215 159 @Test
216 160 public void testFindCustomers() throws Exception {
217   - loginSysAdmin();
218   -
219   - Tenant tenant = new Tenant();
220   - tenant.setTitle("My tenant");
221   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
222   - Assert.assertNotNull(savedTenant);
223   -
224 161 TenantId tenantId = savedTenant.getId();
225   -
226   - User tenantAdmin = new User();
227   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
228   - tenantAdmin.setTenantId(tenantId);
229   - tenantAdmin.setEmail("tenant2@thingsboard.org");
230   - tenantAdmin.setFirstName("Joe");
231   - tenantAdmin.setLastName("Downs");
232   -
233   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
234   -
  162 +
235 163 List<Customer> customers = new ArrayList<>();
236   - for (int i=0;i<135;i++) {
  164 + for (int i = 0; i < 135; i++) {
237 165 Customer customer = new Customer();
238 166 customer.setTenantId(tenantId);
239   - customer.setTitle("Customer"+i);
  167 + customer.setTitle("Customer" + i);
240 168 customers.add(doPost("/api/customer", customer, Customer.class));
241 169 }
242   -
  170 +
243 171 List<Customer> loadedCustomers = new ArrayList<>();
244 172 TextPageLink pageLink = new TextPageLink(23);
245 173 TextPageData<Customer> pageData = null;
246 174 do {
247   - pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>(){}, pageLink);
  175 + pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>() {
  176 + }, pageLink);
248 177 loadedCustomers.addAll(pageData.getData());
249 178 if (pageData.hasNext()) {
250 179 pageLink = pageData.getNextPageLink();
251 180 }
252 181 } while (pageData.hasNext());
253   -
  182 +
254 183 Collections.sort(customers, idComparator);
255 184 Collections.sort(loadedCustomers, idComparator);
256   -
  185 +
257 186 Assert.assertEquals(customers, loadedCustomers);
258   -
259   - loginSysAdmin();
260   -
261   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
262   - .andExpect(status().isOk());
263 187 }
264   -
  188 +
265 189 @Test
266 190 public void testFindCustomersByTitle() throws Exception {
267   -
268   - loginSysAdmin();
269   -
270   - Tenant tenant = new Tenant();
271   - tenant.setTitle("My tenant");
272   - Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
273   - Assert.assertNotNull(savedTenant);
274   -
275 191 TenantId tenantId = savedTenant.getId();
276   -
277   - User tenantAdmin = new User();
278   - tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
279   - tenantAdmin.setTenantId(tenantId);
280   - tenantAdmin.setEmail("tenant2@thingsboard.org");
281   - tenantAdmin.setFirstName("Joe");
282   - tenantAdmin.setLastName("Downs");
283   -
284   - tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
285   -
  192 +
286 193 String title1 = "Customer title 1";
287 194 List<Customer> customersTitle1 = new ArrayList<>();
288   - for (int i=0;i<143;i++) {
  195 + for (int i = 0; i < 143; i++) {
289 196 Customer customer = new Customer();
290 197 customer.setTenantId(tenantId);
291   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
292   - String title = title1+suffix;
  198 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  199 + String title = title1 + suffix;
293 200 title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase();
294 201 customer.setTitle(title);
295 202 customersTitle1.add(doPost("/api/customer", customer, Customer.class));
296 203 }
297 204 String title2 = "Customer title 2";
298 205 List<Customer> customersTitle2 = new ArrayList<>();
299   - for (int i=0;i<175;i++) {
  206 + for (int i = 0; i < 175; i++) {
300 207 Customer customer = new Customer();
301 208 customer.setTenantId(tenantId);
302   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
303   - String title = title2+suffix;
  209 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  210 + String title = title2 + suffix;
304 211 title = i % 2 == 0 ? title.toLowerCase() : title.toUpperCase();
305 212 customer.setTitle(title);
306 213 customersTitle2.add(doPost("/api/customer", customer, Customer.class));
307 214 }
308   -
  215 +
309 216 List<Customer> loadedCustomersTitle1 = new ArrayList<>();
310 217 TextPageLink pageLink = new TextPageLink(15, title1);
311 218 TextPageData<Customer> pageData = null;
312 219 do {
313   - pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>(){}, pageLink);
  220 + pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>() {
  221 + }, pageLink);
314 222 loadedCustomersTitle1.addAll(pageData.getData());
315 223 if (pageData.hasNext()) {
316 224 pageLink = pageData.getNextPageLink();
317 225 }
318 226 } while (pageData.hasNext());
319   -
  227 +
320 228 Collections.sort(customersTitle1, idComparator);
321 229 Collections.sort(loadedCustomersTitle1, idComparator);
322   -
  230 +
323 231 Assert.assertEquals(customersTitle1, loadedCustomersTitle1);
324   -
  232 +
325 233 List<Customer> loadedCustomersTitle2 = new ArrayList<>();
326 234 pageLink = new TextPageLink(4, title2);
327 235 do {
328   - pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>(){}, pageLink);
  236 + pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>() {
  237 + }, pageLink);
329 238 loadedCustomersTitle2.addAll(pageData.getData());
330 239 if (pageData.hasNext()) {
331 240 pageLink = pageData.getNextPageLink();
... ... @@ -334,33 +243,30 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
334 243
335 244 Collections.sort(customersTitle2, idComparator);
336 245 Collections.sort(loadedCustomersTitle2, idComparator);
337   -
  246 +
338 247 Assert.assertEquals(customersTitle2, loadedCustomersTitle2);
339   -
  248 +
340 249 for (Customer customer : loadedCustomersTitle1) {
341   - doDelete("/api/customer/"+customer.getId().getId().toString())
342   - .andExpect(status().isOk());
  250 + doDelete("/api/customer/" + customer.getId().getId().toString())
  251 + .andExpect(status().isOk());
343 252 }
344   -
  253 +
345 254 pageLink = new TextPageLink(4, title1);
346   - pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>(){}, pageLink);
  255 + pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>() {
  256 + }, pageLink);
347 257 Assert.assertFalse(pageData.hasNext());
348 258 Assert.assertEquals(0, pageData.getData().size());
349   -
  259 +
350 260 for (Customer customer : loadedCustomersTitle2) {
351   - doDelete("/api/customer/"+customer.getId().getId().toString())
352   - .andExpect(status().isOk());
  261 + doDelete("/api/customer/" + customer.getId().getId().toString())
  262 + .andExpect(status().isOk());
353 263 }
354   -
  264 +
355 265 pageLink = new TextPageLink(4, title2);
356   - pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>(){}, pageLink);
  266 + pageData = doGetTypedWithPageLink("/api/customers?", new TypeReference<TextPageData<Customer>>() {
  267 + }, pageLink);
357 268 Assert.assertFalse(pageData.hasNext());
358 269 Assert.assertEquals(0, pageData.getData().size());
359   -
360   - loginSysAdmin();
361   -
362   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
363   - .andExpect(status().isOk());
364 270 }
365   -
  271 +
366 272 }
... ...
... ... @@ -16,10 +16,8 @@
16 16 package org.thingsboard.server.controller;
17 17
18 18 import static org.hamcrest.Matchers.containsString;
19   -import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
20 19 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
21 20
22   -import java.sql.Time;
23 21 import java.util.ArrayList;
24 22 import java.util.Collections;
25 23 import java.util.List;
... ... @@ -33,7 +31,6 @@ import org.thingsboard.server.common.data.page.TextPageLink;
33 31 import org.thingsboard.server.common.data.page.TimePageData;
34 32 import org.thingsboard.server.common.data.page.TimePageLink;
35 33 import org.thingsboard.server.common.data.security.Authority;
36   -import org.thingsboard.server.dao.model.ModelConstants;
37 34 import org.junit.After;
38 35 import org.junit.Assert;
39 36 import org.junit.Before;
... ... @@ -93,6 +90,17 @@ public abstract class BaseDashboardControllerTest extends AbstractControllerTest
93 90 Dashboard foundDashboard = doGet("/api/dashboard/" + savedDashboard.getId().getId().toString(), Dashboard.class);
94 91 Assert.assertEquals(foundDashboard.getTitle(), savedDashboard.getTitle());
95 92 }
  93 +
  94 + @Test
  95 + public void testUpdateDashboardFromDifferentTenant() throws Exception {
  96 + Dashboard dashboard = new Dashboard();
  97 + dashboard.setTitle("My dashboard");
  98 + Dashboard savedDashboard = doPost("/api/dashboard", dashboard, Dashboard.class);
  99 +
  100 + loginDifferentTenant();
  101 + doPost("/api/dashboard", savedDashboard, Dashboard.class, status().isForbidden());
  102 + deleteDifferentTenant();
  103 + }
96 104
97 105 @Test
98 106 public void testFindDashboardById() throws Exception {
... ...
... ... @@ -107,6 +107,17 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest {
107 107 Device foundDevice = doGet("/api/device/" + savedDevice.getId().getId().toString(), Device.class);
108 108 Assert.assertEquals(foundDevice.getName(), savedDevice.getName());
109 109 }
  110 +
  111 + @Test
  112 + public void testUpdateDeviceFromDifferentTenant() throws Exception {
  113 + Device device = new Device();
  114 + device.setName("My device");
  115 + device.setType("default");
  116 + Device savedDevice = doPost("/api/device", device, Device.class);
  117 + loginDifferentTenant();
  118 + doPost("/api/device", savedDevice, Device.class, status().isForbidden());
  119 + deleteDifferentTenant();
  120 + }
110 121
111 122 @Test
112 123 public void testFindDeviceById() throws Exception {
... ...
... ... @@ -25,7 +25,6 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
25 25 import org.junit.After;
26 26 import org.junit.Assert;
27 27 import org.junit.Before;
28   -import org.junit.Ignore;
29 28 import org.junit.Test;
30 29 import org.thingsboard.server.common.data.Customer;
31 30 import org.thingsboard.server.common.data.Device;
... ... @@ -132,6 +131,15 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
132 131 assertEquals(foundEntityView.getKeys(), telemetry);
133 132 }
134 133
  134 +
  135 + @Test
  136 + public void testUpdateEntityViewFromDifferentTenant() throws Exception {
  137 + EntityView savedView = getNewSavedEntityView("Test entity view");
  138 + loginDifferentTenant();
  139 + doPost("/api/entityView", savedView, EntityView.class, status().isForbidden());
  140 + deleteDifferentTenant();
  141 + }
  142 +
135 143 @Test
136 144 public void testDeleteEntityView() throws Exception {
137 145 EntityView view = getNewSavedEntityView("Test entity view");
... ...
... ... @@ -38,21 +38,23 @@ import java.util.List;
38 38
39 39 import static org.hamcrest.Matchers.containsString;
40 40 import static org.hamcrest.Matchers.is;
41   -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
  41 +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
  42 +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
  43 +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
42 44
43 45 public abstract class BaseUserControllerTest extends AbstractControllerTest {
44   -
  46 +
45 47 private IdComparator<User> idComparator = new IdComparator<>();
46 48
47 49 @Test
48 50 public void testSaveUser() throws Exception {
49 51 loginSysAdmin();
50   -
  52 +
51 53 Tenant tenant = new Tenant();
52 54 tenant.setTitle("My tenant");
53 55 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
54 56 Assert.assertNotNull(savedTenant);
55   -
  57 +
56 58 String email = "tenant2@thingsboard.org";
57 59 User user = new User();
58 60 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -66,13 +68,13 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
66 68 Assert.assertTrue(savedUser.getCreatedTime() > 0);
67 69 Assert.assertEquals(user.getEmail(), savedUser.getEmail());
68 70
69   - User foundUser = doGet("/api/user/"+savedUser.getId().getId().toString(), User.class);
  71 + User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
70 72 Assert.assertEquals(foundUser, savedUser);
71   -
  73 +
72 74 logout();
73 75 doGet("/api/noauth/activate?activateToken={activateToken}", TestMailService.currentActivateToken)
74   - .andExpect(status().isSeeOther())
75   - .andExpect(header().string(HttpHeaders.LOCATION, "/login/createPassword?activateToken=" + TestMailService.currentActivateToken));
  76 + .andExpect(status().isSeeOther())
  77 + .andExpect(header().string(HttpHeaders.LOCATION, "/login/createPassword?activateToken=" + TestMailService.currentActivateToken));
76 78
77 79 JsonNode activateRequest = new ObjectMapper().createObjectNode()
78 80 .put("activateToken", TestMailService.currentActivateToken)
... ... @@ -82,36 +84,61 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
82 84 validateAndSetJwtToken(tokenInfo, email);
83 85
84 86 doGet("/api/auth/user")
85   - .andExpect(status().isOk())
86   - .andExpect(jsonPath("$.authority",is(Authority.TENANT_ADMIN.name())))
87   - .andExpect(jsonPath("$.email",is(email)));
88   -
  87 + .andExpect(status().isOk())
  88 + .andExpect(jsonPath("$.authority", is(Authority.TENANT_ADMIN.name())))
  89 + .andExpect(jsonPath("$.email", is(email)));
  90 +
89 91 logout();
90   -
  92 +
91 93 login(email, "testPassword");
92   -
  94 +
93 95 doGet("/api/auth/user")
94   - .andExpect(status().isOk())
95   - .andExpect(jsonPath("$.authority",is(Authority.TENANT_ADMIN.name())))
96   - .andExpect(jsonPath("$.email",is(email)));
97   -
  96 + .andExpect(status().isOk())
  97 + .andExpect(jsonPath("$.authority", is(Authority.TENANT_ADMIN.name())))
  98 + .andExpect(jsonPath("$.email", is(email)));
  99 +
98 100 loginSysAdmin();
99   - doDelete("/api/user/"+savedUser.getId().getId().toString())
100   - .andExpect(status().isOk());
101   -
102   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
103   - .andExpect(status().isOk());
  101 + doDelete("/api/user/" + savedUser.getId().getId().toString())
  102 + .andExpect(status().isOk());
  103 +
  104 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  105 + .andExpect(status().isOk());
104 106 }
105   -
  107 +
  108 + @Test
  109 + public void testUpdateUserFromDifferentTenant() throws Exception {
  110 + loginSysAdmin();
  111 + Tenant tenant = new Tenant();
  112 + tenant.setTitle("My tenant");
  113 + Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
  114 + Assert.assertNotNull(savedTenant);
  115 +
  116 + User tenantAdmin = new User();
  117 + tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
  118 + tenantAdmin.setTenantId(savedTenant.getId());
  119 + tenantAdmin.setEmail("tenant2@thingsboard.org");
  120 + tenantAdmin.setFirstName("Joe");
  121 + tenantAdmin.setLastName("Downs");
  122 + tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
  123 +
  124 + loginDifferentTenant();
  125 + doPost("/api/user", tenantAdmin, User.class, status().isForbidden());
  126 + deleteDifferentTenant();
  127 +
  128 + loginSysAdmin();
  129 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  130 + .andExpect(status().isOk());
  131 + }
  132 +
106 133 @Test
107 134 public void testResetPassword() throws Exception {
108 135 loginSysAdmin();
109   -
  136 +
110 137 Tenant tenant = new Tenant();
111 138 tenant.setTitle("My tenant");
112 139 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
113 140 Assert.assertNotNull(savedTenant);
114   -
  141 +
115 142 String email = "tenant2@thingsboard.org";
116 143 User user = new User();
117 144 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -119,7 +146,7 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
119 146 user.setEmail(email);
120 147 user.setFirstName("Joe");
121 148 user.setLastName("Downs");
122   -
  149 +
123 150 User savedUser = createUserAndLogin(user, "testPassword1");
124 151 logout();
125 152
... ... @@ -127,10 +154,10 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
127 154 .put("email", email);
128 155
129 156 doPost("/api/noauth/resetPasswordByEmail", resetPasswordByEmailRequest)
130   - .andExpect(status().isOk());
  157 + .andExpect(status().isOk());
131 158 doGet("/api/noauth/resetPassword?resetToken={resetToken}", TestMailService.currentResetPasswordToken)
132   - .andExpect(status().isSeeOther())
133   - .andExpect(header().string(HttpHeaders.LOCATION, "/login/resetPassword?resetToken=" + TestMailService.currentResetPasswordToken));
  159 + .andExpect(status().isSeeOther())
  160 + .andExpect(header().string(HttpHeaders.LOCATION, "/login/resetPassword?resetToken=" + TestMailService.currentResetPasswordToken));
134 161
135 162 JsonNode resetPasswordRequest = new ObjectMapper().createObjectNode()
136 163 .put("resetToken", TestMailService.currentResetPasswordToken)
... ... @@ -140,35 +167,35 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
140 167 validateAndSetJwtToken(tokenInfo, email);
141 168
142 169 doGet("/api/auth/user")
143   - .andExpect(status().isOk())
144   - .andExpect(jsonPath("$.authority",is(Authority.TENANT_ADMIN.name())))
145   - .andExpect(jsonPath("$.email",is(email)));
146   -
  170 + .andExpect(status().isOk())
  171 + .andExpect(jsonPath("$.authority", is(Authority.TENANT_ADMIN.name())))
  172 + .andExpect(jsonPath("$.email", is(email)));
  173 +
147 174 logout();
148   -
  175 +
149 176 login(email, "testPassword2");
150 177 doGet("/api/auth/user")
151   - .andExpect(status().isOk())
152   - .andExpect(jsonPath("$.authority",is(Authority.TENANT_ADMIN.name())))
153   - .andExpect(jsonPath("$.email",is(email)));
154   -
  178 + .andExpect(status().isOk())
  179 + .andExpect(jsonPath("$.authority", is(Authority.TENANT_ADMIN.name())))
  180 + .andExpect(jsonPath("$.email", is(email)));
  181 +
155 182 loginSysAdmin();
156   - doDelete("/api/user/"+savedUser.getId().getId().toString())
157   - .andExpect(status().isOk());
158   -
159   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
160   - .andExpect(status().isOk());
  183 + doDelete("/api/user/" + savedUser.getId().getId().toString())
  184 + .andExpect(status().isOk());
  185 +
  186 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  187 + .andExpect(status().isOk());
161 188 }
162   -
  189 +
163 190 @Test
164 191 public void testFindUserById() throws Exception {
165 192 loginSysAdmin();
166   -
  193 +
167 194 Tenant tenant = new Tenant();
168 195 tenant.setTitle("My tenant");
169 196 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
170 197 Assert.assertNotNull(savedTenant);
171   -
  198 +
172 199 String email = "tenant2@thingsboard.org";
173 200 User user = new User();
174 201 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -176,25 +203,25 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
176 203 user.setEmail(email);
177 204 user.setFirstName("Joe");
178 205 user.setLastName("Downs");
179   -
  206 +
180 207 User savedUser = doPost("/api/user", user, User.class);
181   - User foundUser = doGet("/api/user/"+savedUser.getId().getId().toString(), User.class);
  208 + User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
182 209 Assert.assertNotNull(foundUser);
183 210 Assert.assertEquals(savedUser, foundUser);
184   -
185   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
186   - .andExpect(status().isOk());
  211 +
  212 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  213 + .andExpect(status().isOk());
187 214 }
188   -
  215 +
189 216 @Test
190 217 public void testSaveUserWithSameEmail() throws Exception {
191 218 loginSysAdmin();
192   -
  219 +
193 220 Tenant tenant = new Tenant();
194 221 tenant.setTitle("My tenant");
195 222 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
196 223 Assert.assertNotNull(savedTenant);
197   -
  224 +
198 225 String email = TENANT_ADMIN_EMAIL;
199 226 User user = new User();
200 227 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -202,24 +229,24 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
202 229 user.setEmail(email);
203 230 user.setFirstName("Joe");
204 231 user.setLastName("Downs");
205   -
  232 +
206 233 doPost("/api/user", user)
207   - .andExpect(status().isBadRequest())
208   - .andExpect(statusReason(containsString("User with email '" + email + "' already present in database")));
209   -
210   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
211   - .andExpect(status().isOk());
  234 + .andExpect(status().isBadRequest())
  235 + .andExpect(statusReason(containsString("User with email '" + email + "' already present in database")));
  236 +
  237 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  238 + .andExpect(status().isOk());
212 239 }
213   -
  240 +
214 241 @Test
215 242 public void testSaveUserWithInvalidEmail() throws Exception {
216 243 loginSysAdmin();
217   -
  244 +
218 245 Tenant tenant = new Tenant();
219 246 tenant.setTitle("My tenant");
220 247 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
221 248 Assert.assertNotNull(savedTenant);
222   -
  249 +
223 250 String email = "tenant_thingsboard.org";
224 251 User user = new User();
225 252 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -227,62 +254,62 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
227 254 user.setEmail(email);
228 255 user.setFirstName("Joe");
229 256 user.setLastName("Downs");
230   -
  257 +
231 258 doPost("/api/user", user)
232   - .andExpect(status().isBadRequest())
233   - .andExpect(statusReason(containsString("Invalid email address format '" + email + "'")));
234   -
235   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
236   - .andExpect(status().isOk());
  259 + .andExpect(status().isBadRequest())
  260 + .andExpect(statusReason(containsString("Invalid email address format '" + email + "'")));
  261 +
  262 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  263 + .andExpect(status().isOk());
237 264 }
238   -
  265 +
239 266 @Test
240 267 public void testSaveUserWithEmptyEmail() throws Exception {
241 268 loginSysAdmin();
242   -
  269 +
243 270 Tenant tenant = new Tenant();
244 271 tenant.setTitle("My tenant");
245 272 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
246 273 Assert.assertNotNull(savedTenant);
247   -
  274 +
248 275 User user = new User();
249 276 user.setAuthority(Authority.TENANT_ADMIN);
250 277 user.setTenantId(savedTenant.getId());
251 278 user.setFirstName("Joe");
252 279 user.setLastName("Downs");
253   -
  280 +
254 281 doPost("/api/user", user)
255   - .andExpect(status().isBadRequest())
256   - .andExpect(statusReason(containsString("User email should be specified")));
257   -
258   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
259   - .andExpect(status().isOk());
  282 + .andExpect(status().isBadRequest())
  283 + .andExpect(statusReason(containsString("User email should be specified")));
  284 +
  285 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  286 + .andExpect(status().isOk());
260 287 }
261   -
  288 +
262 289 @Test
263 290 public void testSaveUserWithoutTenant() throws Exception {
264 291 loginSysAdmin();
265   -
  292 +
266 293 User user = new User();
267 294 user.setAuthority(Authority.TENANT_ADMIN);
268 295 user.setEmail("tenant2@thingsboard.org");
269 296 user.setFirstName("Joe");
270 297 user.setLastName("Downs");
271   -
  298 +
272 299 doPost("/api/user", user)
273   - .andExpect(status().isBadRequest())
274   - .andExpect(statusReason(containsString("Tenant administrator should be assigned to tenant")));
  300 + .andExpect(status().isBadRequest())
  301 + .andExpect(statusReason(containsString("Tenant administrator should be assigned to tenant")));
275 302 }
276   -
  303 +
277 304 @Test
278 305 public void testDeleteUser() throws Exception {
279 306 loginSysAdmin();
280   -
  307 +
281 308 Tenant tenant = new Tenant();
282 309 tenant.setTitle("My tenant");
283 310 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
284 311 Assert.assertNotNull(savedTenant);
285   -
  312 +
286 313 String email = "tenant2@thingsboard.org";
287 314 User user = new User();
288 315 user.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -290,176 +317,182 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
290 317 user.setEmail(email);
291 318 user.setFirstName("Joe");
292 319 user.setLastName("Downs");
293   -
  320 +
294 321 User savedUser = doPost("/api/user", user, User.class);
295   - User foundUser = doGet("/api/user/"+savedUser.getId().getId().toString(), User.class);
  322 + User foundUser = doGet("/api/user/" + savedUser.getId().getId().toString(), User.class);
296 323 Assert.assertNotNull(foundUser);
297   -
298   - doDelete("/api/user/"+savedUser.getId().getId().toString())
299   - .andExpect(status().isOk());
300   -
301   - doGet("/api/user/"+savedUser.getId().getId().toString())
302   - .andExpect(status().isNotFound());
303   -
304   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
305   - .andExpect(status().isOk());
  324 +
  325 + doDelete("/api/user/" + savedUser.getId().getId().toString())
  326 + .andExpect(status().isOk());
  327 +
  328 + doGet("/api/user/" + savedUser.getId().getId().toString())
  329 + .andExpect(status().isNotFound());
  330 +
  331 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  332 + .andExpect(status().isOk());
306 333 }
307   -
  334 +
308 335 @Test
309 336 public void testFindTenantAdmins() throws Exception {
310 337 loginSysAdmin();
311   -
  338 +
312 339 Tenant tenant = new Tenant();
313 340 tenant.setTitle("My tenant");
314 341 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
315 342 Assert.assertNotNull(savedTenant);
316   -
  343 +
317 344 TenantId tenantId = savedTenant.getId();
318   -
  345 +
319 346 List<User> tenantAdmins = new ArrayList<>();
320   - for (int i=0;i<64;i++) {
  347 + for (int i = 0; i < 64; i++) {
321 348 User user = new User();
322 349 user.setAuthority(Authority.TENANT_ADMIN);
323 350 user.setTenantId(tenantId);
324 351 user.setEmail("testTenant" + i + "@thingsboard.org");
325 352 tenantAdmins.add(doPost("/api/user", user, User.class));
326 353 }
327   -
  354 +
328 355 List<User> loadedTenantAdmins = new ArrayList<>();
329 356 TextPageLink pageLink = new TextPageLink(33);
330 357 TextPageData<User> pageData = null;
331 358 do {
332   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
333   - new TypeReference<TextPageData<User>>(){}, pageLink);
  359 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  360 + new TypeReference<TextPageData<User>>() {
  361 + }, pageLink);
334 362 loadedTenantAdmins.addAll(pageData.getData());
335 363 if (pageData.hasNext()) {
336 364 pageLink = pageData.getNextPageLink();
337 365 }
338 366 } while (pageData.hasNext());
339   -
  367 +
340 368 Collections.sort(tenantAdmins, idComparator);
341 369 Collections.sort(loadedTenantAdmins, idComparator);
342   -
  370 +
343 371 Assert.assertEquals(tenantAdmins, loadedTenantAdmins);
344   -
345   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
346   - .andExpect(status().isOk());
347   -
  372 +
  373 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  374 + .andExpect(status().isOk());
  375 +
348 376 pageLink = new TextPageLink(33);
349   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
350   - new TypeReference<TextPageData<User>>(){}, pageLink);
  377 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  378 + new TypeReference<TextPageData<User>>() {
  379 + }, pageLink);
351 380 Assert.assertFalse(pageData.hasNext());
352 381 Assert.assertTrue(pageData.getData().isEmpty());
353 382 }
354   -
  383 +
355 384 @Test
356 385 public void testFindTenantAdminsByEmail() throws Exception {
357   -
  386 +
358 387 loginSysAdmin();
359   -
  388 +
360 389 Tenant tenant = new Tenant();
361 390 tenant.setTitle("My tenant");
362 391 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
363 392 Assert.assertNotNull(savedTenant);
364   -
  393 +
365 394 TenantId tenantId = savedTenant.getId();
366   -
367   - String email1 = "testEmail1";
  395 +
  396 + String email1 = "testEmail1";
368 397 List<User> tenantAdminsEmail1 = new ArrayList<>();
369   -
370   - for (int i=0;i<124;i++) {
  398 +
  399 + for (int i = 0; i < 124; i++) {
371 400 User user = new User();
372 401 user.setAuthority(Authority.TENANT_ADMIN);
373 402 user.setTenantId(tenantId);
374   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
375   - String email = email1+suffix+ "@thingsboard.org";
  403 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  404 + String email = email1 + suffix + "@thingsboard.org";
376 405 email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase();
377 406 user.setEmail(email);
378 407 tenantAdminsEmail1.add(doPost("/api/user", user, User.class));
379 408 }
380   -
381   - String email2 = "testEmail2";
  409 +
  410 + String email2 = "testEmail2";
382 411 List<User> tenantAdminsEmail2 = new ArrayList<>();
383   -
384   - for (int i=0;i<112;i++) {
  412 +
  413 + for (int i = 0; i < 112; i++) {
385 414 User user = new User();
386 415 user.setAuthority(Authority.TENANT_ADMIN);
387 416 user.setTenantId(tenantId);
388   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
389   - String email = email2+suffix+ "@thingsboard.org";
  417 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  418 + String email = email2 + suffix + "@thingsboard.org";
390 419 email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase();
391 420 user.setEmail(email);
392 421 tenantAdminsEmail2.add(doPost("/api/user", user, User.class));
393 422 }
394   -
  423 +
395 424 List<User> loadedTenantAdminsEmail1 = new ArrayList<>();
396 425 TextPageLink pageLink = new TextPageLink(33, email1);
397 426 TextPageData<User> pageData = null;
398 427 do {
399   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
400   - new TypeReference<TextPageData<User>>(){}, pageLink);
  428 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  429 + new TypeReference<TextPageData<User>>() {
  430 + }, pageLink);
401 431 loadedTenantAdminsEmail1.addAll(pageData.getData());
402 432 if (pageData.hasNext()) {
403 433 pageLink = pageData.getNextPageLink();
404 434 }
405 435 } while (pageData.hasNext());
406   -
  436 +
407 437 Collections.sort(tenantAdminsEmail1, idComparator);
408 438 Collections.sort(loadedTenantAdminsEmail1, idComparator);
409   -
  439 +
410 440 Assert.assertEquals(tenantAdminsEmail1, loadedTenantAdminsEmail1);
411   -
  441 +
412 442 List<User> loadedTenantAdminsEmail2 = new ArrayList<>();
413 443 pageLink = new TextPageLink(16, email2);
414 444 do {
415   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
416   - new TypeReference<TextPageData<User>>(){}, pageLink);
  445 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  446 + new TypeReference<TextPageData<User>>() {
  447 + }, pageLink);
417 448 loadedTenantAdminsEmail2.addAll(pageData.getData());
418 449 if (pageData.hasNext()) {
419 450 pageLink = pageData.getNextPageLink();
420 451 }
421 452 } while (pageData.hasNext());
422   -
  453 +
423 454 Collections.sort(tenantAdminsEmail2, idComparator);
424 455 Collections.sort(loadedTenantAdminsEmail2, idComparator);
425   -
  456 +
426 457 Assert.assertEquals(tenantAdminsEmail2, loadedTenantAdminsEmail2);
427   -
  458 +
428 459 for (User user : loadedTenantAdminsEmail1) {
429   - doDelete("/api/user/"+user.getId().getId().toString())
430   - .andExpect(status().isOk());
  460 + doDelete("/api/user/" + user.getId().getId().toString())
  461 + .andExpect(status().isOk());
431 462 }
432   -
  463 +
433 464 pageLink = new TextPageLink(4, email1);
434   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
435   - new TypeReference<TextPageData<User>>(){}, pageLink);
  465 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  466 + new TypeReference<TextPageData<User>>() {
  467 + }, pageLink);
436 468 Assert.assertFalse(pageData.hasNext());
437 469 Assert.assertEquals(0, pageData.getData().size());
438   -
  470 +
439 471 for (User user : loadedTenantAdminsEmail2) {
440   - doDelete("/api/user/"+user.getId().getId().toString())
441   - .andExpect(status().isOk());
  472 + doDelete("/api/user/" + user.getId().getId().toString())
  473 + .andExpect(status().isOk());
442 474 }
443   -
  475 +
444 476 pageLink = new TextPageLink(4, email2);
445   - pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
446   - new TypeReference<TextPageData<User>>(){}, pageLink);
  477 + pageData = doGetTypedWithPageLink("/api/tenant/" + tenantId.getId().toString() + "/users?",
  478 + new TypeReference<TextPageData<User>>() {
  479 + }, pageLink);
447 480 Assert.assertFalse(pageData.hasNext());
448 481 Assert.assertEquals(0, pageData.getData().size());
449   -
450   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
451   - .andExpect(status().isOk());
  482 +
  483 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  484 + .andExpect(status().isOk());
452 485 }
453   -
  486 +
454 487 @Test
455 488 public void testFindCustomerUsers() throws Exception {
456   -
  489 +
457 490 loginSysAdmin();
458 491 Tenant tenant = new Tenant();
459 492 tenant.setTitle("My tenant");
460 493 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
461 494 Assert.assertNotNull(savedTenant);
462   -
  495 +
463 496 TenantId tenantId = savedTenant.getId();
464 497 User tenantAdmin = new User();
465 498 tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -467,59 +500,60 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
467 500 tenantAdmin.setEmail("tenant2@thingsboard.org");
468 501 tenantAdmin.setFirstName("Joe");
469 502 tenantAdmin.setLastName("Downs");
470   -
  503 +
471 504 tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
472   -
  505 +
473 506 Customer customer = new Customer();
474 507 customer.setTitle("My customer");
475 508 Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
476 509
477 510 CustomerId customerId = savedCustomer.getId();
478   -
  511 +
479 512 List<User> customerUsers = new ArrayList<>();
480   - for (int i=0;i<56;i++) {
  513 + for (int i = 0; i < 56; i++) {
481 514 User user = new User();
482 515 user.setAuthority(Authority.CUSTOMER_USER);
483 516 user.setCustomerId(customerId);
484 517 user.setEmail("testCustomer" + i + "@thingsboard.org");
485 518 customerUsers.add(doPost("/api/user", user, User.class));
486 519 }
487   -
  520 +
488 521 List<User> loadedCustomerUsers = new ArrayList<>();
489 522 TextPageLink pageLink = new TextPageLink(33);
490 523 TextPageData<User> pageData = null;
491 524 do {
492   - pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
493   - new TypeReference<TextPageData<User>>(){}, pageLink);
  525 + pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
  526 + new TypeReference<TextPageData<User>>() {
  527 + }, pageLink);
494 528 loadedCustomerUsers.addAll(pageData.getData());
495 529 if (pageData.hasNext()) {
496 530 pageLink = pageData.getNextPageLink();
497 531 }
498 532 } while (pageData.hasNext());
499   -
  533 +
500 534 Collections.sort(customerUsers, idComparator);
501 535 Collections.sort(loadedCustomerUsers, idComparator);
502   -
  536 +
503 537 Assert.assertEquals(customerUsers, loadedCustomerUsers);
504   -
505   - doDelete("/api/customer/"+customerId.getId().toString())
506   - .andExpect(status().isOk());
507   -
  538 +
  539 + doDelete("/api/customer/" + customerId.getId().toString())
  540 + .andExpect(status().isOk());
  541 +
508 542 loginSysAdmin();
509   -
510   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
511   - .andExpect(status().isOk());
  543 +
  544 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  545 + .andExpect(status().isOk());
512 546 }
513   -
  547 +
514 548 @Test
515 549 public void testFindCustomerUsersByEmail() throws Exception {
516   -
  550 +
517 551 loginSysAdmin();
518 552 Tenant tenant = new Tenant();
519 553 tenant.setTitle("My tenant");
520 554 Tenant savedTenant = doPost("/api/tenant", tenant, Tenant.class);
521 555 Assert.assertNotNull(savedTenant);
522   -
  556 +
523 557 TenantId tenantId = savedTenant.getId();
524 558 User tenantAdmin = new User();
525 559 tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
... ... @@ -527,105 +561,109 @@ public abstract class BaseUserControllerTest extends AbstractControllerTest {
527 561 tenantAdmin.setEmail("tenant2@thingsboard.org");
528 562 tenantAdmin.setFirstName("Joe");
529 563 tenantAdmin.setLastName("Downs");
530   -
  564 +
531 565 tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1");
532   -
  566 +
533 567 Customer customer = new Customer();
534 568 customer.setTitle("My customer");
535 569 Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
536 570
537 571 CustomerId customerId = savedCustomer.getId();
538   -
539   - String email1 = "testEmail1";
  572 +
  573 + String email1 = "testEmail1";
540 574 List<User> customerUsersEmail1 = new ArrayList<>();
541   -
542   - for (int i=0;i<74;i++) {
  575 +
  576 + for (int i = 0; i < 74; i++) {
543 577 User user = new User();
544 578 user.setAuthority(Authority.CUSTOMER_USER);
545 579 user.setCustomerId(customerId);
546   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
547   - String email = email1+suffix+ "@thingsboard.org";
  580 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  581 + String email = email1 + suffix + "@thingsboard.org";
548 582 email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase();
549 583 user.setEmail(email);
550 584 customerUsersEmail1.add(doPost("/api/user", user, User.class));
551 585 }
552   -
553   - String email2 = "testEmail2";
  586 +
  587 + String email2 = "testEmail2";
554 588 List<User> customerUsersEmail2 = new ArrayList<>();
555   -
556   - for (int i=0;i<92;i++) {
  589 +
  590 + for (int i = 0; i < 92; i++) {
557 591 User user = new User();
558 592 user.setAuthority(Authority.CUSTOMER_USER);
559 593 user.setCustomerId(customerId);
560   - String suffix = RandomStringUtils.randomAlphanumeric((int)(5 + Math.random()*10));
561   - String email = email2+suffix+ "@thingsboard.org";
  594 + String suffix = RandomStringUtils.randomAlphanumeric((int) (5 + Math.random() * 10));
  595 + String email = email2 + suffix + "@thingsboard.org";
562 596 email = i % 2 == 0 ? email.toLowerCase() : email.toUpperCase();
563 597 user.setEmail(email);
564 598 customerUsersEmail2.add(doPost("/api/user", user, User.class));
565 599 }
566   -
  600 +
567 601 List<User> loadedCustomerUsersEmail1 = new ArrayList<>();
568 602 TextPageLink pageLink = new TextPageLink(33, email1);
569 603 TextPageData<User> pageData = null;
570 604 do {
571   - pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
572   - new TypeReference<TextPageData<User>>(){}, pageLink);
  605 + pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
  606 + new TypeReference<TextPageData<User>>() {
  607 + }, pageLink);
573 608 loadedCustomerUsersEmail1.addAll(pageData.getData());
574 609 if (pageData.hasNext()) {
575 610 pageLink = pageData.getNextPageLink();
576 611 }
577 612 } while (pageData.hasNext());
578   -
  613 +
579 614 Collections.sort(customerUsersEmail1, idComparator);
580 615 Collections.sort(loadedCustomerUsersEmail1, idComparator);
581   -
  616 +
582 617 Assert.assertEquals(customerUsersEmail1, loadedCustomerUsersEmail1);
583   -
  618 +
584 619 List<User> loadedCustomerUsersEmail2 = new ArrayList<>();
585 620 pageLink = new TextPageLink(16, email2);
586 621 do {
587   - pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
588   - new TypeReference<TextPageData<User>>(){}, pageLink);
  622 + pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
  623 + new TypeReference<TextPageData<User>>() {
  624 + }, pageLink);
589 625 loadedCustomerUsersEmail2.addAll(pageData.getData());
590 626 if (pageData.hasNext()) {
591 627 pageLink = pageData.getNextPageLink();
592 628 }
593 629 } while (pageData.hasNext());
594   -
  630 +
595 631 Collections.sort(customerUsersEmail2, idComparator);
596 632 Collections.sort(loadedCustomerUsersEmail2, idComparator);
597   -
  633 +
598 634 Assert.assertEquals(customerUsersEmail2, loadedCustomerUsersEmail2);
599   -
  635 +
600 636 for (User user : loadedCustomerUsersEmail1) {
601   - doDelete("/api/user/"+user.getId().getId().toString())
602   - .andExpect(status().isOk());
  637 + doDelete("/api/user/" + user.getId().getId().toString())
  638 + .andExpect(status().isOk());
603 639 }
604   -
  640 +
605 641 pageLink = new TextPageLink(4, email1);
606   - pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
607   - new TypeReference<TextPageData<User>>(){}, pageLink);
  642 + pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
  643 + new TypeReference<TextPageData<User>>() {
  644 + }, pageLink);
608 645 Assert.assertFalse(pageData.hasNext());
609 646 Assert.assertEquals(0, pageData.getData().size());
610   -
  647 +
611 648 for (User user : loadedCustomerUsersEmail2) {
612   - doDelete("/api/user/"+user.getId().getId().toString())
613   - .andExpect(status().isOk());
  649 + doDelete("/api/user/" + user.getId().getId().toString())
  650 + .andExpect(status().isOk());
614 651 }
615   -
  652 +
616 653 pageLink = new TextPageLink(4, email2);
617   - pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
618   - new TypeReference<TextPageData<User>>(){}, pageLink);
  654 + pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/users?",
  655 + new TypeReference<TextPageData<User>>() {
  656 + }, pageLink);
619 657 Assert.assertFalse(pageData.hasNext());
620 658 Assert.assertEquals(0, pageData.getData().size());
621   -
622   - doDelete("/api/customer/"+customerId.getId().toString())
623   - .andExpect(status().isOk());
624   -
  659 +
  660 + doDelete("/api/customer/" + customerId.getId().toString())
  661 + .andExpect(status().isOk());
  662 +
625 663 loginSysAdmin();
626   -
627   - doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
628   - .andExpect(status().isOk());
  664 +
  665 + doDelete("/api/tenant/" + savedTenant.getId().getId().toString())
  666 + .andExpect(status().isOk());
629 667 }
630   -
  668 +
631 669 }
... ...
... ... @@ -64,7 +64,6 @@ public abstract class BaseWidgetTypeControllerTest extends AbstractControllerTes
64 64 WidgetsBundle widgetsBundle = new WidgetsBundle();
65 65 widgetsBundle.setTitle("My widgets bundle");
66 66 savedWidgetsBundle = doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class);
67   -
68 67 }
69 68
70 69 @After
... ... @@ -101,6 +100,19 @@ public abstract class BaseWidgetTypeControllerTest extends AbstractControllerTes
101 100 }
102 101
103 102 @Test
  103 + public void testUpdateWidgetTypeFromDifferentTenant() throws Exception {
  104 + WidgetType widgetType = new WidgetType();
  105 + widgetType.setBundleAlias(savedWidgetsBundle.getAlias());
  106 + widgetType.setName("Widget Type");
  107 + widgetType.setDescriptor(new ObjectMapper().readValue("{ \"someKey\": \"someValue\" }", JsonNode.class));
  108 + WidgetType savedWidgetType = doPost("/api/widgetType", widgetType, WidgetType.class);
  109 +
  110 + loginDifferentTenant();
  111 + doPost("/api/widgetType", savedWidgetType, WidgetType.class, status().isForbidden());
  112 + deleteDifferentTenant();
  113 + }
  114 +
  115 + @Test
104 116 public void testFindWidgetTypeById() throws Exception {
105 117 WidgetType widgetType = new WidgetType();
106 118 widgetType.setBundleAlias(savedWidgetsBundle.getAlias());
... ...
... ... @@ -89,6 +89,17 @@ public abstract class BaseWidgetsBundleControllerTest extends AbstractController
89 89 }
90 90
91 91 @Test
  92 + public void testUpdateWidgetsBundleFromDifferentTenant() throws Exception {
  93 + WidgetsBundle widgetsBundle = new WidgetsBundle();
  94 + widgetsBundle.setTitle("My widgets bundle");
  95 + WidgetsBundle savedWidgetsBundle = doPost("/api/widgetsBundle", widgetsBundle, WidgetsBundle.class);
  96 +
  97 + loginDifferentTenant();
  98 + doPost("/api/widgetsBundle", savedWidgetsBundle, WidgetsBundle.class, status().isForbidden());
  99 + deleteDifferentTenant();
  100 + }
  101 +
  102 + @Test
92 103 public void testFindWidgetsBundleById() throws Exception {
93 104 WidgetsBundle widgetsBundle = new WidgetsBundle();
94 105 widgetsBundle.setTitle("My widgets bundle");
... ...