Skip to content

Commit

Permalink
feat(graphql): Added GraphQL mappings for the "created" and "lastModi…
Browse files Browse the repository at this point in the history
…fied" fields in "DatasetProperties" aspect (#7463)

Co-authored-by: si-chakraborty <si.chakraborty@adevinta.com>
  • Loading branch information
siladitya2 and si-chakraborty committed Mar 8, 2023
1 parent fd1bd51 commit 3ce8af1
Show file tree
Hide file tree
Showing 3 changed files with 188 additions and 0 deletions.
Expand Up @@ -9,6 +9,7 @@
import com.linkedin.common.Ownership;
import com.linkedin.common.Siblings;
import com.linkedin.common.Status;
import com.linkedin.common.TimeStamp;
import com.linkedin.common.urn.Urn;
import com.linkedin.data.DataMap;
import com.linkedin.datahub.graphql.generated.Container;
Expand Down Expand Up @@ -136,6 +137,20 @@ private void mapDatasetProperties(@Nonnull Dataset dataset, @Nonnull DataMap dat
properties.setQualifiedName(gmsProperties.getQualifiedName());
dataset.setProperties(properties);
dataset.setDescription(properties.getDescription());
TimeStamp created = gmsProperties.getCreated();
if (created != null) {
properties.setCreated(created.getTime());
if (created.hasActor()) {
properties.setCreatedActor(created.getActor().toString());
}
}
TimeStamp lastModified = gmsProperties.getLastModified();
if (lastModified != null) {
properties.setLastModified(lastModified.getTime());
if (lastModified.hasActor()) {
properties.setLastModifiedActor(lastModified.getActor().toString());
}
}
}

private void mapEditableDatasetProperties(@Nonnull Dataset dataset, @Nonnull DataMap dataMap) {
Expand Down
20 changes: 20 additions & 0 deletions datahub-graphql-core/src/main/resources/entity.graphql
Expand Up @@ -1576,6 +1576,26 @@ type DatasetProperties {
External URL associated with the Dataset
"""
externalUrl: String

"""
Created timestamp millis associated with the Dataset
"""
created: Long

"""
Actor associated with the Dataset's created timestamp
"""
createdActor: String

"""
Last Modified timestamp millis associated with the Dataset
"""
lastModified: Long

"""
Actor associated with the Dataset's lastModified timestamp
"""
lastModifiedActor: String
}


Expand Down
@@ -0,0 +1,153 @@
package com.linkedin.datahub.graphql.types.dataset.mappers;

import com.linkedin.common.TimeStamp;
import com.linkedin.common.urn.Urn;
import com.linkedin.datahub.graphql.generated.Dataset;
import com.linkedin.datahub.graphql.generated.DatasetProperties;
import com.linkedin.entity.Aspect;
import com.linkedin.entity.EntityResponse;
import com.linkedin.entity.EnvelopedAspectMap;
import com.linkedin.metadata.Constants;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.util.HashMap;
import java.util.Map;

public class DatasetMapperTest {

private static final Urn TEST_DATASET_URN = Urn.createFromTuple(Constants.DATASET_ENTITY_NAME, "test");
private static final Urn TEST_CREATED_ACTOR_URN = Urn.createFromTuple(Constants.CORP_USER_ENTITY_NAME, "created");
private static final Urn TEST_LAST_MODIFIED_ACTOR_URN = Urn.createFromTuple(Constants.CORP_USER_ENTITY_NAME, "lastmodified");

@Test
public void testDatasetPropertiesMapperWithCreatedAndLastModified() {
final com.linkedin.dataset.DatasetProperties input = new com.linkedin.dataset.DatasetProperties();
input.setName("Test");
input.setQualifiedName("Test QualifiedName");

final TimeStamp createdTimestamp = new TimeStamp();
createdTimestamp.setActor(TEST_CREATED_ACTOR_URN);
createdTimestamp.setTime(10L);
input.setCreated(createdTimestamp);

final TimeStamp lastModifiedTimestamp = new TimeStamp();
lastModifiedTimestamp.setActor(TEST_LAST_MODIFIED_ACTOR_URN);
lastModifiedTimestamp.setTime(20L);
input.setLastModified(lastModifiedTimestamp);

final Map<String, com.linkedin.entity.EnvelopedAspect> dataSetPropertiesAspects = new HashMap<>();
dataSetPropertiesAspects.put(
Constants.DATASET_PROPERTIES_ASPECT_NAME,
new com.linkedin.entity.EnvelopedAspect().setValue(new Aspect(input.data())));
final EntityResponse response = new EntityResponse()
.setEntityName(Constants.DATASET_ENTITY_NAME)
.setUrn(TEST_DATASET_URN)
.setAspects(new EnvelopedAspectMap(dataSetPropertiesAspects));
final Dataset actual = DatasetMapper.map(response);


final Dataset expected = new Dataset();
expected.setUrn(TEST_DATASET_URN.toString());
final DatasetProperties expectedDatasetProperties = new DatasetProperties();
expectedDatasetProperties.setName("Test");
expectedDatasetProperties.setQualifiedName("Test QualifiedName");
expectedDatasetProperties.setLastModifiedActor(TEST_LAST_MODIFIED_ACTOR_URN.toString());
expectedDatasetProperties.setCreatedActor(TEST_CREATED_ACTOR_URN.toString());
expectedDatasetProperties.setLastModified(20L);
expectedDatasetProperties.setCreated(10L);
expected.setProperties(expectedDatasetProperties);

Assert.assertEquals(actual.getUrn(), expected.getUrn());
Assert.assertEquals(actual.getProperties().getName(), expected.getProperties().getName());
Assert.assertEquals(actual.getProperties().getQualifiedName(), expected.getProperties().getQualifiedName());

Assert.assertEquals(actual.getProperties().getLastModified(), expected.getProperties().getLastModified());
Assert.assertEquals(actual.getProperties().getCreated(), expected.getProperties().getCreated());

Assert.assertEquals(actual.getProperties().getLastModifiedActor(), expected.getProperties().getLastModifiedActor());
Assert.assertEquals(actual.getProperties().getCreatedActor(), expected.getProperties().getCreatedActor());

}

@Test
public void testDatasetPropertiesMapperWithoutCreatedAndLastModified() {
final com.linkedin.dataset.DatasetProperties input = new com.linkedin.dataset.DatasetProperties();
input.setName("Test");

final Map<String, com.linkedin.entity.EnvelopedAspect> dataSetPropertiesAspects = new HashMap<>();
dataSetPropertiesAspects.put(
Constants.DATASET_PROPERTIES_ASPECT_NAME,
new com.linkedin.entity.EnvelopedAspect().setValue(new Aspect(input.data())));
final EntityResponse response = new EntityResponse()
.setEntityName(Constants.DATASET_ENTITY_NAME)
.setUrn(TEST_DATASET_URN)
.setAspects(new EnvelopedAspectMap(dataSetPropertiesAspects));
final Dataset actual = DatasetMapper.map(response);

final Dataset expected = new Dataset();
expected.setUrn(TEST_DATASET_URN.toString());
final DatasetProperties expectedDatasetProperties = new DatasetProperties();
expectedDatasetProperties.setName("Test");
expectedDatasetProperties.setLastModifiedActor(null);
expectedDatasetProperties.setCreatedActor(null);
expectedDatasetProperties.setLastModified(null);
expectedDatasetProperties.setCreated(null);
expected.setProperties(expectedDatasetProperties);

Assert.assertEquals(actual.getUrn(), expected.getUrn());
Assert.assertEquals(actual.getProperties().getName(), expected.getProperties().getName());

Assert.assertEquals(actual.getProperties().getLastModified(), expected.getProperties().getLastModified());
Assert.assertEquals(actual.getProperties().getCreated(), expected.getProperties().getCreated());

Assert.assertEquals(actual.getProperties().getLastModifiedActor(), expected.getProperties().getLastModifiedActor());
Assert.assertEquals(actual.getProperties().getCreatedActor(), expected.getProperties().getCreatedActor());

}

@Test
public void testDatasetPropertiesMapperWithoutTimestampActors() {
final com.linkedin.dataset.DatasetProperties input = new com.linkedin.dataset.DatasetProperties();
input.setName("Test");

TimeStamp createdTimestamp = new TimeStamp();
createdTimestamp.setTime(10L);
input.setCreated(createdTimestamp);

TimeStamp lastModifiedTimestamp = new TimeStamp();
lastModifiedTimestamp.setTime(20L);
input.setLastModified(lastModifiedTimestamp);

final Map<String, com.linkedin.entity.EnvelopedAspect> dataSetPropertiesAspects = new HashMap<>();
dataSetPropertiesAspects.put(
Constants.DATASET_PROPERTIES_ASPECT_NAME,
new com.linkedin.entity.EnvelopedAspect().setValue(new Aspect(input.data())));
final EntityResponse response = new EntityResponse()
.setEntityName(Constants.DATASET_ENTITY_NAME)
.setUrn(TEST_DATASET_URN)
.setAspects(new EnvelopedAspectMap(dataSetPropertiesAspects));
final Dataset actual = DatasetMapper.map(response);


final Dataset expected = new Dataset();
expected.setUrn(TEST_DATASET_URN.toString());
final DatasetProperties expectedDatasetProperties = new DatasetProperties();
expectedDatasetProperties.setName("Test");
expectedDatasetProperties.setLastModifiedActor(null);
expectedDatasetProperties.setCreatedActor(null);
expectedDatasetProperties.setLastModified(20L);
expectedDatasetProperties.setCreated(10L);
expected.setProperties(expectedDatasetProperties);

Assert.assertEquals(actual.getUrn(), expected.getUrn());
Assert.assertEquals(actual.getProperties().getName(), expected.getProperties().getName());

Assert.assertEquals(actual.getProperties().getLastModified(), expected.getProperties().getLastModified());
Assert.assertEquals(actual.getProperties().getCreated(), expected.getProperties().getCreated());

Assert.assertEquals(actual.getProperties().getLastModifiedActor(), expected.getProperties().getLastModifiedActor());
Assert.assertEquals(actual.getProperties().getCreatedActor(), expected.getProperties().getCreatedActor());

}
}

0 comments on commit 3ce8af1

Please sign in to comment.