From e5a193d40d4033056c09bc41c1c6082f39ad7809 Mon Sep 17 00:00:00 2001 From: IceS2 Date: Tue, 7 Jan 2025 07:55:41 +0100 Subject: [PATCH] MINOR: Add Governance Bot to the workflow automated tasks (#19222) * Add Governance Bot to the workflow automated tasks * Fix tests --- .../impl/SetEntityCertificationImpl.java | 2 +- .../impl/SetGlossaryTermStatusImpl.java | 2 +- .../service/jdbi3/FeedRepository.java | 3 +- .../glossary/GlossaryTermResourceTest.java | 32 +++++++++++++------ .../openmetadata/service/util/TestUtils.java | 3 ++ 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetEntityCertificationImpl.java b/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetEntityCertificationImpl.java index 1de5a955412..122714e4d99 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetEntityCertificationImpl.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetEntityCertificationImpl.java @@ -40,7 +40,7 @@ public class SetEntityCertificationImpl implements JavaDelegate { .orElse(null); String user = Optional.ofNullable((String) execution.getVariable(RESOLVED_BY_VARIABLE)) - .orElse(entity.getUpdatedBy()); + .orElse("governance-bot"); setStatus(entity, entityType, user, certification); } catch (Exception exc) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetGlossaryTermStatusImpl.java b/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetGlossaryTermStatusImpl.java index 6d2d4060cfd..cfe38e65277 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetGlossaryTermStatusImpl.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/governance/workflows/elements/nodes/automatedTask/impl/SetGlossaryTermStatusImpl.java @@ -35,7 +35,7 @@ public class SetGlossaryTermStatusImpl implements JavaDelegate { String status = (String) statusExpr.getValue(execution); String user = Optional.ofNullable((String) execution.getVariable(RESOLVED_BY_VARIABLE)) - .orElse(glossaryTerm.getUpdatedBy()); + .orElse("governance-bot"); setStatus(glossaryTerm, user, status); } catch (Exception exc) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/FeedRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/FeedRepository.java index 17103ba77a0..bd95cdfd7c9 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/FeedRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/FeedRepository.java @@ -961,7 +961,8 @@ public class FeedRepository { String createdByUserName = thread.getCreatedBy(); User createdByUser = Entity.getEntityByName(USER, createdByUserName, TEAMS_FIELD, NON_DELETED); - if (Boolean.TRUE.equals(createdByUser.getIsBot())) { + if (Boolean.TRUE.equals(createdByUser.getIsBot()) + && !createdByUser.getName().equals("governance-bot")) { throw new IllegalArgumentException("Task cannot be created by bot only by user or teams"); } diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java index c2e15538a3a..7b0e5f80151 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java @@ -68,6 +68,8 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.api.TestMethodOrder; +import org.junit.jupiter.api.parallel.Execution; +import org.junit.jupiter.api.parallel.ExecutionMode; import org.openmetadata.schema.api.data.CreateGlossary; import org.openmetadata.schema.api.data.CreateGlossaryTerm; import org.openmetadata.schema.api.data.CreateTable; @@ -88,6 +90,7 @@ import org.openmetadata.schema.type.TagLabel; import org.openmetadata.schema.type.TaskDetails; import org.openmetadata.schema.type.TaskStatus; import org.openmetadata.service.Entity; +import org.openmetadata.service.governance.workflows.WorkflowHandler; import org.openmetadata.service.resources.EntityResourceTest; import org.openmetadata.service.resources.databases.TableResourceTest; import org.openmetadata.service.resources.feeds.FeedResource.ThreadList; @@ -264,7 +267,11 @@ public class GlossaryTermResourceTest extends EntityResourceTest newReviewers = List.of(DATA_CONSUMER_REF, USER1_REF, USER2_REF); + g2t5.withReviewers(newReviewers); - ChangeDescription change = getChangeDescription(g2t5, MINOR_UPDATE); - fieldAdded(change, "reviewers", List.of(DATA_CONSUMER_REF)); - fieldUpdated(change, "status", Status.DRAFT.value(), Status.IN_REVIEW.value()); - g2t5 = patchEntityUsingFqnAndCheck(g2t5, origJson, ADMIN_AUTH_HEADERS, MINOR_UPDATE, change); + double previousVersion = g2t5.getVersion(); + g2t5 = patchEntityUsingFqn(g2t5.getFullyQualifiedName(), origJson, g2t5, ADMIN_AUTH_HEADERS); + + // Due to the Glossary Workflow changing the Status from 'DRAFT' to 'IN_REVIEW' as a + // GovernanceBot, two changes are created. + assertEquals(g2t5.getVersion(), previousVersion + 0.2, 0.0001); + assertTrue( + g2t5.getReviewers().containsAll(newReviewers) + && newReviewers.containsAll(g2t5.getReviewers())); + assertEquals(g2t5.getStatus(), Status.IN_REVIEW); Thread approvalTask1 = assertApprovalTask(g2t5, TaskStatus.Open); // A Request Approval task is opened diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/util/TestUtils.java b/openmetadata-service/src/test/java/org/openmetadata/service/util/TestUtils.java index e39f2d05a6e..534315afa9b 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/util/TestUtils.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/util/TestUtils.java @@ -105,6 +105,9 @@ public final class TestUtils { public static String LONG_ENTITY_NAME = "a".repeat(256 + 1); public static final Map ADMIN_AUTH_HEADERS = authHeaders(ADMIN_USER_NAME + "@open-metadata.org"); + public static final String GOVERNANCE_BOT = "governance-bot"; + public static final Map GOVERNANCE_BOT_AUTH_HEADERS = + authHeaders(GOVERNANCE_BOT + "@open-metadata.org"); public static final String INGESTION_BOT = "ingestion-bot"; public static final Map INGESTION_BOT_AUTH_HEADERS = authHeaders(INGESTION_BOT + "@open-metadata.org");