Merge pull request #10901 from imbeacon/fix/profiles-creation-with-default-name-but-default-profile-exists

Fixed creation of profiles with name "default" and existing default renamed profile
This commit is contained in:
Andrew Shvayka 2024-09-09 15:54:50 +03:00 committed by GitHub
commit 0a5a60cded
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 32 additions and 6 deletions

View File

@ -236,8 +236,9 @@ public class AssetProfileServiceImpl extends CachedVersionedEntityService<AssetP
log.trace("Executing findOrCreateAssetProfile"); log.trace("Executing findOrCreateAssetProfile");
AssetProfile assetProfile = findAssetProfileByName(tenantId, name, false); AssetProfile assetProfile = findAssetProfileByName(tenantId, name, false);
if (assetProfile == null) { if (assetProfile == null) {
boolean isDefault = "default".equals(name) && findDefaultAssetProfile(tenantId) == null;
try { try {
assetProfile = this.doCreateDefaultAssetProfile(tenantId, name, name.equals("default"), true); assetProfile = this.doCreateAssetProfile(tenantId, name, isDefault, true);
} catch (DataValidationException e) { } catch (DataValidationException e) {
if (ASSET_PROFILE_WITH_SUCH_NAME_ALREADY_EXISTS.equals(e.getMessage())) { if (ASSET_PROFILE_WITH_SUCH_NAME_ALREADY_EXISTS.equals(e.getMessage())) {
assetProfile = findAssetProfileByName(tenantId, name, false); assetProfile = findAssetProfileByName(tenantId, name, false);
@ -252,10 +253,10 @@ public class AssetProfileServiceImpl extends CachedVersionedEntityService<AssetP
@Override @Override
public AssetProfile createDefaultAssetProfile(TenantId tenantId) { public AssetProfile createDefaultAssetProfile(TenantId tenantId) {
log.trace("Executing createDefaultAssetProfile tenantId [{}]", tenantId); log.trace("Executing createDefaultAssetProfile tenantId [{}]", tenantId);
return doCreateDefaultAssetProfile(tenantId, "default", true, false); return doCreateAssetProfile(tenantId, "default", true, false);
} }
private AssetProfile doCreateDefaultAssetProfile(TenantId tenantId, String profileName, boolean defaultProfile, boolean publishSaveEvent) { private AssetProfile doCreateAssetProfile(TenantId tenantId, String profileName, boolean defaultProfile, boolean publishSaveEvent) {
validateId(tenantId, id -> INCORRECT_TENANT_ID + id); validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
AssetProfile assetProfile = new AssetProfile(); AssetProfile assetProfile = new AssetProfile();
assetProfile.setTenantId(tenantId); assetProfile.setTenantId(tenantId);

View File

@ -271,8 +271,9 @@ public class DeviceProfileServiceImpl extends CachedVersionedEntityService<Devic
log.trace("Executing findOrCreateDefaultDeviceProfile"); log.trace("Executing findOrCreateDefaultDeviceProfile");
DeviceProfile deviceProfile = findDeviceProfileByName(tenantId, name, false); DeviceProfile deviceProfile = findDeviceProfileByName(tenantId, name, false);
if (deviceProfile == null) { if (deviceProfile == null) {
boolean isDefault = "default".equals(name) && findDefaultDeviceProfile(tenantId) == null;
try { try {
deviceProfile = this.doCreateDefaultDeviceProfile(tenantId, name, name.equals("default"), true); deviceProfile = this.doCreateDeviceProfile(tenantId, name, isDefault, true);
} catch (DataValidationException e) { } catch (DataValidationException e) {
if (DEVICE_PROFILE_WITH_SUCH_NAME_ALREADY_EXISTS.equals(e.getMessage())) { if (DEVICE_PROFILE_WITH_SUCH_NAME_ALREADY_EXISTS.equals(e.getMessage())) {
deviceProfile = findDeviceProfileByName(tenantId, name, false); deviceProfile = findDeviceProfileByName(tenantId, name, false);
@ -287,10 +288,10 @@ public class DeviceProfileServiceImpl extends CachedVersionedEntityService<Devic
@Override @Override
public DeviceProfile createDefaultDeviceProfile(TenantId tenantId) { public DeviceProfile createDefaultDeviceProfile(TenantId tenantId) {
log.trace("Executing createDefaultDeviceProfile tenantId [{}]", tenantId); log.trace("Executing createDefaultDeviceProfile tenantId [{}]", tenantId);
return doCreateDefaultDeviceProfile(tenantId, "default", true, false); return doCreateDeviceProfile(tenantId, "default", true, false);
} }
private DeviceProfile doCreateDefaultDeviceProfile(TenantId tenantId, String profileName, boolean defaultProfile, boolean publishSaveEvent) { private DeviceProfile doCreateDeviceProfile(TenantId tenantId, String profileName, boolean defaultProfile, boolean publishSaveEvent) {
validateId(tenantId, id -> INCORRECT_TENANT_ID + id); validateId(tenantId, id -> INCORRECT_TENANT_ID + id);
DeviceProfile deviceProfile = new DeviceProfile(); DeviceProfile deviceProfile = new DeviceProfile();
deviceProfile.setTenantId(tenantId); deviceProfile.setTenantId(tenantId);

View File

@ -163,6 +163,18 @@ public class AssetProfileServiceTest extends AbstractServiceTest {
}); });
} }
@Test
public void testSaveAssetProfileWithNameDefaultAndProfileWithIsDefaultAndDifferentNameAlreadyExists() {
AssetProfile defaultAssetProfile = assetProfileService.findDefaultAssetProfile(tenantId);
Assert.assertNotNull(defaultAssetProfile);
defaultAssetProfile.setName("Asset Profile 1");
assetProfileService.saveAssetProfile(defaultAssetProfile);
AssetProfile createdAssetProfile = assetProfileService.findOrCreateAssetProfile(tenantId, "default");
Assert.assertNotNull(createdAssetProfile);
Assert.assertEquals("default", createdAssetProfile.getName());
Assert.assertFalse(createdAssetProfile.isDefault());
}
@Test @Test
public void testDeleteAssetProfileWithExistingAsset() { public void testDeleteAssetProfileWithExistingAsset() {
AssetProfile assetProfile = this.createAssetProfile(tenantId, "Asset Profile"); AssetProfile assetProfile = this.createAssetProfile(tenantId, "Asset Profile");

View File

@ -209,6 +209,18 @@ public class DeviceProfileServiceTest extends AbstractServiceTest {
}); });
} }
@Test
public void testSaveDeviceProfileWithNameDefaultAndProfileWithIsDefaultAndDifferentNameAlreadyExists() {
DeviceProfile defaultDeviceProfile = deviceProfileService.findDefaultDeviceProfile(tenantId);
Assert.assertNotNull(defaultDeviceProfile);
defaultDeviceProfile.setName("Device Profile 1");
deviceProfileService.saveDeviceProfile(defaultDeviceProfile);
DeviceProfile createdDeviceProfile = deviceProfileService.findOrCreateDeviceProfile(tenantId, "default");
Assert.assertNotNull(createdDeviceProfile);
Assert.assertEquals("default", createdDeviceProfile.getName());
Assert.assertFalse(createdDeviceProfile.isDefault());
}
@Ignore @Ignore
@Test @Test
public void testChangeDeviceProfileTypeWithExistingDevices() { public void testChangeDeviceProfileTypeWithExistingDevices() {