diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java index f1916c2be58..f16b031f3d4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/formatter/decorators/MSTeamsMessageDecorator.java @@ -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 { + private static final String TEST_CASE_RESULT = "testCaseResult"; @Override public String getBold() { @@ -115,11 +117,25 @@ public class MSTeamsMessageDecorator implements MessageDecorator { 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 fieldsAdded = event.getChangeDescription().getFieldsAdded(); + List 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 { 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, Object>> dqTemplateData = - buildDQTemplateData(publisherName, event, outgoingMessage); + MessageDecorator.buildDQTemplateData(event, outgoingMessage); TextBlock changeEventDetailsTextBlock = createHeader(); @@ -569,33 +583,6 @@ public class MSTeamsMessageDecorator implements MessageDecorator { return builder.build(); } - // todo - complete buildDQTemplateData fn - private Map, Object>> buildDQTemplateData( - String publisherName, ChangeEvent event, OutgoingMessage outgoingMessage) { - - TemplateDataBuilder 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")