From d91f6bcb11cc1d1e1432eb5d8ac4048b58f83ebc Mon Sep 17 00:00:00 2001
From: Pere Miquel Brull
Date: Thu, 6 Jan 2022 12:38:09 +0100
Subject: [PATCH] [issue-1992] - Allow Delete + PUT (#1993)
* Select entity deleted or not
* Allow to PUT back a deleted Entity
* Update interface to get deleted flag
* Add delete + put test
* Rename to isDeleted
* Rename to DeletedOrExists
* Update delete_put test
* format
* Remove delete put test from interface
* Add mlmodel delete put test
* Add mlmodel delete put test
* Use minor version change for recover deleted
* Prepare delete put test
* Add recover soft delete relationships
* Fix recover for Entities with services
* Fix recover for Entities with services
* Add delete put tests
* Add delete put tests
* Format and sonar
---
.../catalog/jdbi3/BotsRepository.java | 5 ++++
.../catalog/jdbi3/ChartRepository.java | 5 ++++
.../catalog/jdbi3/CollectionDAO.java | 3 +++
.../catalog/jdbi3/DashboardRepository.java | 5 ++++
.../jdbi3/DashboardServiceRepository.java | 5 ++++
.../catalog/jdbi3/DatabaseRepository.java | 5 ++++
.../jdbi3/DatabaseServiceRepository.java | 5 ++++
.../openmetadata/catalog/jdbi3/EntityDAO.java | 8 +++++++
.../catalog/jdbi3/EntityRepository.java | 23 +++++++++++++++++-
.../catalog/jdbi3/IngestionRepository.java | 5 ++++
.../catalog/jdbi3/LocationRepository.java | 5 ++++
.../jdbi3/MessagingServiceRepository.java | 5 ++++
.../catalog/jdbi3/MetricsRepository.java | 5 ++++
.../catalog/jdbi3/MlModelRepository.java | 5 ++++
.../catalog/jdbi3/PipelineRepository.java | 5 ++++
.../jdbi3/PipelineServiceRepository.java | 5 ++++
.../catalog/jdbi3/PolicyRepository.java | 5 ++++
.../catalog/jdbi3/ReportRepository.java | 5 ++++
.../catalog/jdbi3/RoleRepository.java | 5 ++++
.../jdbi3/StorageServiceRepository.java | 5 ++++
.../catalog/jdbi3/TableRepository.java | 5 ++++
.../catalog/jdbi3/TeamRepository.java | 5 ++++
.../catalog/jdbi3/TopicRepository.java | 5 ++++
.../catalog/jdbi3/UserRepository.java | 5 ++++
.../catalog/jdbi3/WebhookRepository.java | 5 ++++
.../catalog/util/EntityInterface.java | 2 ++
.../resources/charts/ChartResourceTest.java | 24 +++++++++++++++++++
.../dashboards/DashboardResourceTest.java | 21 ++++++++++++++++
.../databases/DatabaseResourceTest.java | 24 +++++++++++++++++++
.../databases/TableResourceTest.java | 20 ++++++++++++++++
.../locations/LocationResourceTest.java | 23 ++++++++++++++++++
.../mlmodels/MlModelResourceTest.java | 20 ++++++++++++++++
.../pipelines/PipelineResourceTest.java | 21 ++++++++++++++++
.../policies/PolicyResourceTest.java | 21 ++++++++++++++++
.../DashboardServiceResourceTest.java | 22 +++++++++++++++++
.../services/DatabaseServiceResourceTest.java | 22 +++++++++++++++++
.../MessagingServiceResourceTest.java | 22 +++++++++++++++++
.../services/PipelineServiceResourceTest.java | 22 +++++++++++++++++
.../services/StorageServiceResourceTest.java | 24 +++++++++++++++++++
.../resources/topics/TopicResourceTest.java | 22 +++++++++++++++++
40 files changed, 453 insertions(+), 1 deletion(-)
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java
index fc797f59560..d4b22a24eb8 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/BotsRepository.java
@@ -92,6 +92,11 @@ public class BotsRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java
index fc55520211d..d62c6e2f279 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ChartRepository.java
@@ -165,6 +165,11 @@ public class ChartRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java
index afa1107af80..d4d03027f3a 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/CollectionDAO.java
@@ -451,6 +451,9 @@ public interface CollectionDAO {
"UPDATE entity_relationship SET deleted = true WHERE (toId = :id AND toEntity = :entity) "
+ "OR (fromId = :id AND fromEntity = :entity)")
void softDeleteAll(@Bind("id") String id, @Bind("entity") String entity);
+
+ @SqlUpdate("UPDATE entity_relationship SET deleted = false WHERE toId = :id OR fromId = :id")
+ void recoverSoftDeleteAll(@Bind("id") String id);
}
interface FeedDAO {
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java
index 84b61a4641c..8f5b72075bf 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardRepository.java
@@ -257,6 +257,11 @@ public class DashboardRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java
index d7110dd7212..01d1a4e3cee 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DashboardServiceRepository.java
@@ -124,6 +124,11 @@ public class DashboardServiceRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java
index bb1b7ac5dc5..d4c154539bb 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/DatabaseServiceRepository.java
@@ -103,6 +103,11 @@ public class DatabaseServiceRepository extends EntityRepository
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityDAO.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityDAO.java
index 3f7cf48c7c2..3f888a73e9e 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityDAO.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityDAO.java
@@ -52,6 +52,10 @@ public interface EntityDAO {
@SqlQuery("SELECT json FROM WHERE = :name AND deleted IS NOT TRUE")
String findByName(@Define("table") String table, @Define("nameColumn") String nameColumn, @Bind("name") String name);
+ @SqlQuery("SELECT json FROM WHERE = :name")
+ String findByNameDeletedOrExists(
+ @Define("table") String table, @Define("nameColumn") String nameColumn, @Bind("name") String name);
+
@SqlQuery(
"SELECT count(*) FROM WHERE "
+ "( LIKE CONCAT(:fqnPrefix, '.%') OR :fqnPrefix IS NULL) AND deleted IS NOT TRUE")
@@ -150,6 +154,10 @@ public interface EntityDAO {
return findByName(getTableName(), getNameColumn(), fqn);
}
+ default String findDeletedOrExists(String fqn) {
+ return findByNameDeletedOrExists(getTableName(), getNameColumn(), fqn);
+ }
+
default int listCount(String databaseFQN) {
return listCount(getTableName(), getNameColumn(), databaseFQN);
}
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java
index 43e3cb71d62..7e34deb8af9 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java
@@ -300,10 +300,14 @@ public abstract class EntityRepository {
@Transaction
public final PutResponse createOrUpdate(UriInfo uriInfo, T updated) throws IOException, ParseException {
prepare(updated);
- T original = JsonUtils.readValue(dao.findJsonByFqn(getFullyQualifiedName(updated)), entityClass);
+ // Check if there is any original, deleted or not
+ T original = JsonUtils.readValue(dao.findDeletedOrExists(getFullyQualifiedName(updated)), entityClass);
if (original == null) {
return new PutResponse<>(Status.CREATED, withHref(uriInfo, createNewEntity(updated)), RestUtil.ENTITY_CREATED);
}
+
+ // Recover relationships if original was deleted before setFields
+ recoverDeletedRelationships(original);
// Get all the fields in the original entity that can be updated during PUT operation
setFields(original, putFields);
@@ -511,6 +515,15 @@ public abstract class EntityRepository {
return RestUtil.getHref(uriInfo, collectionPath, id);
}
+ private void recoverDeletedRelationships(T original) {
+ // If original is deleted, we need to recover the relationships before setting the fields
+ // or we won't find the related services
+ EntityInterface originalRef = getEntityInterface(original);
+ if (Boolean.TRUE.equals(originalRef.isDeleted())) {
+ daoCollection.relationshipDAO().recoverSoftDeleteAll(originalRef.getId().toString());
+ }
+ }
+
/**
* Class that performs PUT and PATCH update operation. It takes an updated entity and original entity.
* Performs comparison between then and updates the stored entity and also updates all the relationships. This class
@@ -537,6 +550,7 @@ public abstract class EntityRepository {
/** Compare original and updated entities and perform updates. Update the entity version and track changes. */
public final void update() throws IOException {
updated.setId(original.getId());
+ updateDeleted();
updateDescription();
updateDisplayName();
updateOwner();
@@ -560,6 +574,13 @@ public abstract class EntityRepository {
recordChange("description", original.getDescription(), updated.getDescription());
}
+ private void updateDeleted() throws JsonProcessingException {
+ if (Boolean.TRUE.equals(original.isDeleted())) {
+ updated.setDeleted(false);
+ recordChange("deleted", true, false);
+ }
+ }
+
private void updateDisplayName() throws JsonProcessingException {
if (!patchOperation && original.getDisplayName() != null && !original.getDisplayName().isEmpty()) {
// Update displayName only when stored is empty to retain user authored descriptions
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/IngestionRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/IngestionRepository.java
index 6bf29f01442..6365b2a2057 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/IngestionRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/IngestionRepository.java
@@ -161,6 +161,11 @@ public class IngestionRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java
index 7e684f8729a..138b9bcbe9a 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/LocationRepository.java
@@ -270,6 +270,11 @@ public class LocationRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java
index 9e60d43a561..28b30c1ec38 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MessagingServiceRepository.java
@@ -103,6 +103,11 @@ public class MessagingServiceRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java
index 3b8fd9f4c2e..35c1e4eb2bd 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/MlModelRepository.java
@@ -258,6 +258,11 @@ public class MlModelRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java
index cd7219e1827..9d5a40af51b 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineRepository.java
@@ -190,6 +190,11 @@ public class PipelineRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java
index f232dd7c028..fb16115b1d7 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PipelineServiceRepository.java
@@ -103,6 +103,11 @@ public class PipelineServiceRepository extends EntityRepository
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java
index 5c38a63ce08..9c89c42d11a 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/PolicyRepository.java
@@ -220,6 +220,11 @@ public class PolicyRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java
index b668a91f09e..9b2105687c5 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/ReportRepository.java
@@ -128,6 +128,11 @@ public class ReportRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java
index 47b617bbd9e..e9d19a64f15 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/RoleRepository.java
@@ -105,6 +105,11 @@ public class RoleRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java
index 848605bb13a..09795c80dd0 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/StorageServiceRepository.java
@@ -93,6 +93,11 @@ public class StorageServiceRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java
index 99d92df897f..04f8be6d836 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TableRepository.java
@@ -700,6 +700,11 @@ public class TableRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java
index a2f240403b3..04da90d4e64 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TeamRepository.java
@@ -165,6 +165,11 @@ public class TeamRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java
index 714d67c1912..07ecdad5085 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TopicRepository.java
@@ -171,6 +171,11 @@ public class TopicRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public EntityReference getOwner() {
return entity.getOwner();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java
index 2d88449807b..f239aa33087 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/UserRepository.java
@@ -216,6 +216,11 @@ public class UserRepository extends EntityRepository {
return entity.getDisplayName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java
index a5184943662..d943be9479d 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/WebhookRepository.java
@@ -188,6 +188,11 @@ public class WebhookRepository extends EntityRepository {
return entity.getName();
}
+ @Override
+ public Boolean isDeleted() {
+ return entity.getDeleted();
+ }
+
@Override
public String getFullyQualifiedName() {
return entity.getName();
diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityInterface.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityInterface.java
index ed66bf64f2b..2a952ee11b9 100644
--- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityInterface.java
+++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/util/EntityInterface.java
@@ -29,6 +29,8 @@ public interface EntityInterface {
String getDisplayName();
+ Boolean isDeleted();
+
default EntityReference getOwner() {
return null;
}
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/charts/ChartResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/charts/ChartResourceTest.java
index 2f9f8a4d0f2..6a040002919 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/charts/ChartResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/charts/ChartResourceTest.java
@@ -18,6 +18,7 @@ import static javax.ws.rs.core.Response.Status.FORBIDDEN;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.assertListNotNull;
import static org.openmetadata.catalog.util.TestUtils.assertResponse;
@@ -25,8 +26,10 @@ import static org.openmetadata.catalog.util.TestUtils.assertResponse;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -42,8 +45,10 @@ import org.openmetadata.catalog.jdbi3.DashboardServiceRepository.DashboardServic
import org.openmetadata.catalog.resources.EntityResourceTest;
import org.openmetadata.catalog.resources.charts.ChartResource.ChartList;
import org.openmetadata.catalog.resources.services.DashboardServiceResourceTest;
+import org.openmetadata.catalog.type.ChangeDescription;
import org.openmetadata.catalog.type.ChartType;
import org.openmetadata.catalog.type.EntityReference;
+import org.openmetadata.catalog.type.FieldChange;
import org.openmetadata.catalog.util.EntityInterface;
import org.openmetadata.catalog.util.ResultList;
import org.openmetadata.catalog.util.TestUtils;
@@ -152,6 +157,25 @@ public class ChartResourceTest extends EntityResourceTest {
// TODO
}
+ @Test
+ void delete_put_Chart_200(TestInfo test) throws IOException {
+ CreateChart request = create(test).withDescription("");
+ Chart chart = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(chart.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(chart.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
/** Validate returned fields GET .../charts/{id}?fields="..." or GET .../charts/name/{fqn}?fields="..." */
@Override
public void validateGetWithDifferentFields(Chart chart, boolean byName) throws HttpResponseException {
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java
index 45e37f98e3b..91226aca732 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/dashboards/DashboardResourceTest.java
@@ -32,11 +32,13 @@ import static org.openmetadata.catalog.util.TestUtils.assertResponse;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -235,6 +237,25 @@ public class DashboardResourceTest extends EntityResourceTest {
// TODO
}
+ @Test
+ void delete_put_Dashboard_200(TestInfo test) throws IOException {
+ CreateDashboard request = create(test).withDescription("");
+ Dashboard dashboard = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(dashboard.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(dashboard.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
public Dashboard createDashboard(CreateDashboard create, Map authHeaders)
throws HttpResponseException {
return TestUtils.post(getResource("dashboards"), create, Dashboard.class, authHeaders);
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/DatabaseResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/DatabaseResourceTest.java
index e641f6dbed5..d06f0d778c7 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/DatabaseResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/DatabaseResourceTest.java
@@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.assertListNotNull;
import static org.openmetadata.catalog.util.TestUtils.assertListNull;
@@ -26,8 +27,10 @@ import static org.openmetadata.catalog.util.TestUtils.assertResponse;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -39,7 +42,9 @@ import org.openmetadata.catalog.entity.data.Database;
import org.openmetadata.catalog.jdbi3.DatabaseRepository.DatabaseEntityInterface;
import org.openmetadata.catalog.resources.EntityResourceTest;
import org.openmetadata.catalog.resources.databases.DatabaseResource.DatabaseList;
+import org.openmetadata.catalog.type.ChangeDescription;
import org.openmetadata.catalog.type.EntityReference;
+import org.openmetadata.catalog.type.FieldChange;
import org.openmetadata.catalog.util.EntityInterface;
import org.openmetadata.catalog.util.ResultList;
import org.openmetadata.catalog.util.TestUtils;
@@ -132,6 +137,25 @@ public class DatabaseResourceTest extends EntityResourceTest {
deleteEntity(database.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_Database_200(TestInfo test) throws IOException {
+ CreateDatabase request = create(test).withService(MYSQL_REFERENCE).withDescription("");
+ Database database = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(database.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(database.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
@Test
void delete_nonEmptyDatabase_4xx() {
// TODO
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java
index ef6c9a2234f..46d5ef36fe2 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/databases/TableResourceTest.java
@@ -58,6 +58,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.UUID;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
@@ -1023,6 +1024,25 @@ public class TableResourceTest extends EntityResourceTest {
deleteEntity(table.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_Table_200(TestInfo test) throws IOException {
+ CreateTable request = create(test).withDatabase(DATABASE.getId()).withDescription("");
+ Table table = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(table.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(table.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
@Test
void delete_table_as_non_admin_401(TestInfo test) throws HttpResponseException {
Table table = createEntity(create(test), adminAuthHeaders());
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/locations/LocationResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/locations/LocationResourceTest.java
index f1cc55dddb5..f3c558ffbdd 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/locations/LocationResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/locations/LocationResourceTest.java
@@ -19,6 +19,7 @@ import static javax.ws.rs.core.Response.Status.OK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.assertListNotNull;
import static org.openmetadata.catalog.util.TestUtils.assertResponse;
@@ -32,6 +33,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
@@ -43,7 +45,9 @@ import org.openmetadata.catalog.entity.data.Location;
import org.openmetadata.catalog.jdbi3.LocationRepository.LocationEntityInterface;
import org.openmetadata.catalog.resources.EntityResourceTest;
import org.openmetadata.catalog.resources.locations.LocationResource.LocationList;
+import org.openmetadata.catalog.type.ChangeDescription;
import org.openmetadata.catalog.type.EntityReference;
+import org.openmetadata.catalog.type.FieldChange;
import org.openmetadata.catalog.util.EntityInterface;
import org.openmetadata.catalog.util.ResultList;
import org.openmetadata.catalog.util.TestUtils;
@@ -188,6 +192,25 @@ public class LocationResourceTest extends EntityResourceTest {
deleteEntity(location.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_Location_200(TestInfo test) throws IOException {
+ CreateLocation request = create(test).withDescription("");
+ Location location = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(location.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(location.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
@Test
void delete_location_as_non_admin_401(TestInfo test) throws HttpResponseException {
Location location = createLocation(create(test), adminAuthHeaders());
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/mlmodels/MlModelResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/mlmodels/MlModelResourceTest.java
index 939b14db671..5dc3d063acc 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/mlmodels/MlModelResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/mlmodels/MlModelResourceTest.java
@@ -381,6 +381,26 @@ public class MlModelResourceTest extends EntityResourceTest {
deleteEntity(model.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_MlModel_200(TestInfo test) throws IOException {
+ // Create with empty description
+ CreateMlModel request = create(test).withDescription("");
+ MlModel model = createAndCheckEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(model.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(model.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description and expect a MAJOR_UPDATE with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
/** Validate returned fields GET .../models/{id}?fields="..." or GET .../models/name/{fqn}?fields="..." */
@Override
public void validateGetWithDifferentFields(MlModel model, boolean byName) throws HttpResponseException {
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/pipelines/PipelineResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/pipelines/PipelineResourceTest.java
index 8b7f8a2d406..5baa67fc027 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/pipelines/PipelineResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/pipelines/PipelineResourceTest.java
@@ -30,12 +30,14 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.http.client.HttpResponseException;
import org.joda.time.DateTime;
@@ -297,6 +299,25 @@ public class PipelineResourceTest extends EntityResourceTest {
// TODO
}
+ @Test
+ void delete_put_Pipeline_200(TestInfo test) throws IOException {
+ CreatePipeline request = create(test).withService(AIRFLOW_REFERENCE).withDescription("");
+ Pipeline pipeline = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(pipeline.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(pipeline.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
public static Pipeline updatePipeline(CreatePipeline create, Status status, Map authHeaders)
throws HttpResponseException {
return TestUtils.put(getResource("pipelines"), create, Pipeline.class, status, authHeaders);
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/policies/PolicyResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/policies/PolicyResourceTest.java
index 270dba754da..c11375e72d2 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/policies/PolicyResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/policies/PolicyResourceTest.java
@@ -31,12 +31,14 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
@@ -313,6 +315,25 @@ public class PolicyResourceTest extends EntityResourceTest {
deleteEntity(policy.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_Policy_200(TestInfo test) throws IOException {
+ CreatePolicy request = create(test).withDescription("");
+ Policy policy = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(policy.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(policy.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
@Test
void delete_nonEmptyPolicy_4xx() {
// TODO
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DashboardServiceResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DashboardServiceResourceTest.java
index a6424267857..9ef44dd3aea 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DashboardServiceResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DashboardServiceResourceTest.java
@@ -20,14 +20,17 @@ import static javax.ws.rs.core.Response.Status.OK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.getPrincipal;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.Date;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@@ -222,6 +225,25 @@ public class DashboardServiceResourceTest extends EntityResourceTest authHeaders = adminAuthHeaders();
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DatabaseServiceResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DatabaseServiceResourceTest.java
index 080b79de99d..4f66ec075d0 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DatabaseServiceResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/DatabaseServiceResourceTest.java
@@ -19,13 +19,16 @@ import static javax.ws.rs.core.Response.Status.OK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.getPrincipal;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.Date;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@@ -199,6 +202,25 @@ public class DatabaseServiceResourceTest extends EntityResourceTest authHeaders = adminAuthHeaders();
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/MessagingServiceResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/MessagingServiceResourceTest.java
index c3523524257..84bb6fb5a85 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/MessagingServiceResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/MessagingServiceResourceTest.java
@@ -21,14 +21,17 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -249,6 +252,25 @@ public class MessagingServiceResourceTest extends EntityResourceTest authHeaders = adminAuthHeaders();
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/PipelineServiceResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/PipelineServiceResourceTest.java
index 89f6a27e09b..34d2b2b5a97 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/PipelineServiceResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/PipelineServiceResourceTest.java
@@ -20,14 +20,17 @@ import static javax.ws.rs.core.Response.Status.OK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.getPrincipal;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.Date;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -229,6 +232,25 @@ public class PipelineServiceResourceTest extends EntityResourceTest authHeaders = adminAuthHeaders();
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/StorageServiceResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/StorageServiceResourceTest.java
index 7a2a9189c0b..0c331d3bb2f 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/StorageServiceResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/services/StorageServiceResourceTest.java
@@ -19,12 +19,15 @@ import static javax.ws.rs.core.Response.Status.OK;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.getPrincipal;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.Map;
+import javax.ws.rs.core.Response;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInfo;
@@ -35,7 +38,9 @@ import org.openmetadata.catalog.exception.CatalogExceptionMessage;
import org.openmetadata.catalog.jdbi3.StorageServiceRepository.StorageServiceEntityInterface;
import org.openmetadata.catalog.resources.EntityResourceTest;
import org.openmetadata.catalog.resources.services.storage.StorageServiceResource.StorageServiceList;
+import org.openmetadata.catalog.type.ChangeDescription;
import org.openmetadata.catalog.type.EntityReference;
+import org.openmetadata.catalog.type.FieldChange;
import org.openmetadata.catalog.type.StorageServiceType;
import org.openmetadata.catalog.util.EntityInterface;
import org.openmetadata.catalog.util.TestUtils;
@@ -104,6 +109,25 @@ public class StorageServiceResourceTest extends EntityResourceTest authHeaders = adminAuthHeaders();
diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/topics/TopicResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/topics/TopicResourceTest.java
index e37d6984aa2..1fd529f83fd 100644
--- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/topics/TopicResourceTest.java
+++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/topics/TopicResourceTest.java
@@ -18,17 +18,20 @@ import static javax.ws.rs.core.Response.Status.FORBIDDEN;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.openmetadata.catalog.security.SecurityUtil.authHeaders;
+import static org.openmetadata.catalog.util.TestUtils.UpdateType.MINOR_UPDATE;
import static org.openmetadata.catalog.util.TestUtils.adminAuthHeaders;
import static org.openmetadata.catalog.util.TestUtils.assertListNotNull;
import static org.openmetadata.catalog.util.TestUtils.assertResponse;
import java.io.IOException;
import java.net.URISyntaxException;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.apache.http.client.HttpResponseException;
import org.junit.jupiter.api.Test;
@@ -244,6 +247,25 @@ public class TopicResourceTest extends EntityResourceTest {
deleteEntity(topic.getId(), adminAuthHeaders());
}
+ @Test
+ void delete_put_Topic_200(TestInfo test) throws IOException {
+ CreateTopic request = create(test).withDescription("");
+ Topic topic = createEntity(request, adminAuthHeaders());
+
+ // Delete
+ deleteEntity(topic.getId(), adminAuthHeaders());
+
+ ChangeDescription change = getChangeDescription(topic.getVersion());
+ change.setFieldsUpdated(
+ Arrays.asList(
+ new FieldChange().withName("deleted").withNewValue(false).withOldValue(true),
+ new FieldChange().withName("description").withNewValue("updatedDescription").withOldValue("")));
+
+ // PUT with updated description
+ updateAndCheckEntity(
+ request.withDescription("updatedDescription"), Response.Status.OK, adminAuthHeaders(), MINOR_UPDATE, change);
+ }
+
@Test
void delete_nonEmptyTopic_4xx() {
// TODO