Merge pull request #6695 from thingsboard/refactoring_tests_alarm_customer
[3.4] Refactoring_tests: alarm, customer
This commit is contained in:
		
						commit
						eb710b91cd
					
				@ -335,7 +335,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private EdgeEventActionType edgeTypeByActionType(ActionType actionType) {
 | 
			
		||||
    public static EdgeEventActionType edgeTypeByActionType(ActionType actionType) {
 | 
			
		||||
        switch (actionType) {
 | 
			
		||||
            case ADDED:
 | 
			
		||||
                return EdgeEventActionType.ADDED;
 | 
			
		||||
 | 
			
		||||
@ -45,7 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 | 
			
		||||
@EnableWebSocket
 | 
			
		||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 | 
			
		||||
@Slf4j
 | 
			
		||||
public abstract class AbstractControllerTest extends AbstractWebTest {
 | 
			
		||||
public abstract class AbstractControllerTest extends AbstractNotifyEntityTest {
 | 
			
		||||
 | 
			
		||||
    public static final String WS_URL = "ws://localhost:";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,182 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright © 2016-2022 The Thingsboard Authors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.controller;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.mockito.Mockito;
 | 
			
		||||
import org.springframework.boot.test.mock.mockito.SpyBean;
 | 
			
		||||
import org.thingsboard.server.cluster.TbClusterService;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.HasName;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CustomerId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.UserId;
 | 
			
		||||
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
			
		||||
import org.thingsboard.server.dao.audit.AuditLogService;
 | 
			
		||||
import org.thingsboard.server.dao.model.ModelConstants;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
import static org.mockito.Mockito.never;
 | 
			
		||||
import static org.mockito.Mockito.times;
 | 
			
		||||
import static org.thingsboard.server.service.entitiy.DefaultTbNotificationEntityService.edgeTypeByActionType;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
public abstract class AbstractNotifyEntityTest extends AbstractWebTest {
 | 
			
		||||
 | 
			
		||||
    @SpyBean
 | 
			
		||||
    protected TbClusterService tbClusterService;
 | 
			
		||||
 | 
			
		||||
    @SpyBean
 | 
			
		||||
    protected AuditLogService auditLogService;
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityAllOneTime(HasName entity, EntityId entityId, EntityId originatorId,
 | 
			
		||||
                                              TenantId tenantId, CustomerId customerId, UserId userId, String userName,
 | 
			
		||||
                                              ActionType actionType, Object... additionalInfo) {
 | 
			
		||||
        testSendNotificationMsgToEdgeServiceOneTime(entityId, tenantId, actionType);
 | 
			
		||||
        testLogEntityActionOneTime(entity, originatorId, tenantId, customerId, userId, userName, actionType, additionalInfo);
 | 
			
		||||
        testPushMsgToRuleEngineOneTime(originatorId, tenantId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityDeleteOneTimeMsgToEdgeServiceNever(HasName entity, EntityId entityId, EntityId originatorId,
 | 
			
		||||
                                                                      TenantId tenantId, CustomerId customerId, UserId userId, String userName,
 | 
			
		||||
                                                                      ActionType actionType, Object... additionalInfo) {
 | 
			
		||||
        testNotificationMsgToEdgeServiceNever(entityId);
 | 
			
		||||
        testLogEntityActionOneTime(entity, originatorId, tenantId, customerId, userId, userName, actionType, additionalInfo);
 | 
			
		||||
        testPushMsgToRuleEngineOneTime(entityId, tenantId);
 | 
			
		||||
        testBroadcastEntityStateChangeEventOneTime(entityId, tenantId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
    protected void testNotifyEntityNeverMsgToEdgeServiceOneTime(HasName entity, EntityId entityId, TenantId tenantId, ActionType actionType) {
 | 
			
		||||
        testSendNotificationMsgToEdgeServiceOneTime(entityId, tenantId, actionType);
 | 
			
		||||
        testLogEntityActionNever(entityId, entity);
 | 
			
		||||
        testPushMsgToRuleEngineNever(entityId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityOneTimeMsgToEdgeServiceNever(HasName entity, EntityId entityId, EntityId originatorId,
 | 
			
		||||
                                                                TenantId tenantId, CustomerId customerId, UserId userId, String userName,
 | 
			
		||||
                                                                ActionType actionType, Object... additionalInfo) {
 | 
			
		||||
        testNotificationMsgToEdgeServiceNever(entityId);
 | 
			
		||||
        testLogEntityActionOneTime(entity, originatorId, tenantId, customerId, userId, userName, actionType, additionalInfo);
 | 
			
		||||
        testPushMsgToRuleEngineOneTime(originatorId, tenantId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityBroadcastEntityStateChangeEventOneTimeMsgToEdgeServiceNever(HasName entity, EntityId entityId, EntityId originatorId,
 | 
			
		||||
                                                                                               TenantId tenantId, CustomerId customerId, UserId userId, String userName,
 | 
			
		||||
                                                                                               ActionType actionType, Object... additionalInfo) {
 | 
			
		||||
        testNotificationMsgToEdgeServiceNever(entityId);
 | 
			
		||||
        testLogEntityActionOneTime(entity, originatorId, tenantId, customerId, userId, userName, actionType, additionalInfo);
 | 
			
		||||
        testPushMsgToRuleEngineOneTime(originatorId, tenantId);
 | 
			
		||||
        testBroadcastEntityStateChangeEventOneTime(entityId, tenantId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityError(HasName entity, TenantId tenantId,
 | 
			
		||||
                                         UserId userId, String userName, ActionType actionType, Exception exp,
 | 
			
		||||
                                         Object... additionalInfo) {
 | 
			
		||||
        CustomerId customer_NULL_UUID = (CustomerId) EntityIdFactory.getByTypeAndUuid(EntityType.CUSTOMER, ModelConstants.NULL_UUID);
 | 
			
		||||
        EntityId entity_NULL_UUID = EntityIdFactory.getByTypeAndUuid(EntityType.valueOf(entity.getClass().toString()
 | 
			
		||||
                        .substring(entity.getClass().toString().lastIndexOf(".") + 1).toUpperCase(Locale.ENGLISH)),
 | 
			
		||||
                ModelConstants.NULL_UUID);
 | 
			
		||||
        testNotificationMsgToEdgeServiceNever(entity_NULL_UUID);
 | 
			
		||||
        if (additionalInfo.length > 0) {
 | 
			
		||||
            Mockito.verify(auditLogService, times(1)).logEntityAction(Mockito.eq(tenantId),
 | 
			
		||||
                    Mockito.eq(customer_NULL_UUID), Mockito.eq(userId), Mockito.eq(userName),
 | 
			
		||||
                    Mockito.eq(entity_NULL_UUID), Mockito.any(entity.getClass()), Mockito.eq(actionType),
 | 
			
		||||
                    Mockito.argThat(argument ->
 | 
			
		||||
                            argument.getMessage().equals(exp.getMessage())), Mockito.eq(additionalInfo));
 | 
			
		||||
        } else {
 | 
			
		||||
            Mockito.verify(auditLogService, times(1)).logEntityAction(Mockito.eq(tenantId),
 | 
			
		||||
                    Mockito.eq(customer_NULL_UUID), Mockito.eq(userId), Mockito.eq(userName),
 | 
			
		||||
                    Mockito.eq(entity_NULL_UUID), Mockito.any(entity.getClass()), Mockito.eq(actionType),
 | 
			
		||||
                    Mockito.argThat(argument ->
 | 
			
		||||
                        argument.getMessage().equals(exp.getMessage())));
 | 
			
		||||
        }
 | 
			
		||||
        testPushMsgToRuleEngineNever(entity_NULL_UUID);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void testNotifyEntityNever(EntityId entityId, HasName entity) {
 | 
			
		||||
        testNotificationMsgToEdgeServiceNever(entityId);
 | 
			
		||||
        testLogEntityActionNever(entityId, entity);
 | 
			
		||||
        testPushMsgToRuleEngineNever(entityId);
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testNotificationMsgToEdgeServiceNever(EntityId entityId) {
 | 
			
		||||
        Mockito.verify(tbClusterService, never()).sendNotificationMsgToEdgeService(Mockito.any(),
 | 
			
		||||
                Mockito.any(), Mockito.any(entityId.getClass()), Mockito.any(), Mockito.any(), Mockito.any());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testLogEntityActionNever(EntityId entityId, HasName entity) {
 | 
			
		||||
        Mockito.verify(auditLogService, never()).logEntityAction(Mockito.any(), Mockito.any(),
 | 
			
		||||
                Mockito.any(), Mockito.any(), Mockito.any(entityId.getClass()), Mockito.any(entity.getClass()),
 | 
			
		||||
                Mockito.any(), Mockito.any());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testPushMsgToRuleEngineNever(EntityId entityId) {
 | 
			
		||||
        Mockito.verify(tbClusterService, never()).pushMsgToRuleEngine(Mockito.any(),
 | 
			
		||||
                Mockito.any(entityId.getClass()), Mockito.any(), Mockito.any());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testLogEntityActionOneTime(HasName entity, EntityId originatorId, TenantId tenantId, CustomerId customerId,
 | 
			
		||||
                                            UserId userId, String userName, ActionType actionType, Object... additionalInfo) {
 | 
			
		||||
        if (additionalInfo.length == 0) {
 | 
			
		||||
            Mockito.verify(auditLogService, times(1)).logEntityAction(Mockito.eq(tenantId), Mockito.eq(customerId),
 | 
			
		||||
                    Mockito.eq(userId), Mockito.eq(userName), Mockito.eq(originatorId),
 | 
			
		||||
                    Mockito.eq(entity), Mockito.eq(actionType), Mockito.isNull());
 | 
			
		||||
        } else {
 | 
			
		||||
            String additionalInfoStr = extractParameter(String.class, 0, additionalInfo);
 | 
			
		||||
            Mockito.verify(auditLogService, times(1)).logEntityAction(Mockito.eq(tenantId), Mockito.eq(customerId),
 | 
			
		||||
                    Mockito.eq(userId), Mockito.eq(userName), Mockito.eq(originatorId),
 | 
			
		||||
                    Mockito.eq(entity), Mockito.eq(actionType), Mockito.isNull(), Mockito.eq(additionalInfoStr));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testPushMsgToRuleEngineOneTime(EntityId originatorId, TenantId tenantId) {
 | 
			
		||||
        Mockito.verify(tbClusterService, times(1)).pushMsgToRuleEngine(Mockito.eq(tenantId),
 | 
			
		||||
                Mockito.eq(originatorId), Mockito.any(TbMsg.class), Mockito.isNull());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testSendNotificationMsgToEdgeServiceOneTime(EntityId entityId, TenantId tenantId, ActionType actionType) {
 | 
			
		||||
        Mockito.verify(tbClusterService, times(1)).sendNotificationMsgToEdgeService(Mockito.eq(tenantId),
 | 
			
		||||
                Mockito.isNull(), Mockito.eq(entityId), Mockito.isNull(), Mockito.isNull(),
 | 
			
		||||
                Mockito.eq(edgeTypeByActionType(actionType)));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void testBroadcastEntityStateChangeEventOneTime(EntityId entityId, TenantId tenantId) {
 | 
			
		||||
        Mockito.verify(tbClusterService, times(1)).broadcastEntityStateChangeEvent(Mockito.eq(tenantId),
 | 
			
		||||
                Mockito.any(entityId.getClass()), Mockito.any(ComponentLifecycleEvent.class));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private <T> T extractParameter(Class<T> clazz, int index, Object... additionalInfo) {
 | 
			
		||||
        T result = null;
 | 
			
		||||
        if (additionalInfo != null && additionalInfo.length > index) {
 | 
			
		||||
            Object paramObject = additionalInfo[index];
 | 
			
		||||
            if (clazz.isInstance(paramObject)) {
 | 
			
		||||
                result = clazz.cast(paramObject);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -75,11 +75,6 @@ import org.thingsboard.server.common.data.id.UserId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.page.TimePageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.queue.ProcessingStrategy;
 | 
			
		||||
import org.thingsboard.server.common.data.queue.ProcessingStrategyType;
 | 
			
		||||
import org.thingsboard.server.common.data.queue.Queue;
 | 
			
		||||
import org.thingsboard.server.common.data.queue.SubmitStrategy;
 | 
			
		||||
import org.thingsboard.server.common.data.queue.SubmitStrategyType;
 | 
			
		||||
import org.thingsboard.server.common.data.security.Authority;
 | 
			
		||||
import org.thingsboard.server.config.ThingsboardSecurityConfiguration;
 | 
			
		||||
import org.thingsboard.server.dao.tenant.TenantProfileService;
 | 
			
		||||
@ -144,9 +139,11 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest {
 | 
			
		||||
 | 
			
		||||
    protected TenantId tenantId;
 | 
			
		||||
    protected UserId tenantAdminUserId;
 | 
			
		||||
    protected CustomerId tenantAdminCustomerId;
 | 
			
		||||
    protected CustomerId customerId;
 | 
			
		||||
    protected TenantId differentTenantId;
 | 
			
		||||
    protected CustomerId differentCustomerId;
 | 
			
		||||
    protected UserId customerUserId;
 | 
			
		||||
 | 
			
		||||
    @SuppressWarnings("rawtypes")
 | 
			
		||||
    private HttpMessageConverter mappingJackson2HttpMessageConverter;
 | 
			
		||||
@ -211,6 +208,7 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest {
 | 
			
		||||
 | 
			
		||||
        tenantAdmin = createUserAndLogin(tenantAdmin, TENANT_ADMIN_PASSWORD);
 | 
			
		||||
        tenantAdminUserId = tenantAdmin.getId();
 | 
			
		||||
        tenantAdminCustomerId = tenantAdmin.getCustomerId();
 | 
			
		||||
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        customer.setTitle("Customer");
 | 
			
		||||
@ -224,7 +222,8 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest {
 | 
			
		||||
        customerUser.setCustomerId(savedCustomer.getId());
 | 
			
		||||
        customerUser.setEmail(CUSTOMER_USER_EMAIL);
 | 
			
		||||
 | 
			
		||||
        createUserAndLogin(customerUser, CUSTOMER_USER_PASSWORD);
 | 
			
		||||
        customerUser = createUserAndLogin(customerUser, CUSTOMER_USER_PASSWORD);
 | 
			
		||||
        customerUserId = customerUser.getId();
 | 
			
		||||
 | 
			
		||||
        logout();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -17,10 +17,12 @@ package org.thingsboard.server.controller;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.core.type.TypeReference;
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Assert;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.mockito.Mockito;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.Device;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
@ -28,6 +30,7 @@ import org.thingsboard.server.common.data.alarm.Alarm;
 | 
			
		||||
import org.thingsboard.server.common.data.alarm.AlarmInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.alarm.AlarmSeverity;
 | 
			
		||||
import org.thingsboard.server.common.data.alarm.AlarmStatus;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
 | 
			
		||||
import java.util.LinkedList;
 | 
			
		||||
@ -35,6 +38,7 @@ import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
public abstract class BaseAlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
 | 
			
		||||
    public static final String TEST_ALARM_TYPE = "Test";
 | 
			
		||||
@ -65,142 +69,244 @@ public abstract class BaseAlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreateAlarmViaCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(alarm, alarm.getId(), alarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ADDED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreateAlarmViaTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(alarm, alarm.getId(), alarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ADDED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateAlarmViaCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm.setSeverity(AlarmSeverity.MAJOR);
 | 
			
		||||
        Alarm updatedAlarm = doPost("/api/alarm", alarm, Alarm.class);
 | 
			
		||||
        Assert.assertNotNull(updatedAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmSeverity.MAJOR, updatedAlarm.getSeverity());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(updatedAlarm, updatedAlarm.getId(), updatedAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.UPDATED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateAlarmViaTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm.setSeverity(AlarmSeverity.MAJOR);
 | 
			
		||||
        Alarm updatedAlarm = doPost("/api/alarm", alarm, Alarm.class);
 | 
			
		||||
        Assert.assertNotNull(updatedAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmSeverity.MAJOR, updatedAlarm.getSeverity());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(updatedAlarm, updatedAlarm.getId(), updatedAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.UPDATED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateAlarmViaDifferentTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        alarm.setSeverity(AlarmSeverity.MAJOR);
 | 
			
		||||
        loginDifferentTenant();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm", alarm).andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testUpdateAlarmViaDifferentCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentCustomer();
 | 
			
		||||
        alarm.setSeverity(AlarmSeverity.MAJOR);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm", alarm).andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteAlarmViaCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/alarm/" + alarm.getId()).andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(alarm, alarm.getId(), alarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.DELETED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteAlarmViaTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/alarm/" + alarm.getId()).andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(alarm, alarm.getId(), alarm.getOriginator(),
 | 
			
		||||
                tenantId, tenantAdminCustomerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteAlarmViaDifferentTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentTenant();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/alarm/" + alarm.getId()).andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDeleteAlarmViaDifferentCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentCustomer();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/alarm/" + alarm.getId()).andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testClearAlarmViaCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/clear").andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        Alarm foundAlarm = doGet("/api/alarm/" + alarm.getId(), Alarm.class);
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.CLEARED_UNACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_CLEAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testClearAlarmViaTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/clear").andExpect(status().isOk());
 | 
			
		||||
        Alarm foundAlarm = doGet("/api/alarm/" + alarm.getId(), Alarm.class);
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.CLEARED_UNACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.ALARM_CLEAR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testAcknowledgeAlarmViaCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/ack").andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        Alarm foundAlarm = doGet("/api/alarm/" + alarm.getId(), Alarm.class);
 | 
			
		||||
        Assert.assertNotNull(foundAlarm);
 | 
			
		||||
        Assert.assertEquals(AlarmStatus.ACTIVE_ACK, foundAlarm.getStatus());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(foundAlarm, foundAlarm.getId(), foundAlarm.getOriginator(),
 | 
			
		||||
                tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.ALARM_ACK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testClearAlarmViaDifferentCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentCustomer();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/clear").andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testClearAlarmViaDifferentTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentTenant();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/clear").andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testAcknowledgeAlarmViaDifferentCustomer() throws Exception {
 | 
			
		||||
        loginCustomerUser();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentCustomer();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/ack").andExpect(status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(alarm.getId(), alarm);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testAcknowledgeAlarmViaDifferentTenant() throws Exception {
 | 
			
		||||
        loginTenantAdmin();
 | 
			
		||||
        Alarm alarm = createAlarm(TEST_ALARM_TYPE);
 | 
			
		||||
 | 
			
		||||
        loginDifferentTenant();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/alarm/" + alarm.getId() + "/ack").andExpect(status().isForbidden());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -271,17 +377,20 @@ public abstract class BaseAlarmControllerTest extends AbstractControllerTest {
 | 
			
		||||
                .severity(AlarmSeverity.CRITICAL)
 | 
			
		||||
                .type("Test")
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        alarm = doPost("/api/alarm", alarm, Alarm.class);
 | 
			
		||||
        Assert.assertNotNull("Saved alarm is null!", alarm);
 | 
			
		||||
 | 
			
		||||
        logout();
 | 
			
		||||
        testNotifyEntityNeverMsgToEdgeServiceOneTime(alarm, alarm.getId(), tenantId, ActionType.ADDED);
 | 
			
		||||
 | 
			
		||||
        logout();
 | 
			
		||||
 | 
			
		||||
        JsonNode publicLoginRequest = JacksonUtil.toJsonNode("{\"publicId\": \"" + publicId + "\"}");
 | 
			
		||||
        JsonNode tokens = doPost("/api/auth/login/public", publicLoginRequest, JsonNode.class);
 | 
			
		||||
        this.token = tokens.get("token").asText();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        PageData<AlarmInfo> pageData = doGetTyped(
 | 
			
		||||
                "/api/alarm/DEVICE/" + device.getUuidId() + "?page=0&pageSize=1", new TypeReference<PageData<AlarmInfo>>() {}
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
@ -25,14 +25,17 @@ import org.junit.After;
 | 
			
		||||
import org.junit.Assert;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
import org.mockito.Mockito;
 | 
			
		||||
import org.thingsboard.common.util.ThingsBoardExecutors;
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
import org.thingsboard.server.common.data.User;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.security.Authority;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@ -86,14 +89,28 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
    public void testSaveCustomer() throws Exception {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        customer.setTitle("My customer");
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityOneTimeMsgToEdgeServiceNever(savedCustomer, savedCustomer.getId(), savedCustomer.getId(),
 | 
			
		||||
                savedCustomer.getTenantId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
 | 
			
		||||
                ActionType.ADDED);
 | 
			
		||||
 | 
			
		||||
        Assert.assertNotNull(savedCustomer);
 | 
			
		||||
        Assert.assertNotNull(savedCustomer.getId());
 | 
			
		||||
        Assert.assertTrue(savedCustomer.getCreatedTime() > 0);
 | 
			
		||||
        Assert.assertEquals(customer.getTitle(), savedCustomer.getTitle());
 | 
			
		||||
 | 
			
		||||
        savedCustomer.setTitle("My new customer");
 | 
			
		||||
 | 
			
		||||
        doPost("/api/customer", savedCustomer, Customer.class);
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityAllOneTime(savedCustomer, savedCustomer.getId(), savedCustomer.getId(), savedCustomer.getTenantId(),
 | 
			
		||||
                savedCustomer.getId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
 | 
			
		||||
                ActionType.UPDATED);
 | 
			
		||||
 | 
			
		||||
        Customer foundCustomer = doGet("/api/customer/" + savedCustomer.getId().getId().toString(), Customer.class);
 | 
			
		||||
        Assert.assertEquals(foundCustomer.getTitle(), savedCustomer.getTitle());
 | 
			
		||||
 | 
			
		||||
@ -104,23 +121,57 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSaveCustomerWithViolationOfValidation() throws Exception {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        String validationError = "Validation error: ";
 | 
			
		||||
        customer.setTitle(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of title must be equal or less than 255")));
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        String msgError = "length of title must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
        customer.setTitle("Normal title");
 | 
			
		||||
        customer.setCity(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of city must be equal or less than 255")));
 | 
			
		||||
        msgError = "length of city must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
        customer.setCity("Normal city");
 | 
			
		||||
        customer.setCountry(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of country must be equal or less than 255")));
 | 
			
		||||
        msgError = "length of country must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
        customer.setCountry("Ukraine");
 | 
			
		||||
        customer.setPhone(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of phone must be equal or less than 255")));
 | 
			
		||||
        msgError = "length of phone must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
        customer.setPhone("+3892555554512");
 | 
			
		||||
        customer.setState(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of state must be equal or less than 255")));
 | 
			
		||||
        msgError = "length of state must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
        customer.setState("Normal state");
 | 
			
		||||
        customer.setZip(RandomStringUtils.randomAlphabetic(300));
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString("length of zip or postal code must be equal or less than 255")));
 | 
			
		||||
        msgError = "length of zip or postal code must be equal or less than 255";
 | 
			
		||||
        doPost("/api/customer", customer).andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(validationError + msgError));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
@ -131,12 +182,22 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
        doPost("/api/customer", savedCustomer, Customer.class);
 | 
			
		||||
 | 
			
		||||
        loginDifferentTenant();
 | 
			
		||||
        doPost("/api/customer", savedCustomer, Customer.class, status().isForbidden());
 | 
			
		||||
        deleteDifferentTenant();
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/customer", savedCustomer, Customer.class, status().isForbidden());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityNever(savedCustomer.getId(), savedCustomer);
 | 
			
		||||
 | 
			
		||||
        deleteDifferentTenant();
 | 
			
		||||
        login(tenantAdmin.getName(), "testPassword1");
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityBroadcastEntityStateChangeEventOneTimeMsgToEdgeServiceNever(savedCustomer, savedCustomer.getId(),
 | 
			
		||||
                savedCustomer.getId(), savedCustomer.getTenantId(), savedCustomer.getId(), tenantAdmin.getId(),
 | 
			
		||||
                tenantAdmin.getEmail(), ActionType.DELETED, savedCustomer.getId().getId().toString());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
@ -149,6 +210,8 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
        Assert.assertNotNull(foundCustomer);
 | 
			
		||||
        Assert.assertEquals(savedCustomer, foundCustomer);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
    }
 | 
			
		||||
@ -159,9 +222,15 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
        customer.setTitle("My customer");
 | 
			
		||||
        Customer savedCustomer = doPost("/api/customer", customer, Customer.class);
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doDelete("/api/customer/" + savedCustomer.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isOk());
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityBroadcastEntityStateChangeEventOneTimeMsgToEdgeServiceNever(savedCustomer, savedCustomer.getId(),
 | 
			
		||||
                savedCustomer.getId(), savedCustomer.getTenantId(), savedCustomer.getId(), tenantAdmin.getId(),
 | 
			
		||||
                tenantAdmin.getEmail(), ActionType.DELETED, savedCustomer.getId().getId().toString());
 | 
			
		||||
 | 
			
		||||
        doGet("/api/customer/" + savedCustomer.getId().getId().toString())
 | 
			
		||||
                .andExpect(status().isNotFound());
 | 
			
		||||
    }
 | 
			
		||||
@ -169,24 +238,33 @@ public abstract class BaseCustomerControllerTest extends AbstractControllerTest
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSaveCustomerWithEmptyTitle() throws Exception {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        String msgError = "Customer title should be specified";
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/customer", customer)
 | 
			
		||||
                .andExpect(status().isBadRequest())
 | 
			
		||||
                .andExpect(statusReason(containsString("Customer title should be specified")));
 | 
			
		||||
                .andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(msgError + "!"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testSaveCustomerWithInvalidEmail() throws Exception {
 | 
			
		||||
        Customer customer = new Customer();
 | 
			
		||||
        String msgError = "Invalid email address format 'invalid@mail'";
 | 
			
		||||
        customer.setTitle("My customer");
 | 
			
		||||
        customer.setEmail("invalid@mail");
 | 
			
		||||
 | 
			
		||||
        Mockito.reset(tbClusterService, auditLogService);
 | 
			
		||||
 | 
			
		||||
        doPost("/api/customer", customer)
 | 
			
		||||
                .andExpect(status().isBadRequest())
 | 
			
		||||
                .andExpect(statusReason(containsString("Invalid email address format 'invalid@mail'")));
 | 
			
		||||
                .andExpect(statusReason(containsString(msgError)));
 | 
			
		||||
 | 
			
		||||
//        loginSysAdmin();
 | 
			
		||||
//
 | 
			
		||||
//        doDelete("/api/tenant/"+savedTenant.getId().getId().toString())
 | 
			
		||||
//        .andExpect(status().isOk());
 | 
			
		||||
        testNotifyEntityError(customer, savedTenant.getId(),
 | 
			
		||||
                tenantAdmin.getId(), tenantAdmin.getEmail(), ActionType.ADDED, new DataValidationException(msgError + "!"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
 | 
			
		||||
@ -40,12 +40,12 @@ import org.thingsboard.server.common.data.device.profile.AlarmConditionFilter;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.AlarmRule;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CustomTimeSchedule;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CustomTimeScheduleItem;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.DurationAlarmConditionSpec;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.RepeatingAlarmConditionSpec;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CustomTimeSchedule;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CustomTimeScheduleItem;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CustomerId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
 | 
			
		||||
@ -71,10 +71,10 @@ import org.thingsboard.server.dao.timeseries.TimeseriesService;
 | 
			
		||||
 | 
			
		||||
import java.math.BigDecimal;
 | 
			
		||||
import java.math.RoundingMode;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Optional;
 | 
			
		||||
import java.util.TreeMap;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user