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