Skip to content

Commit

Permalink
Merge pull request #78 from jpmorganchase/feature/create_dataset_of_t…
Browse files Browse the repository at this point in the history
…ype_report

create dataset of type report
  • Loading branch information
pkarthik1901 authored Dec 2, 2024
2 parents 867545f + 327fd88 commit c59d54e
Show file tree
Hide file tree
Showing 13 changed files with 500 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.github.tomakehurst.wiremock.client.WireMock;
import io.github.jpmorganchase.fusion.model.Dataset;
import io.github.jpmorganchase.fusion.model.Report;
import io.github.jpmorganchase.fusion.test.TestUtils;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
Expand Down Expand Up @@ -115,6 +116,51 @@ public void testCreateDatasetOverrideDefaultCatalog() {
//TODO :: Contract for response of dataset.create() needs to be decided
}

@Test
public void testCreateDatasetOfTypeReport() {
// Given
wireMockRule.stubFor(WireMock.post(WireMock.urlEqualTo("/catalogs/common/datasets/SR0001"))
.withRequestBody(equalToJson(TestUtils.loadJsonForIt("dataset/dataset-report-SR0001-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("SR0001")
.description("Sample report description 1")
.linkedEntity("SR0001/")
.title("Sample Report 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)
.type("Report")
.report(Report.builder().tier("Tier 1").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
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class Dataset extends CatalogResource {

String title;
String frequency;
String type;
Report report;

@Builder(toBuilder = true)
public Dataset(
Expand All @@ -34,12 +36,16 @@ public Dataset(
String description,
String linkedEntity,
String title,
String frequency) {
String frequency,
String type,
Report report) {
super(identifier, varArgs, apiManager, rootUrl, catalogIdentifier);
this.description = description;
this.linkedEntity = linkedEntity;
this.title = title;
this.frequency = frequency;
this.type = type;
this.report = report;
}

@Override
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/io/github/jpmorganchase/fusion/model/Report.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.github.jpmorganchase.fusion.model;

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

@Builder
@Value
@EqualsAndHashCode()
@ToString()
public class Report {

String tier;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ public JsonElement serialize(Dataset src, Type typeOfSrc, JsonSerializationConte
jsonObject.add("title", context.serialize(src.getTitle()));
jsonObject.add("frequency", context.serialize(src.getFrequency()));
jsonObject.add("identifier", context.serialize(src.getIdentifier()));
jsonObject.add("type", context.serialize(src.getType()));
jsonObject.add("report", context.serialize(src.getReport()));

Map<String, Object> varArgs = src.getVarArgs();
if (varArgs != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public class DatasetBuilderTest {
@Test
void constructionWithBuilderCorrectlyPopulatesAllFields() {
APIManager apiManager = Mockito.mock(APIManager.class);
Report report = Report.builder().tier("The tier").build();
Map<String, Object> varArgs = new HashMap<>();
varArgs.put("key1", "value1");
Dataset d = Dataset.builder()
Expand All @@ -24,6 +25,8 @@ void constructionWithBuilderCorrectlyPopulatesAllFields() {
.linkedEntity("The entity")
.title("The title")
.frequency("The frequency")
.type("The type")
.report(report)
.rootUrl("http://foobar/api/v1/")
.catalogIdentifier("foobar")
.apiManager(apiManager)
Expand All @@ -35,6 +38,8 @@ void constructionWithBuilderCorrectlyPopulatesAllFields() {
assertThat(d.getLinkedEntity(), is(equalTo("The entity")));
assertThat(d.getTitle(), is(equalTo("The title")));
assertThat(d.getFrequency(), is(equalTo("The frequency")));
assertThat(d.getType(), is(equalTo("The type")));
assertThat(d.getReport(), is(equalTo(report)));
assertThat(d.getRootUrl(), is(equalTo("http://foobar/api/v1/")));
assertThat(d.getCatalogIdentifier(), is(equalTo("foobar")));
assertThat(d.getApiManager(), is(equalTo(apiManager)));
Expand Down
16 changes: 16 additions & 0 deletions src/test/java/io/github/jpmorganchase/fusion/model/ReportTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.github.jpmorganchase.fusion.model;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;

import org.junit.jupiter.api.Test;

public class ReportTest {

@Test
void constructionWithBuilderCorrectlyPopulatesAllFields() {
Report report = Report.builder().tier("The tier").build();
assertThat(report.getTier(), is(equalTo("The tier")));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
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.Dataset;
import io.github.jpmorganchase.fusion.model.Report;
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 GsonAPIResponseParserDatasetReportTest {

private static final String singleDatasetJson = loadTestResource("single-dataset-report-response.json");
private static final String multipleDatasetJson = loadTestResource("multiple-dataset-report-response.json");

private final Dataset testDataset = Dataset.builder()
.identifier("SR0001")
.description("Sample report description 1")
.linkedEntity("SR0001/")
.frequency("Daily")
.apiManager(apiContext.getApiManager())
.rootUrl(apiContext.getRootUrl())
.catalogIdentifier(apiContext.getDefaultCatalog())
.title("Sample Report 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)
.type("Report")
.report(Report.builder().tier("Tier 1").build())
.build();

private final Dataset testDataset2 = Dataset.builder()
.identifier("SR0002")
.description("Sample report description 2")
.linkedEntity("SR0002/")
.frequency("Daily")
.title("Sample Report 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)
.type("Report")
.report(Report.builder().tier("Tier 2").build())
.build();

private final Dataset testDataset3 = Dataset.builder()
.identifier("SR0003")
.description("Sample report description 3")
.linkedEntity("SR0003/")
.frequency("Daily")
.title("Sample Report 3 | North America")
.apiManager(apiContext.getApiManager())
.rootUrl(apiContext.getRootUrl())
.catalogIdentifier(apiContext.getDefaultCatalog())
.varArg("category", listOf("Category 3"))
.varArg("createdDate", "2022-02-07")
.varArg("coverageStartDate", "2022-02-07")
.varArg("coverageEndDate", "2023-03-10")
.varArg("isThirdPartyData", Boolean.FALSE)
.varArg("isInternalOnlyDataset", Boolean.FALSE)
.varArg("language", "English")
.varArg("maintainer", "Maintainer 3")
.varArg("modifiedDate", "2023-03-10")
.varArg("publisher", "Publisher 3")
.varArg("region", listOf("North America"))
.varArg("source", listOf("Source System 3"))
.varArg("subCategory", listOf("Subcategory 3"))
.varArg("tag", listOf("Tag3"))
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.type("Report")
.report(Report.builder().tier("Tier 3").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 singleDatasetInResourcesParsesCorrectly() {
Map<String, Dataset> datasetMap = responseParser.parseDatasetResponse(singleDatasetJson);
assertThat(datasetMap.size(), is(1));

Dataset testDatasetResponse = datasetMap.get("SR0001");
assertThat(testDatasetResponse, is(equalTo(testDataset)));
}

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

Dataset testDatasetResponse = datasetMap.get("SR0001");
assertThat(testDatasetResponse, is(equalTo(testDataset)));

Dataset testDatasetResponse2 = datasetMap.get("SR0002");
assertThat(testDatasetResponse2, is(equalTo(testDataset2)));

Dataset testDatasetResponse3 = datasetMap.get("SR0003");
assertThat(testDatasetResponse3, is(equalTo(testDataset3)));
}

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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import io.github.jpmorganchase.fusion.api.APIManager;
import io.github.jpmorganchase.fusion.model.Dataset;
import io.github.jpmorganchase.fusion.model.Report;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
Expand Down Expand Up @@ -43,6 +44,8 @@ public void testDatasetSerializesCorrectly() {
.varArg("isRestricted", Boolean.FALSE)
.varArg("isRawData", Boolean.FALSE)
.varArg("hasSample", Boolean.FALSE)
.type("Report")
.report(Report.builder().tier("Tier 1").build())
.apiManager(Mockito.mock(APIManager.class))
.rootUrl("http://foo/bar")
.catalogIdentifier("foobar")
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1,34 @@
{"description":"Sample dataset description 2","@id":"SD0002/","title":"Sample Dataset 2 | North America","frequency":"Daily","identifier":"SD0002","subCategory":["Subcategory 2"],"isRawData":false,"isInternalOnlyDataset":false,"language":"English","source":["Source System 2"],"coverageEndDate":"2023-03-09","maintainer":"Maintainer 2","coverageStartDate":"2022-02-06","createdDate":"2022-02-06","isThirdPartyData":false,"modifiedDate":"2023-03-09","publisher":"Publisher 2","tag":["Tag2"],"category":["Category 2"],"region":["North America"],"hasSample":false,"isRestricted":false}
{
"description": "Sample dataset description 2",
"@id": "SD0002/",
"title": "Sample Dataset 2 | North America",
"frequency": "Daily",
"identifier": "SD0002",
"subCategory": [
"Subcategory 2"
],
"isRawData": false,
"isInternalOnlyDataset": false,
"language": "English",
"source": [
"Source System 2"
],
"coverageEndDate": "2023-03-09",
"maintainer": "Maintainer 2",
"coverageStartDate": "2022-02-06",
"createdDate": "2022-02-06",
"isThirdPartyData": false,
"modifiedDate": "2023-03-09",
"publisher": "Publisher 2",
"tag": [
"Tag2"
],
"category": [
"Category 2"
],
"region": [
"North America"
],
"hasSample": false,
"isRestricted": false
}
Loading

0 comments on commit c59d54e

Please sign in to comment.