mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-09-09 09:02:12 +00:00
Fixes 19073 : Resolve NullPointerException in MS Teams DQ template handling (#19062)
* fix: Resolve NullPointerException in MS Teams DQ template handling * fix: Update DQ template logic to handle test case changes and results Details: Ensures a general template is created for any changes in the test case. Generates a DQ template when the test case result is updated. * refactor: Make testCaseResult as constant named TEST_CASE_RESULT
This commit is contained in:
parent
c75d453154
commit
db2770fbb4
@ -29,6 +29,7 @@ import org.openmetadata.common.utils.CommonUtil;
|
|||||||
import org.openmetadata.schema.tests.TestCaseParameterValue;
|
import org.openmetadata.schema.tests.TestCaseParameterValue;
|
||||||
import org.openmetadata.schema.type.ChangeEvent;
|
import org.openmetadata.schema.type.ChangeEvent;
|
||||||
import org.openmetadata.schema.type.EntityReference;
|
import org.openmetadata.schema.type.EntityReference;
|
||||||
|
import org.openmetadata.schema.type.FieldChange;
|
||||||
import org.openmetadata.schema.type.TagLabel;
|
import org.openmetadata.schema.type.TagLabel;
|
||||||
import org.openmetadata.service.Entity;
|
import org.openmetadata.service.Entity;
|
||||||
import org.openmetadata.service.apps.bundles.changeEvent.msteams.TeamsMessage;
|
import org.openmetadata.service.apps.bundles.changeEvent.msteams.TeamsMessage;
|
||||||
@ -41,6 +42,7 @@ import org.openmetadata.service.apps.bundles.changeEvent.msteams.TeamsMessage.Te
|
|||||||
import org.openmetadata.service.exception.UnhandledServerException;
|
import org.openmetadata.service.exception.UnhandledServerException;
|
||||||
|
|
||||||
public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
||||||
|
private static final String TEST_CASE_RESULT = "testCaseResult";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getBold() {
|
public String getBold() {
|
||||||
@ -115,11 +117,25 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
|||||||
String entityType = event.getEntityType();
|
String entityType = event.getEntityType();
|
||||||
|
|
||||||
return switch (entityType) {
|
return switch (entityType) {
|
||||||
case Entity.TEST_CASE -> createDQMessage(publisherName, event, outgoingMessage);
|
case Entity.TEST_CASE -> createTestCaseMessage(publisherName, event, outgoingMessage);
|
||||||
default -> createGeneralChangeEventMessage(publisherName, event, outgoingMessage);
|
default -> createGeneralChangeEventMessage(publisherName, event, outgoingMessage);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TeamsMessage createTestCaseMessage(
|
||||||
|
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
||||||
|
List<FieldChange> fieldsAdded = event.getChangeDescription().getFieldsAdded();
|
||||||
|
List<FieldChange> fieldsUpdated = event.getChangeDescription().getFieldsUpdated();
|
||||||
|
|
||||||
|
boolean hasRelevantChange =
|
||||||
|
fieldsAdded.stream().anyMatch(field -> TEST_CASE_RESULT.equals(field.getName()))
|
||||||
|
|| fieldsUpdated.stream().anyMatch(field -> TEST_CASE_RESULT.equals(field.getName()));
|
||||||
|
|
||||||
|
return hasRelevantChange
|
||||||
|
? createDQMessage(event, outgoingMessage)
|
||||||
|
: createGeneralChangeEventMessage(publisherName, event, outgoingMessage);
|
||||||
|
}
|
||||||
|
|
||||||
private TeamsMessage createGeneralChangeEventMessage(
|
private TeamsMessage createGeneralChangeEventMessage(
|
||||||
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
||||||
|
|
||||||
@ -173,11 +189,9 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
|||||||
return TeamsMessage.builder().type("message").attachments(List.of(attachment)).build();
|
return TeamsMessage.builder().type("message").attachments(List.of(attachment)).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
private TeamsMessage createDQMessage(
|
private TeamsMessage createDQMessage(ChangeEvent event, OutgoingMessage outgoingMessage) {
|
||||||
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
|
||||||
|
|
||||||
Map<DQ_Template_Section, Map<Enum<?>, Object>> dqTemplateData =
|
Map<DQ_Template_Section, Map<Enum<?>, Object>> dqTemplateData =
|
||||||
buildDQTemplateData(publisherName, event, outgoingMessage);
|
MessageDecorator.buildDQTemplateData(event, outgoingMessage);
|
||||||
|
|
||||||
TextBlock changeEventDetailsTextBlock = createHeader();
|
TextBlock changeEventDetailsTextBlock = createHeader();
|
||||||
|
|
||||||
@ -569,33 +583,6 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
|||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo - complete buildDQTemplateData fn
|
|
||||||
private Map<DQ_Template_Section, Map<Enum<?>, Object>> buildDQTemplateData(
|
|
||||||
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
|
||||||
|
|
||||||
TemplateDataBuilder<DQ_Template_Section> builder = new TemplateDataBuilder<>();
|
|
||||||
|
|
||||||
// Use DQ_Template_Section directly
|
|
||||||
builder
|
|
||||||
.add(
|
|
||||||
DQ_Template_Section.EVENT_DETAILS,
|
|
||||||
EventDetailsKeys.EVENT_TYPE,
|
|
||||||
event.getEventType().value())
|
|
||||||
.add(DQ_Template_Section.EVENT_DETAILS, EventDetailsKeys.UPDATED_BY, event.getUserName())
|
|
||||||
.add(DQ_Template_Section.EVENT_DETAILS, EventDetailsKeys.ENTITY_TYPE, event.getEntityType())
|
|
||||||
.add(
|
|
||||||
DQ_Template_Section.EVENT_DETAILS,
|
|
||||||
EventDetailsKeys.ENTITY_FQN,
|
|
||||||
MessageDecorator.getFQNForChangeEventEntity(event))
|
|
||||||
.add(
|
|
||||||
DQ_Template_Section.EVENT_DETAILS,
|
|
||||||
EventDetailsKeys.TIME,
|
|
||||||
new Date(event.getTimestamp()).toString())
|
|
||||||
.add(DQ_Template_Section.EVENT_DETAILS, EventDetailsKeys.OUTGOING_MESSAGE, outgoingMessage);
|
|
||||||
|
|
||||||
return builder.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
private TextBlock createHeader() {
|
private TextBlock createHeader() {
|
||||||
return TextBlock.builder()
|
return TextBlock.builder()
|
||||||
.type("TextBlock")
|
.type("TextBlock")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user