Merge branch 'fix/deviceWithCredentials' of github.com:YevhenBondarenko/thingsboard into feature/redesign/add-device-dialog-credentials
This commit is contained in:
commit
bdb3c687a0
@ -75,6 +75,7 @@ import org.thingsboard.server.service.security.permission.Operation;
|
|||||||
import org.thingsboard.server.service.security.permission.Resource;
|
import org.thingsboard.server.service.security.permission.Resource;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import javax.validation.Valid;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -210,9 +211,9 @@ public class DeviceController extends BaseController {
|
|||||||
@RequestMapping(value = "/device-with-credentials", method = RequestMethod.POST)
|
@RequestMapping(value = "/device-with-credentials", method = RequestMethod.POST)
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public Device saveDeviceWithCredentials(@ApiParam(value = "The JSON object with device and credentials. See method description above for example.")
|
public Device saveDeviceWithCredentials(@ApiParam(value = "The JSON object with device and credentials. See method description above for example.")
|
||||||
@RequestBody SaveDeviceWithCredentialsRequest deviceAndCredentials) throws ThingsboardException {
|
@Valid @RequestBody SaveDeviceWithCredentialsRequest deviceAndCredentials) throws ThingsboardException {
|
||||||
Device device = checkNotNull(deviceAndCredentials.getDevice());
|
Device device = deviceAndCredentials.getDevice();
|
||||||
DeviceCredentials credentials = checkNotNull(deviceAndCredentials.getCredentials());
|
DeviceCredentials credentials = deviceAndCredentials.getCredentials();
|
||||||
device.setTenantId(getCurrentUser().getTenantId());
|
device.setTenantId(getCurrentUser().getTenantId());
|
||||||
checkEntity(device.getId(), device, Resource.DEVICE);
|
checkEntity(device.getId(), device, Resource.DEVICE);
|
||||||
return tbDeviceService.saveDeviceWithCredentials(device, credentials, getCurrentUser());
|
return tbDeviceService.saveDeviceWithCredentials(device, credentials, getCurrentUser());
|
||||||
|
|||||||
@ -244,6 +244,53 @@ public class DeviceControllerTest extends AbstractControllerTest {
|
|||||||
testNotificationUpdateGatewayOneTime(savedDevice, oldDevice);
|
testNotificationUpdateGatewayOneTime(savedDevice, oldDevice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveDeviceWithCredentials_CredentialsIsNull() throws Exception {
|
||||||
|
Device device = new Device();
|
||||||
|
device.setName("My device");
|
||||||
|
device.setType("default");
|
||||||
|
|
||||||
|
SaveDeviceWithCredentialsRequest saveRequest = new SaveDeviceWithCredentialsRequest(device, null);
|
||||||
|
doPost("/api/device-with-credentials", saveRequest).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(statusReason(containsString("Validation error: credentials must not be null")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveDeviceWithCredentials_DeviceIsNull() throws Exception {
|
||||||
|
String testToken = "TEST_TOKEN";
|
||||||
|
|
||||||
|
DeviceCredentials deviceCredentials = new DeviceCredentials();
|
||||||
|
deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
|
||||||
|
deviceCredentials.setCredentialsId(testToken);
|
||||||
|
|
||||||
|
SaveDeviceWithCredentialsRequest saveRequest = new SaveDeviceWithCredentialsRequest(null, deviceCredentials);
|
||||||
|
doPost("/api/device-with-credentials", saveRequest).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(statusReason(containsString("Validation error: device must not be null")));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveDeviceWithCredentials_WithExistingName() throws Exception {
|
||||||
|
String testToken = "TEST_TOKEN";
|
||||||
|
|
||||||
|
Device device = new Device();
|
||||||
|
device.setName("My device");
|
||||||
|
device.setType("default");
|
||||||
|
|
||||||
|
DeviceCredentials deviceCredentials = new DeviceCredentials();
|
||||||
|
deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
|
||||||
|
deviceCredentials.setCredentialsId(testToken);
|
||||||
|
|
||||||
|
SaveDeviceWithCredentialsRequest saveRequest = new SaveDeviceWithCredentialsRequest(device, deviceCredentials);
|
||||||
|
|
||||||
|
Mockito.reset(tbClusterService, auditLogService, gatewayNotificationsService);
|
||||||
|
|
||||||
|
Device savedDevice = readResponse(doPost("/api/device-with-credentials", saveRequest).andExpect(status().isOk()), Device.class);
|
||||||
|
Assert.assertNotNull(savedDevice);
|
||||||
|
|
||||||
|
doPost("/api/device-with-credentials", saveRequest).andExpect(status().isBadRequest())
|
||||||
|
.andExpect(statusReason(containsString("Device with such name already exists!")));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void saveDeviceWithViolationOfValidation() throws Exception {
|
public void saveDeviceWithViolationOfValidation() throws Exception {
|
||||||
Device device = new Device();
|
Device device = new Device();
|
||||||
|
|||||||
@ -20,13 +20,17 @@ import io.swagger.annotations.ApiModelProperty;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
@ApiModel
|
@ApiModel
|
||||||
@Data
|
@Data
|
||||||
public class SaveDeviceWithCredentialsRequest {
|
public class SaveDeviceWithCredentialsRequest {
|
||||||
|
|
||||||
@ApiModelProperty(position = 1, value = "The JSON with device entity.", required = true)
|
@ApiModelProperty(position = 1, value = "The JSON with device entity.", required = true)
|
||||||
|
@NotNull
|
||||||
private final Device device;
|
private final Device device;
|
||||||
@ApiModelProperty(position = 2, value = "The JSON with credentials entity.", required = true)
|
@ApiModelProperty(position = 2, value = "The JSON with credentials entity.", required = true)
|
||||||
|
@NotNull
|
||||||
private final DeviceCredentials credentials;
|
private final DeviceCredentials credentials;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -174,10 +174,6 @@ public class DeviceServiceImpl extends AbstractCachedEntityService<DeviceCacheKe
|
|||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials) {
|
public Device saveDeviceWithCredentials(Device device, DeviceCredentials deviceCredentials) {
|
||||||
if (device.getId() == null) {
|
|
||||||
Device deviceWithName = this.findDeviceByTenantIdAndName(device.getTenantId(), device.getName());
|
|
||||||
device = deviceWithName == null ? device : deviceWithName.updateDevice(device);
|
|
||||||
}
|
|
||||||
Device savedDevice = this.saveDeviceWithoutCredentials(device, true);
|
Device savedDevice = this.saveDeviceWithoutCredentials(device, true);
|
||||||
deviceCredentials.setDeviceId(savedDevice.getId());
|
deviceCredentials.setDeviceId(savedDevice.getId());
|
||||||
if (device.getId() == null) {
|
if (device.getId() == null) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user