mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-11-01 19:18:05 +00:00
kpi resource test task done (#9006)
* kpi rsource test task done * addressing comments * addressing comments Co-authored-by: Himank Mehta <himankmehta@Himanks-MacBook-Air.local>
This commit is contained in:
parent
9b6adc9f24
commit
d07f1a9d89
@ -225,14 +225,15 @@ public class KpiRepository extends EntityRepository<Kpi> {
|
||||
|
||||
@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());
|
||||
|
||||
@ -344,7 +344,7 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
new TestDefinitionResourceTest().setupTestDefinitions(test);
|
||||
new TestCaseResourceTest().setupTestCase(test);
|
||||
new TypeResourceTest().setupTypes();
|
||||
new KpiResourceTest().setupKpi(test);
|
||||
new KpiResourceTest().setupKpi();
|
||||
|
||||
runWebhookTests = new Random().nextBoolean();
|
||||
if (runWebhookTests) {
|
||||
@ -374,6 +374,13 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
return createRequest(getEntityName(test)).withDescription("").withDisplayName(null).withOwner(null);
|
||||
}
|
||||
|
||||
public final K createRequest() {
|
||||
return createRequest(String.format("test%s", UUID.randomUUID()))
|
||||
.withDescription("")
|
||||
.withDisplayName(null)
|
||||
.withOwner(null);
|
||||
}
|
||||
|
||||
public final K createPutRequest(TestInfo test) {
|
||||
return createPutRequest(getEntityName(test)).withDescription("").withDisplayName(null).withOwner(null);
|
||||
}
|
||||
@ -520,7 +527,6 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
createdUUIDs.add(
|
||||
createEntity(createRequest(getEntityName(test, i + 1), "", null, null), ADMIN_AUTH_HEADERS).getId());
|
||||
}
|
||||
|
||||
T entity = createEntity(createRequest(getEntityName(test, 0), "", null, null), ADMIN_AUTH_HEADERS);
|
||||
deleteAndCheckEntity(entity, ADMIN_AUTH_HEADERS);
|
||||
|
||||
@ -862,7 +868,7 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
}
|
||||
|
||||
@Test
|
||||
void post_entityAlreadyExists_409_conflict(TestInfo test) throws HttpResponseException {
|
||||
protected void post_entityAlreadyExists_409_conflict(TestInfo test) throws HttpResponseException {
|
||||
K create = createRequest(getEntityName(test), "", "", null);
|
||||
// Create first time using POST
|
||||
createEntity(create, ADMIN_AUTH_HEADERS);
|
||||
@ -1071,7 +1077,7 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
}
|
||||
|
||||
@Test
|
||||
void put_entityEmptyDescriptionUpdate_200(TestInfo test) throws IOException {
|
||||
protected void put_entityEmptyDescriptionUpdate_200(TestInfo test) throws IOException {
|
||||
// Create entity with empty description
|
||||
K request = createRequest(getEntityName(test), "", "displayName", null);
|
||||
T entity = createEntity(request, ADMIN_AUTH_HEADERS);
|
||||
@ -1084,11 +1090,10 @@ public abstract class EntityResourceTest<T extends EntityInterface, K extends Cr
|
||||
}
|
||||
|
||||
@Test
|
||||
void put_entityNonEmptyDescriptionUpdate_200(TestInfo test) throws IOException {
|
||||
protected void put_entityNonEmptyDescriptionUpdate_200(TestInfo test) throws IOException {
|
||||
// Create entity with non-empty description
|
||||
K request = createRequest(getEntityName(test), supportsEmptyDescription ? null : "description", null, null);
|
||||
T entity = createAndCheckEntity(request, ADMIN_AUTH_HEADERS);
|
||||
|
||||
// BOT user can update empty description and empty displayName
|
||||
ChangeDescription change = getChangeDescription(entity.getVersion());
|
||||
request = createPutRequest(getEntityName(test), "description", "displayName", null);
|
||||
|
||||
@ -26,7 +26,13 @@ import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import javax.ws.rs.core.Response;
|
||||
@ -292,7 +298,7 @@ public class WebhookResourceTest extends EntityResourceTest<Webhook, CreateWebho
|
||||
}
|
||||
|
||||
@Test
|
||||
void put_entityNonEmptyDescriptionUpdate_200(TestInfo test) {
|
||||
protected void put_entityNonEmptyDescriptionUpdate_200(TestInfo test) {
|
||||
// TODO fix this test as currently bot can't update webhook
|
||||
}
|
||||
|
||||
|
||||
@ -1,13 +1,20 @@
|
||||
package org.openmetadata.service.resources.kpi;
|
||||
|
||||
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
|
||||
import static javax.ws.rs.core.Response.Status.CONFLICT;
|
||||
import static javax.ws.rs.core.Response.Status.CREATED;
|
||||
import static javax.ws.rs.core.Response.Status.NOT_FOUND;
|
||||
import static javax.ws.rs.core.Response.Status.OK;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.openmetadata.service.exception.CatalogExceptionMessage.ENTITY_ALREADY_EXISTS;
|
||||
import static org.openmetadata.service.security.SecurityUtil.getPrincipalName;
|
||||
import static org.openmetadata.service.util.EntityUtil.fieldAdded;
|
||||
import static org.openmetadata.service.util.EntityUtil.fieldDeleted;
|
||||
import static org.openmetadata.service.util.EntityUtil.fieldUpdated;
|
||||
import static org.openmetadata.service.util.TestUtils.ADMIN_AUTH_HEADERS;
|
||||
import static org.openmetadata.service.util.TestUtils.INGESTION_BOT_AUTH_HEADERS;
|
||||
import static org.openmetadata.service.util.TestUtils.UpdateType.MINOR_UPDATE;
|
||||
import static org.openmetadata.service.util.TestUtils.UpdateType.NO_CHANGE;
|
||||
import static org.openmetadata.service.util.TestUtils.assertResponse;
|
||||
import static org.openmetadata.service.util.TestUtils.assertResponseContains;
|
||||
|
||||
@ -21,7 +28,6 @@ import java.util.UUID;
|
||||
import javax.ws.rs.client.WebTarget;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.client.HttpResponseException;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.MethodOrderer;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.TestInfo;
|
||||
@ -45,7 +51,6 @@ import org.openmetadata.service.util.TestUtils;
|
||||
|
||||
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
|
||||
@Slf4j
|
||||
@Disabled
|
||||
public class KpiResourceTest extends EntityResourceTest<Kpi, CreateKpiRequest> {
|
||||
public KpiResourceTest() {
|
||||
super(Entity.KPI, Kpi.class, KpiResource.KpiList.class, "kpi", KpiResource.FIELDS);
|
||||
@ -56,12 +61,12 @@ public class KpiResourceTest extends EntityResourceTest<Kpi, CreateKpiRequest> {
|
||||
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<Kpi, CreateKpiRequest> {
|
||||
}
|
||||
|
||||
@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<Kpi, CreateKpiRequest> {
|
||||
|
||||
@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<Kpi, CreateKpiRequest> {
|
||||
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<String, String> authHeaders) throws HttpResponseException {
|
||||
validateCommonEntityFields(expected, updated, getPrincipalName(authHeaders));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user