From d07f1a9d892a09a83336b14692f996ba5380ecca Mon Sep 17 00:00:00 2001 From: 07Himank <112613760+07Himank@users.noreply.github.com> Date: Mon, 28 Nov 2022 14:53:04 +0530 Subject: [PATCH] kpi resource test task done (#9006) * kpi rsource test task done * addressing comments * addressing comments Co-authored-by: Himank Mehta --- .../service/jdbi3/KpiRepository.java | 9 +- .../service/resources/EntityResourceTest.java | 17 ++-- .../resources/events/WebhookResourceTest.java | 10 ++- .../resources/kpi/KpiResourceTest.java | 90 +++++++++++++++++-- 4 files changed, 106 insertions(+), 20 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java index bbf0c743aef..c289bb272c2 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/KpiRepository.java @@ -225,14 +225,15 @@ public class KpiRepository extends EntityRepository { @Override public void entitySpecificUpdate() throws IOException { - updateFromRelationships( + updateToRelationships( "dataInsightChart", KPI, - new ArrayList<>(List.of(original.getDataInsightChart())), - new ArrayList<>(List.of(updated.getDataInsightChart())), + original.getId(), Relationship.USES, DATA_INSIGHT_CHART, - updated.getId()); + new ArrayList<>(List.of(original.getDataInsightChart())), + new ArrayList<>(List.of(updated.getDataInsightChart())), + false); recordChange("targetDefinition", original.getTargetDefinition(), updated.getTargetDefinition()); recordChange("startDate", original.getStartDate(), updated.getStartDate()); recordChange("endDate", original.getEndDate(), updated.getEndDate()); diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java index 5ce591ef589..66915a8b1df 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/EntityResourceTest.java @@ -344,7 +344,7 @@ public abstract class EntityResourceTest { public KpiResourceTest() { super(Entity.KPI, Kpi.class, KpiResource.KpiList.class, "kpi", KpiResource.FIELDS); @@ -56,12 +61,12 @@ public class KpiResourceTest extends EntityResourceTest { supportsPatch = false; } - public void setupKpi(TestInfo test) throws IOException { + public void setupKpi() throws IOException { DataInsightResourceTest dataInsightResourceTest = new DataInsightResourceTest(); CreateDataInsightChart chartRequest = dataInsightResourceTest - .createRequest(test) - .withName("TestChart") + .createRequest() + .withName(String.format("TestChart" + "%s", UUID.randomUUID())) .withOwner(USER1_REF) .withDataIndexType(DataReportIndex.ENTITY_REPORT_DATA_INDEX) .withMetrics( @@ -84,15 +89,15 @@ public class KpiResourceTest extends EntityResourceTest { } @Test - void post_testWithInvalidValues_4xx(TestInfo test) { - CreateKpiRequest create1 = createRequest("Test2" + UUID.randomUUID()); + void post_testWithInvalidValues_4xx(TestInfo test) throws HttpResponseException { + String uuid = "Test2" + UUID.randomUUID(); + CreateKpiRequest create1 = createRequest(uuid); create1.withDataInsightChart(USER1_REF); assertResponseContains( () -> createAndCheckEntity(create1, ADMIN_AUTH_HEADERS), NOT_FOUND, "dataInsightChart instance for " + USER1_REF.getId() + " not found"); - CreateKpiRequest create2 = createRequest(String.format("Test%s", UUID.randomUUID())); KpiTarget target = new KpiTarget().withName("Test").withValue("Test"); create2.withTargetDefinition(List.of(target)); @@ -227,6 +232,11 @@ public class KpiResourceTest extends EntityResourceTest { @Override public CreateKpiRequest createRequest(String name) { + try { + this.setupKpi(); + } catch (IOException e) { + throw new RuntimeException(e); + } return new CreateKpiRequest() .withName(name) .withDescription(name) @@ -250,6 +260,70 @@ public class KpiResourceTest extends EntityResourceTest { assertEquals(request.getTargetDefinition(), createdEntity.getTargetDefinition()); } + @Override + protected void post_entityAlreadyExists_409_conflict(TestInfo test) throws HttpResponseException { + CreateKpiRequest create = createRequest(getEntityName(test), "", "", null); + // Create first time using POST + createEntity(create, ADMIN_AUTH_HEADERS); + CreateKpiRequest create1 = createRequest(getEntityName(test), "", "", null); + // Second time creating the same entity using POST should fail + assertResponse(() -> createEntity(create1, ADMIN_AUTH_HEADERS), CONFLICT, ENTITY_ALREADY_EXISTS); + } + + @Override + @Test + protected void put_entityNonEmptyDescriptionUpdate_200(TestInfo test) throws IOException { + // Create entity with non-empty description + CreateKpiRequest request = + createRequest(getEntityName(test), supportsEmptyDescription ? null : "description", null, null); + Kpi entity = createAndCheckEntity(request, ADMIN_AUTH_HEADERS); + UUID oldUUID = request.getDataInsightChart().getId(); + // BOT user can update empty description and empty displayName + ChangeDescription change = getChangeDescription(entity.getVersion()); + request = createPutRequest(getEntityName(test), "description", "displayName", null); + UUID newUUID = request.getDataInsightChart().getId(); + if (supportsEmptyDescription) { + fieldAdded(change, "description", "description"); + } + fieldAdded(change, "displayName", "displayName"); + fieldAdded(change, "dataInsightChart", newUUID); + fieldDeleted(change, "dataInsightChart", oldUUID); + entity = updateAndCheckEntity(request, OK, INGESTION_BOT_AUTH_HEADERS, MINOR_UPDATE, change); + + // Updating non-empty description and non-empty displayName is allowed for users other than bots + oldUUID = request.getDataInsightChart().getId(); + request = createPutRequest(getEntityName(test), "updatedDescription", "updatedDisplayName", null); + newUUID = request.getDataInsightChart().getId(); + change = getChangeDescription(entity.getVersion()); + fieldUpdated(change, "description", "description", "updatedDescription"); + fieldUpdated(change, "displayName", "displayName", "updatedDisplayName"); + fieldAdded(change, "dataInsightChart", newUUID); + fieldDeleted(change, "dataInsightChart", oldUUID); + updateAndCheckEntity(request, OK, ADMIN_AUTH_HEADERS, MINOR_UPDATE, change); + + // Updating non-empty description and non-empty displayName is ignored for bot users + request = createPutRequest(getEntityName(test), "updatedDescription2", "updatedDisplayName2", null); + updateAndCheckEntity(request, OK, INGESTION_BOT_AUTH_HEADERS, NO_CHANGE, null); + } + + @Override + @Test + protected void put_entityEmptyDescriptionUpdate_200(TestInfo test) throws IOException { + // Create entity with empty description + CreateKpiRequest request = createRequest(getEntityName(test), "", "displayName", null); + Kpi entity = createEntity(request, ADMIN_AUTH_HEADERS); + UUID oldUUID = request.getDataInsightChart().getId(); + + // Update empty description with a new description + request = createPutRequest(getEntityName(test), "updatedDescription", "displayName", null); + UUID newUUID = request.getDataInsightChart().getId(); + ChangeDescription change = getChangeDescription(entity.getVersion()); + fieldUpdated(change, "description", "", "updatedDescription"); + fieldAdded(change, "dataInsightChart", newUUID); + fieldDeleted(change, "dataInsightChart", oldUUID); + updateAndCheckEntity(request, OK, ADMIN_AUTH_HEADERS, MINOR_UPDATE, change); + } + @Override public void compareEntities(Kpi expected, Kpi updated, Map authHeaders) throws HttpResponseException { validateCommonEntityFields(expected, updated, getPrincipalName(authHeaders));