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.type.ChangeEvent;
|
||||
import org.openmetadata.schema.type.EntityReference;
|
||||
import org.openmetadata.schema.type.FieldChange;
|
||||
import org.openmetadata.schema.type.TagLabel;
|
||||
import org.openmetadata.service.Entity;
|
||||
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;
|
||||
|
||||
public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
||||
private static final String TEST_CASE_RESULT = "testCaseResult";
|
||||
|
||||
@Override
|
||||
public String getBold() {
|
||||
@ -115,11 +117,25 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
||||
String entityType = event.getEntityType();
|
||||
|
||||
return switch (entityType) {
|
||||
case Entity.TEST_CASE -> createDQMessage(publisherName, event, outgoingMessage);
|
||||
case Entity.TEST_CASE -> createTestCaseMessage(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(
|
||||
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();
|
||||
}
|
||||
|
||||
private TeamsMessage createDQMessage(
|
||||
String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) {
|
||||
|
||||
private TeamsMessage createDQMessage(ChangeEvent event, OutgoingMessage outgoingMessage) {
|
||||
Map<DQ_Template_Section, Map<Enum<?>, Object>> dqTemplateData =
|
||||
buildDQTemplateData(publisherName, event, outgoingMessage);
|
||||
MessageDecorator.buildDQTemplateData(event, outgoingMessage);
|
||||
|
||||
TextBlock changeEventDetailsTextBlock = createHeader();
|
||||
|
||||
@ -569,33 +583,6 @@ public class MSTeamsMessageDecorator implements MessageDecorator<TeamsMessage> {
|
||||
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() {
|
||||
return TextBlock.builder()
|
||||
.type("TextBlock")
|
||||
|
Loading…
x
Reference in New Issue
Block a user