refactor code & test

This commit is contained in:
Yuriy Lytvynchuk 2022-09-26 12:54:17 +03:00
parent 87599ec5f9
commit 5a6cf5c92f
6 changed files with 27 additions and 15 deletions

View File

@ -367,24 +367,24 @@ class DefaultTbContext implements TbContext {
return entityActionMsg(alarm, alarm.getId(), ruleNodeId, action, queueName, ruleChainId); return entityActionMsg(alarm, alarm.getId(), ruleNodeId, action, queueName, ruleChainId);
} }
public TbMsg attributeUpdateActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<AttributeKvEntry> attributes) { public TbMsg attributesUpdatedActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<AttributeKvEntry> attributes) {
ObjectNode entityNode = JacksonUtil.newObjectNode(); ObjectNode entityNode = JacksonUtil.newObjectNode();
if (attributes != null) { if (attributes != null) {
attributes.forEach(attributeKvEntry -> addKvEntry(entityNode, attributeKvEntry)); attributes.forEach(attributeKvEntry -> addKvEntry(entityNode, attributeKvEntry));
} }
return attributeActionMsg(originator, ruleNodeId, scope, DataConstants.ATTRIBUTES_UPDATED, JacksonUtil.toString(entityNode)); return attributesActionMsg(originator, ruleNodeId, scope, DataConstants.ATTRIBUTES_UPDATED, JacksonUtil.toString(entityNode));
} }
public TbMsg attributeDeleteActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<String> keys) { public TbMsg attributesDeletedActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<String> keys) {
ObjectNode entityNode = JacksonUtil.newObjectNode(); ObjectNode entityNode = JacksonUtil.newObjectNode();
ArrayNode attrsArrayNode = entityNode.putArray("attributes"); ArrayNode attrsArrayNode = entityNode.putArray("attributes");
if (keys != null) { if (keys != null) {
keys.forEach(attrsArrayNode::add); keys.forEach(attrsArrayNode::add);
} }
return attributeActionMsg(originator, ruleNodeId, scope, DataConstants.ATTRIBUTES_DELETED, JacksonUtil.toString(entityNode)); return attributesActionMsg(originator, ruleNodeId, scope, DataConstants.ATTRIBUTES_DELETED, JacksonUtil.toString(entityNode));
} }
private TbMsg attributeActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, String action, String msgData) { private TbMsg attributesActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, String action, String msgData) {
RuleChainId ruleChainId = null; RuleChainId ruleChainId = null;
String queueName = null; String queueName = null;
if (EntityType.DEVICE.equals(originator.getEntityType())) { if (EntityType.DEVICE.equals(originator.getEntityType())) {

View File

@ -181,9 +181,9 @@ public interface TbContext {
// TODO: Does this changes the message? // TODO: Does this changes the message?
TbMsg alarmActionMsg(Alarm alarm, RuleNodeId ruleNodeId, String action); TbMsg alarmActionMsg(Alarm alarm, RuleNodeId ruleNodeId, String action);
TbMsg attributeUpdateActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<AttributeKvEntry> attributes); TbMsg attributesUpdatedActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<AttributeKvEntry> attributes);
TbMsg attributeDeleteActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<String> keys); TbMsg attributesDeletedActionMsg(EntityId originator, RuleNodeId ruleNodeId, String scope, List<String> keys);
void onEdgeEventUpdate(TenantId tenantId, EdgeId edgeId); void onEdgeEventUpdate(TenantId tenantId, EdgeId edgeId);

View File

@ -23,12 +23,12 @@ import javax.annotation.Nullable;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
public class AttributeDeleteNodeCallback extends TelemetryNodeCallback { public class AttributesDeleteNodeCallback extends TelemetryNodeCallback {
private String scope; private String scope;
private List<String> keys; private List<String> keys;
public AttributeDeleteNodeCallback(TbContext ctx, TbMsg msg, String scope, List<String> keys) { public AttributesDeleteNodeCallback(TbContext ctx, TbMsg msg, String scope, List<String> keys) {
super(ctx, msg); super(ctx, msg);
this.scope = scope; this.scope = scope;
this.keys = keys; this.keys = keys;
@ -38,7 +38,7 @@ public class AttributeDeleteNodeCallback extends TelemetryNodeCallback {
public void onSuccess(@Nullable Void result) { public void onSuccess(@Nullable Void result) {
TbContext ctx = this.getCtx(); TbContext ctx = this.getCtx();
TbMsg tbMsg = this.getMsg(); TbMsg tbMsg = this.getMsg();
ctx.enqueue(ctx.attributeDeleteActionMsg(tbMsg.getOriginator(), ctx.getSelfId(), scope, keys), ctx.enqueue(ctx.attributesDeletedActionMsg(tbMsg.getOriginator(), ctx.getSelfId(), scope, keys),
() -> ctx.tellSuccess(tbMsg), () -> ctx.tellSuccess(tbMsg),
throwable -> ctx.tellFailure(tbMsg, throwable)); throwable -> ctx.tellFailure(tbMsg, throwable));
} }

View File

@ -22,12 +22,12 @@ import org.thingsboard.server.common.msg.TbMsg;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.List; import java.util.List;
public class AttributeUpdateNodeCallback extends TelemetryNodeCallback { public class AttributesUpdateNodeCallback extends TelemetryNodeCallback {
private String scope; private String scope;
private List<AttributeKvEntry> attributes; private List<AttributeKvEntry> attributes;
public AttributeUpdateNodeCallback(TbContext ctx, TbMsg msg, String scope, List<AttributeKvEntry> attributes) { public AttributesUpdateNodeCallback(TbContext ctx, TbMsg msg, String scope, List<AttributeKvEntry> attributes) {
super(ctx, msg); super(ctx, msg);
this.scope = scope; this.scope = scope;
this.attributes = attributes; this.attributes = attributes;
@ -37,7 +37,7 @@ public class AttributeUpdateNodeCallback extends TelemetryNodeCallback {
public void onSuccess(@Nullable Void result) { public void onSuccess(@Nullable Void result) {
TbContext ctx = this.getCtx(); TbContext ctx = this.getCtx();
TbMsg tbMsg = this.getMsg(); TbMsg tbMsg = this.getMsg();
ctx.enqueue(ctx.attributeUpdateActionMsg(tbMsg.getOriginator(), ctx.getSelfId(), scope, attributes), ctx.enqueue(ctx.attributesUpdatedActionMsg(tbMsg.getOriginator(), ctx.getSelfId(), scope, attributes),
() -> ctx.tellSuccess(tbMsg), () -> ctx.tellSuccess(tbMsg),
throwable -> ctx.tellFailure(tbMsg, throwable)); throwable -> ctx.tellFailure(tbMsg, throwable));
} }

View File

@ -65,7 +65,7 @@ public class TbMsgDeleteAttributes implements TbNode {
if (keysToDelete.isEmpty()) { if (keysToDelete.isEmpty()) {
ctx.tellSuccess(msg); ctx.tellSuccess(msg);
} else { } else {
ctx.getTelemetryService().deleteAndNotify(ctx.getTenantId(), msg.getOriginator(), scope, keysToDelete, new AttributeDeleteNodeCallback(ctx, msg, scope, keysToDelete)); ctx.getTelemetryService().deleteAndNotify(ctx.getTenantId(), msg.getOriginator(), scope, keysToDelete, new AttributesDeleteNodeCallback(ctx, msg, scope, keysToDelete));
} }
} }
} }

View File

@ -20,7 +20,10 @@ import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.junit.MockitoJUnitRunner;
import org.thingsboard.rule.engine.api.RuleEngineTelemetryService; import org.thingsboard.rule.engine.api.RuleEngineTelemetryService;
import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.rule.engine.api.TbContext;
import org.thingsboard.rule.engine.api.TbNodeConfiguration; import org.thingsboard.rule.engine.api.TbNodeConfiguration;
@ -35,6 +38,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import java.util.function.Consumer;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
@ -111,7 +115,15 @@ public class TbMsgDeleteAttributesTest {
TbMsg msg = TbMsg.newMsg("POST_ATTRIBUTES_REQUEST", deviceId, metaData, data, callback); TbMsg msg = TbMsg.newMsg("POST_ATTRIBUTES_REQUEST", deviceId, metaData, data, callback);
node.onMsg(ctx, msg); node.onMsg(ctx, msg);
verify(ctx, times(1)).attributeDeleteActionMsg(any(), any(), anyString(), anyList()); ArgumentCaptor<Runnable> successCaptor = ArgumentCaptor.forClass(Runnable.class);
ArgumentCaptor<Consumer<Throwable>> failureCaptor = ArgumentCaptor.forClass(Consumer.class);
ArgumentCaptor<TbMsg> newMsgCaptor = ArgumentCaptor.forClass(TbMsg.class);
verify(ctx, times(1)).enqueue(any(), successCaptor.capture(), failureCaptor.capture());
successCaptor.getValue().run();
verify(ctx, times(1)).tellSuccess(newMsgCaptor.capture());
verify(ctx, times(1)).attributesDeletedActionMsg(any(), any(), anyString(), anyList());
verify(ctx, never()).tellFailure(any(), any()); verify(ctx, never()).tellFailure(any(), any());
verify(telemetryService, times(1)).deleteAndNotify(any(), any(), anyString(), anyList(), any()); verify(telemetryService, times(1)).deleteAndNotify(any(), any(), anyString(), anyList(), any());
} }