Skip to content

Commit

Permalink
create and update of dataset flow for input and output flow directions
Browse files Browse the repository at this point in the history
  • Loading branch information
pkarthik1901 committed Dec 4, 2024
1 parent 87d72a8 commit 60e33d6
Show file tree
Hide file tree
Showing 15 changed files with 946 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,102 @@ public void testCreateDatasetOfTypeReport() {
//TODO :: Contract for response of dataset.create() needs to be decided
}

@Test
public void testCreateDatasetOfTypeFlowInput() {
// Given
wireMockRule.stubFor(WireMock.post(WireMock.urlEqualTo("/catalogs/common/datasets/SIF0001"))
.withRequestBody(equalToJson(TestUtils.loadJsonForIt("dataset/dataset-flow-SIF0001-create-request.json")))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withStatus(200)
.withBodyFile("dataset/dataset-create-response.json")));

Dataset dataset = getSdk().builders().dataset()
.identifier("SIF0001")
.description("Sample input flow description 1")
.linkedEntity("SIF0001/")
.title("Sample Input Flow 1 | North America")
.frequency("Daily")
.varArg("category", listOf("Category 1"))
.varArg("createdDate", "2022-02-06")
.varArg("coverageStartDate", "2022-02-06")
.varArg("coverageEndDate", "2023-03-09")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 1")
.varArg("modifiedDate", "2023-03-09")
.varArg("publisher", "Publisher 1")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 1"))
.varArg("subCategory", listOf("Subcategory 1"))
.varArg("tag", listOf("Tag1"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.applicationId(Application.builder().sealId("12345").build())
.inputFlow(
Application.builder().sealId("123456").build(),
new Application[] {Application.builder().sealId("456789").build()}
)
.build();

// When
dataset.create();


// Then Verify the response
//TODO :: Contract for response of dataset.create() needs to be decided
}

@Test
public void testCreateDatasetOfTypeFlowOutput() {
// Given
wireMockRule.stubFor(WireMock.post(WireMock.urlEqualTo("/catalogs/common/datasets/SOF0001"))
.withRequestBody(equalToJson(TestUtils.loadJsonForIt("dataset/dataset-flow-SOF0001-create-request.json")))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withStatus(200)
.withBodyFile("dataset/dataset-create-response.json")));

Dataset dataset = getSdk().builders().dataset()
.identifier("SOF0001")
.description("Sample output flow description 1")
.linkedEntity("SOF0001/")
.title("Sample Output Flow 1 | North America")
.frequency("Daily")
.varArg("category", listOf("Category 1"))
.varArg("createdDate", "2022-02-06")
.varArg("coverageStartDate", "2022-02-06")
.varArg("coverageEndDate", "2023-03-09")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 1")
.varArg("modifiedDate", "2023-03-09")
.varArg("publisher", "Publisher 1")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 1"))
.varArg("subCategory", listOf("Subcategory 1"))
.varArg("tag", listOf("Tag1"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.applicationId(Application.builder().sealId("12345").build())
.outputFlow(
Application.builder().sealId("123456").build(),
new Application[] {Application.builder().sealId("456789").build()}
)
.build();

// When
dataset.create();


// Then Verify the response
//TODO :: Contract for response of dataset.create() needs to be decided
}

@Test
public void testUpdateDataset() {
// Given
Expand Down Expand Up @@ -249,6 +345,37 @@ public void testUpdateDatasetOfTypeReportRetrievedFromListDatasets() {
//TODO :: Contract for response of dataset.update() needs to be decided
}

@Test
public void testUpdateDatasetOfTypeFlowRetrievedFromListDatasets() {
// Given
wireMockRule.stubFor(WireMock.get(WireMock.urlEqualTo("/catalogs/common/datasets"))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withStatus(200)
.withBodyFile("dataset/multiple-dataset-response.json")));

wireMockRule.stubFor(WireMock.put(WireMock.urlEqualTo("/catalogs/common/datasets/SIF0001"))
.withRequestBody(equalToJson(TestUtils.loadJsonForIt("dataset/dataset-flow-SIF0001-update-request.json")))
.willReturn(WireMock.aResponse()
.withHeader("Content-Type", "application/json")
.withStatus(200)
.withBodyFile("dataset/dataset-create-response.json")));

Map<String, Dataset> datasets = getSdk().listDatasets("common", "SIF0001", true);
Dataset originalDataset = datasets.get("SIF0001");

// When
Dataset amendedDataset = originalDataset
.toBuilder()
.description("Updated Sample input flow description 1")
.build();

amendedDataset.update();

// Then Verify the response
//TODO :: Contract for response of dataset.update() needs to be decided
}

@Test
public void testDeleteDataset() {
// Given
Expand Down
31 changes: 30 additions & 1 deletion src/main/java/io/github/jpmorganchase/fusion/model/Dataset.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ public class Dataset extends CatalogResource {
String type;
Report report;
Application applicationId;
Application producerApplicationId;
Application[] consumerApplicationId;
Flow flowDetails;

@Builder(toBuilder = true)
public Dataset(
Expand All @@ -41,7 +44,10 @@ public Dataset(
String frequency,
String type,
Report report,
Application applicationId) {
Application applicationId,
Application producerApplicationId,
Application[] consumerApplicationId,
Flow flowDetails) {
super(identifier, varArgs, apiManager, rootUrl, catalogIdentifier);
this.description = description;
this.linkedEntity = linkedEntity;
Expand All @@ -50,6 +56,9 @@ public Dataset(
this.type = type;
this.report = report;
this.applicationId = applicationId;
this.producerApplicationId = producerApplicationId;
this.consumerApplicationId = consumerApplicationId;
this.flowDetails = flowDetails;
}

@Override
Expand Down Expand Up @@ -79,5 +88,25 @@ public DatasetBuilder report(Report report) {
});
return this;
}

public DatasetBuilder inputFlow(Application producerApplicationId, Application[] consumerApplicationId) {
Optional.ofNullable(producerApplicationId).ifPresent(val -> {
this.type = "Flow";
this.flowDetails = Flow.builder().flowDirection("Input").build();
this.producerApplicationId = producerApplicationId;
this.consumerApplicationId = consumerApplicationId;
});
return this;
}

public DatasetBuilder outputFlow(Application producerApplicationId, Application[] consumerApplicationId) {
Optional.ofNullable(producerApplicationId).ifPresent(val -> {
this.type = "Flow";
this.flowDetails = Flow.builder().flowDirection("Output").build();
this.producerApplicationId = producerApplicationId;
this.consumerApplicationId = consumerApplicationId;
});
return this;
}
}
}
14 changes: 14 additions & 0 deletions src/main/java/io/github/jpmorganchase/fusion/model/Flow.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.github.jpmorganchase.fusion.model;

import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.Value;

@Builder
@Value
@EqualsAndHashCode()
@ToString()
public class Flow {
String flowDirection;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ public JsonElement serialize(Dataset src, Type typeOfSrc, JsonSerializationConte
jsonObject.add("type", context.serialize(src.getType()));
jsonObject.add("report", context.serialize(src.getReport()));
jsonObject.add("applicationId", context.serialize(src.getApplicationId()));
jsonObject.add("producerApplicationId", context.serialize(src.getProducerApplicationId()));
jsonObject.add("consumerApplicationId", context.serialize(src.getConsumerApplicationId()));
jsonObject.add("flowDetails", context.serialize(src.getFlowDetails()));

Map<String, Object> varArgs = src.getVarArgs();
if (varArgs != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
package io.github.jpmorganchase.fusion.parsing;

import static io.github.jpmorganchase.fusion.test.TestUtils.listOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;

import io.github.jpmorganchase.fusion.api.APIManager;
import io.github.jpmorganchase.fusion.api.context.APIContext;
import io.github.jpmorganchase.fusion.model.Application;
import io.github.jpmorganchase.fusion.model.Dataset;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;

public class GsonAPIResponseParserDatasetFlowTest {

private static final String singleDatasetInputFlowJson =
loadTestResource("single-dataset-input-flow-response.json");
private static final String singleDatasetOutputFlowJson =
loadTestResource("single-dataset-output-flow-response.json");
private static final String multipleDatasetJson = loadTestResource("multiple-dataset-flow-response.json");

private final Dataset testDatasetInputFlow1 = Dataset.builder()
.identifier("SIF0001")
.description("Sample input flow description 1")
.linkedEntity("SIF0001/")
.frequency("Daily")
.apiManager(apiContext.getApiManager())
.rootUrl(apiContext.getRootUrl())
.catalogIdentifier(apiContext.getDefaultCatalog())
.title("Sample Input Flow 1 | North America")
.varArg("category", listOf("Category 1"))
.varArg("createdDate", "2022-02-05")
.varArg("coverageStartDate", "2022-02-05")
.varArg("coverageEndDate", "2023-03-08")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 1")
.varArg("modifiedDate", "2023-03-08")
.varArg("publisher", "Publisher 1")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 1"))
.varArg("subCategory", listOf("Subcategory 1"))
.varArg("tag", listOf("Tag1"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.applicationId(Application.builder().sealId("12345").build())
.inputFlow(
Application.builder().sealId("123456").build(),
new Application[] {Application.builder().sealId("456789").build()})
.build();

private final Dataset testDatasetOutputFlow1 = Dataset.builder()
.identifier("SOF0001")
.description("Sample output flow description 1")
.linkedEntity("SOF0001/")
.frequency("Daily")
.apiManager(apiContext.getApiManager())
.rootUrl(apiContext.getRootUrl())
.catalogIdentifier(apiContext.getDefaultCatalog())
.title("Sample Output Flow 1 | North America")
.varArg("category", listOf("Category 1"))
.varArg("createdDate", "2022-02-05")
.varArg("coverageStartDate", "2022-02-05")
.varArg("coverageEndDate", "2023-03-08")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 1")
.varArg("modifiedDate", "2023-03-08")
.varArg("publisher", "Publisher 1")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 1"))
.varArg("subCategory", listOf("Subcategory 1"))
.varArg("tag", listOf("Tag1"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.applicationId(Application.builder().sealId("12345").build())
.outputFlow(
Application.builder().sealId("123456").build(),
new Application[] {Application.builder().sealId("456789").build()})
.build();

private final Dataset testDatasetInputFlow2 = Dataset.builder()
.identifier("SIF0002")
.description("Sample input flow description 2")
.linkedEntity("SIF0002/")
.frequency("Daily")
.title("Sample Input Flow 2 | North America")
.apiManager(apiContext.getApiManager())
.rootUrl(apiContext.getRootUrl())
.catalogIdentifier(apiContext.getDefaultCatalog())
.varArg("category", listOf("Category 2"))
.varArg("createdDate", "2022-02-06")
.varArg("coverageStartDate", "2022-02-06")
.varArg("coverageEndDate", "2023-03-09")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 2")
.varArg("modifiedDate", "2023-03-09")
.varArg("publisher", "Publisher 2")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 2"))
.varArg("subCategory", listOf("Subcategory 2"))
.varArg("tag", listOf("Tag2"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.applicationId(Application.builder().sealId("12345").build())
.inputFlow(
Application.builder().sealId("123456").build(),
new Application[] {Application.builder().sealId("456789").build()})
.build();

private static final APIContext apiContext = APIContext.builder()
.apiManager(Mockito.mock(APIManager.class))
.rootUrl("http://foobar/api/v1/")
.defaultCatalog("foobar")
.build();

private static final APIResponseParser responseParser = new GsonAPIResponseParser(apiContext);

@Test
public void singleDatasetInputFlowInResourcesParsesCorrectly() {
Map<String, Dataset> datasetMap = responseParser.parseDatasetResponse(singleDatasetInputFlowJson);
assertThat(datasetMap.size(), is(1));

Dataset testDatasetResponse = datasetMap.get("SIF0001");
assertThat(testDatasetResponse, is(equalTo(testDatasetInputFlow1)));
}

@Test
public void singleDatasetOutputFlowInResourcesParsesCorrectly() {
Map<String, Dataset> datasetMap = responseParser.parseDatasetResponse(singleDatasetOutputFlowJson);
assertThat(datasetMap.size(), is(1));

Dataset testDatasetResponse = datasetMap.get("SOF0001");
assertThat(testDatasetResponse, is(equalTo(testDatasetOutputFlow1)));
}

@Test
public void multipleCatalogsInResourcesParseCorrectly() {
Map<String, Dataset> datasetMap = responseParser.parseDatasetResponse(multipleDatasetJson);
assertThat(datasetMap.size(), is(3));

Dataset testDatasetResponse = datasetMap.get("SIF0001");
assertThat(testDatasetResponse, is(equalTo(testDatasetInputFlow1)));

Dataset testDatasetResponse2 = datasetMap.get("SOF0001");
assertThat(testDatasetResponse2, is(equalTo(testDatasetOutputFlow1)));

Dataset testDatasetResponse3 = datasetMap.get("SIF0002");
assertThat(testDatasetResponse3, is(equalTo(testDatasetInputFlow2)));
}

private static String loadTestResource(String resourceName) {
URL url = GsonAPIResponseParser.class.getResource(resourceName);
try {
Path path = Paths.get(url.toURI());
return new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
} catch (Exception e) {
throw new RuntimeException("Failed to load test data", e);
}
}
}
Loading

0 comments on commit 60e33d6

Please sign in to comment.