Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(graphql): Added GraphQL mappings for the "created" and "lastModified" fields in "DatasetProperties" aspect #7463

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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();
siladitya2 marked this conversation as resolved.
Show resolved Hide resolved
if (created != null) {
siladitya2 marked this conversation as resolved.
Show resolved Hide resolved
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
siladitya2 marked this conversation as resolved.
Show resolved Hide resolved
"""
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 {
siladitya2 marked this conversation as resolved.
Show resolved Hide resolved

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());

}
}