Fix Test Case Assignee not cleared from incident tasks (#21314)

This commit is contained in:
Mohit Yadav 2025-05-20 19:58:38 +05:30 committed by GitHub
parent 96d8a14c97
commit 3830e79f52
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 43 additions and 2 deletions

View File

@ -2058,6 +2058,14 @@ public interface CollectionDAO {
glossaryTermLink.getFullyQualifiedFieldType());
}
default List<String> listThreadsByTaskAssignee(String taskAssigneesId) {
String condition = String.format(" WHERE taskAssigneesIds LIKE '%%%s%%'", taskAssigneesId);
return listThreadsByTaskAssigneesId(condition);
}
@SqlQuery("SELECT json FROM thread_entity <cond>")
List<String> listThreadsByTaskAssigneesId(@Define("cond") String cond);
@SqlQuery(
"SELECT entityLink, type, taskStatus, COUNT(id) as count "
+ "FROM ( "

View File

@ -68,6 +68,7 @@ import org.openmetadata.schema.api.teams.CreateTeam;
import org.openmetadata.schema.api.teams.CreateTeam.TeamType;
import org.openmetadata.schema.entity.teams.Team;
import org.openmetadata.schema.entity.teams.TeamHierarchy;
import org.openmetadata.schema.entity.teams.User;
import org.openmetadata.schema.type.ChangeDescription;
import org.openmetadata.schema.type.ChangeEvent;
import org.openmetadata.schema.type.EntityReference;
@ -86,6 +87,7 @@ import org.openmetadata.service.Entity;
import org.openmetadata.service.exception.CatalogExceptionMessage;
import org.openmetadata.service.exception.EntityNotFoundException;
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
import org.openmetadata.service.resources.feeds.FeedUtil;
import org.openmetadata.service.resources.teams.TeamResource;
import org.openmetadata.service.security.policyevaluator.SubjectContext;
import org.openmetadata.service.util.EntityUtil;
@ -328,6 +330,10 @@ public class TeamRepository extends EntityRepository<Team> {
return SubjectContext.getRolesForTeams(getParentsForInheritedRoles(team));
}
protected void entitySpecificCleanup(User entityInterface) {
FeedUtil.cleanUpTaskForAssignees(entityInterface.getId(), TEAM);
}
private TeamHierarchy getTeamHierarchy(Team team) {
return new TeamHierarchy()
.withId(team.getId())

View File

@ -1,5 +1,6 @@
package org.openmetadata.service.jdbi3;
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
import static org.openmetadata.service.Entity.getEntityReferenceByName;
@ -334,8 +335,9 @@ public class TestCaseResolutionStatusRepository
private void patchTaskAssignee(Thread originalTask, EntityReference newAssignee, String user) {
Thread updatedTask = JsonUtils.deepCopy(originalTask, Thread.class);
updatedTask.setTask(
updatedTask.getTask().withAssignees(Collections.singletonList(newAssignee)));
List<EntityReference> updatedAssignees =
nullOrEmpty(newAssignee) ? new ArrayList<>() : Collections.singletonList(newAssignee);
updatedTask.setTask(updatedTask.getTask().withAssignees(updatedAssignees));
JsonPatch patch = JsonUtils.getJsonPatch(originalTask, updatedTask);

View File

@ -69,6 +69,7 @@ import org.openmetadata.service.exception.BadRequestException;
import org.openmetadata.service.exception.CatalogExceptionMessage;
import org.openmetadata.service.exception.EntityNotFoundException;
import org.openmetadata.service.jdbi3.CollectionDAO.EntityRelationshipRecord;
import org.openmetadata.service.resources.feeds.FeedUtil;
import org.openmetadata.service.resources.teams.UserResource;
import org.openmetadata.service.secrets.SecretsManager;
import org.openmetadata.service.secrets.SecretsManagerFactory;
@ -328,6 +329,10 @@ public class UserRepository extends EntityRepository<User> {
}
}
protected void entitySpecificCleanup(User entityInterface) {
FeedUtil.cleanUpTaskForAssignees(entityInterface.getId(), USER);
}
/* Validate if the user is already part of the given team */
public void validateTeamAddition(UUID userId, UUID teamId) {
User user = find(userId, NON_DELETED);

View File

@ -13,8 +13,13 @@
package org.openmetadata.service.resources.feeds;
import java.util.List;
import java.util.UUID;
import org.openmetadata.schema.entity.feed.Thread;
import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.Post;
import org.openmetadata.service.Entity;
import org.openmetadata.service.util.JsonUtils;
public final class FeedUtil {
@ -25,4 +30,19 @@ public final class FeedUtil {
thread.getPosts().add(post);
thread.withPostsCount(thread.getPosts().size());
}
public static void cleanUpTaskForAssignees(UUID entityId, String entityType) {
List<String> userTasks =
Entity.getCollectionDAO().feedDAO().listThreadsByTaskAssignee(entityId.toString());
List<Thread> threads = JsonUtils.readObjects(userTasks, Thread.class);
for (Thread thread : threads) {
List<EntityReference> assignees = thread.getTask().getAssignees();
assignees.removeIf(
entityReference ->
entityReference.getId().equals(entityId)
&& entityReference.getType().equals(entityType));
thread.getTask().setAssignees(assignees);
Entity.getCollectionDAO().feedDAO().update(thread.getId(), JsonUtils.pojoToJson(thread));
}
}
}