Skip to content

Commit 90ae118

Browse files
committed
#10520 add checks and tests
1 parent e8e5abf commit 90ae118

4 files changed

Lines changed: 209 additions & 0 deletions

File tree

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
## Dataset Types can set available Licenses
2+
3+
Licenses (e.g. "CC0 1.0") can now be linked to dataset types (e.g. "software") using new superuser APIs. The create Dataset Type APIs have been extended to allow you to set metadata blocks and/or licenses on the creation of a Dataset Type.
4+
5+
6+
For more information, see the guides ([overview](https://dataverse-guide--11001.org.readthedocs.build/en/11001/user/dataset-management.html#dataset-types), [new APIs](https://dataverse-guide--11001.org.readthedocs.build/en/11001/api/native-api.html#link-dataset-type-with-metadata-blocks)), #10519 and #11001.
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
{
2+
"datasetType": "testDatasetType",
3+
"datasetVersion": {
4+
"license": {
5+
"name": "CC BY 4.0",
6+
"uri": "https://creativecommons.org/licenses/by/4.0/"
7+
},
8+
"metadataBlocks": {
9+
"citation": {
10+
"fields": [
11+
{
12+
"value": "pyDataverse",
13+
"typeClass": "primitive",
14+
"multiple": false,
15+
"typeName": "title"
16+
},
17+
{
18+
"value": [
19+
{
20+
"authorName": {
21+
"value": "Range, Dan",
22+
"typeClass": "primitive",
23+
"multiple": false,
24+
"typeName": "authorName"
25+
},
26+
"authorAffiliation": {
27+
"value": "University of Stuttgart",
28+
"typeClass": "primitive",
29+
"multiple": false,
30+
"typeName": "authorAffiliation"
31+
}
32+
}
33+
],
34+
"typeClass": "compound",
35+
"multiple": true,
36+
"typeName": "author"
37+
},
38+
{
39+
"value": [
40+
{ "datasetContactEmail" : {
41+
"typeClass": "primitive",
42+
"multiple": false,
43+
"typeName": "datasetContactEmail",
44+
"value" : "jan@mailinator.com"
45+
},
46+
"datasetContactName" : {
47+
"typeClass": "primitive",
48+
"multiple": false,
49+
"typeName": "datasetContactName",
50+
"value": "Range, Jan"
51+
}
52+
}],
53+
"typeClass": "compound",
54+
"multiple": true,
55+
"typeName": "datasetContact"
56+
},
57+
{
58+
"value": [ {
59+
"dsDescriptionValue":{
60+
"value": "A Python module for Dataverse.",
61+
"multiple":false,
62+
"typeClass": "primitive",
63+
"typeName": "dsDescriptionValue"
64+
}}],
65+
"typeClass": "compound",
66+
"multiple": true,
67+
"typeName": "dsDescription"
68+
},
69+
{
70+
"value": [
71+
"Computer and Information Science"
72+
],
73+
"typeClass": "controlledVocabulary",
74+
"multiple": true,
75+
"typeName": "subject"
76+
}
77+
],
78+
"displayName": "Citation Metadata"
79+
}
80+
}
81+
}
82+
}

src/main/java/edu/harvard/iq/dataverse/util/json/JsonParser.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,24 @@ public DatasetVersion parseDatasetVersion(JsonObject obj, DatasetVersion dsv) th
464464
// "license" : "CC0 1.0"
465465
license = parseLicense(obj.getString("license", null));
466466
}
467+
468+
//test to see if license exists in dataset type
469+
//if not set it to null -
470+
//only test if Dataset has a type and if it has custom available licenses
471+
if (dsv.getDataset() != null) {
472+
DatasetType dst = dsv.getDataset().getDatasetType();
473+
if (dst != null && dst.getLicenses() != null && !dst.getLicenses().isEmpty() && license != null) {
474+
boolean invalidLicense = true;
475+
for (License testLicense : dst.getLicenses()) {
476+
if (testLicense.equals(license)) {
477+
invalidLicense = false;
478+
}
479+
}
480+
if (invalidLicense) {
481+
license = null;
482+
}
483+
}
484+
}
467485

468486
if (license == null) {
469487
terms.setLicense(license);

src/test/java/edu/harvard/iq/dataverse/api/DatasetTypesIT.java

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.hamcrest.CoreMatchers.nullValue;
1919
import org.junit.jupiter.api.AfterAll;
2020
import static org.junit.jupiter.api.Assertions.assertEquals;
21+
import static org.junit.jupiter.api.Assertions.assertNull;
2122
import org.junit.jupiter.api.BeforeAll;
2223
import org.junit.jupiter.api.Test;
2324

@@ -522,6 +523,31 @@ public void testUpdateDatasetTypeLinksWithMetadataBlocks() {
522523
listBlocks.prettyPrint();
523524
listBlocks.then().assertThat()
524525
.body("data[0].name", is("citation"));
526+
527+
//Cleanup objects
528+
529+
530+
Long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
531+
532+
System.out.println("doomed: " + doomed);
533+
534+
getTypeById.prettyPrint();
535+
getTypeById.then().assertThat().statusCode(OK.getStatusCode());
536+
537+
System.out.println("deleting type with id " + doomed);
538+
Response typeDeleted = UtilIT.deleteDatasetTypes(doomed, apiToken);
539+
typeDeleted.prettyPrint();
540+
typeDeleted.then().assertThat().statusCode(OK.getStatusCode());
541+
542+
Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
543+
deleteDataverseResponse.prettyPrint();
544+
assertEquals(200, deleteDataverseResponse.getStatusCode());
545+
546+
Response deleteUserResponse = UtilIT.deleteUser(username);
547+
deleteUserResponse.prettyPrint();
548+
assertEquals(200, deleteUserResponse.getStatusCode());
549+
550+
525551
}
526552

527553
@Test
@@ -609,5 +635,82 @@ public void testLinkInstrumentToAstro() {
609635
.body("data[1].fields.astroObject.displayOnCreate", equalTo(false));
610636

611637
}
638+
639+
@Test
640+
public void testCreateDatasetWithCustomType() {
641+
Response createUser = UtilIT.createRandomUser();
642+
createUser.then().assertThat().statusCode(OK.getStatusCode());
643+
String username = UtilIT.getUsernameFromResponse(createUser);
644+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
645+
646+
Response createDataverse = UtilIT.createRandomDataverse(apiToken);
647+
createDataverse.then().assertThat().statusCode(CREATED.getStatusCode());
648+
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverse);
649+
Integer dataverseId = UtilIT.getDataverseIdFromResponse(createDataverse);
650+
651+
UtilIT.setSuperuserStatus(username, true).then().assertThat().statusCode(OK.getStatusCode());
652+
653+
JsonObjectBuilder job = Json.createObjectBuilder();
654+
job.add("name", "testDatasetType");
655+
job.add("linkedMetadataBlocks", Json.createArrayBuilder().add("geospatial"));
656+
job.add("availableLicenses", Json.createArrayBuilder().add("CC0 1.0"));
657+
658+
Response typeAdded = UtilIT.addDatasetType(job.build(), apiToken);
659+
typeAdded.prettyPrint();
660+
661+
typeAdded.then().assertThat().statusCode(OK.getStatusCode());
662+
Response getTypes = UtilIT.getDatasetTypes();
663+
getTypes = UtilIT.getDatasetTypes();
664+
getTypes.prettyPrint();
665+
666+
String pathToJsonFile = "scripts/api/data/dataset-create-new-with-type.json";
667+
668+
Response createDatasetResponse = UtilIT.createDatasetViaNativeApi(dataverseAlias, pathToJsonFile, apiToken);
669+
670+
createDatasetResponse.prettyPrint();
671+
672+
673+
createDatasetResponse.then().assertThat().statusCode(CREATED.getStatusCode());
674+
675+
Integer datasetId = UtilIT.getDatasetIdFromResponse(createDatasetResponse);
676+
String datasetPid = JsonPath.from(createDatasetResponse.getBody().asString()).getString("data.persistentId");
677+
678+
Response getDatasetJson = UtilIT.nativeGet(datasetId, apiToken);
679+
getDatasetJson.prettyPrint();
680+
getDatasetJson.then().assertThat().statusCode(OK.getStatusCode());
681+
String datasetType = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.datasetType");
682+
System.out.println("datasetType: " + datasetType);
683+
assertEquals("testDatasetType", datasetType);
684+
String datasetVerstionState = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.latestVersion.versionState");
685+
assertEquals("DRAFT", datasetVerstionState);
686+
String datasetLicense = JsonPath.from(getDatasetJson.getBody().asString()).getString("data.latestVersion.license");
687+
//License is null because the one in the dataset json does not correspond to the
688+
// available licenses in the dataset type.
689+
assertNull(datasetLicense);
690+
Response deleteDatasetResponse = UtilIT.deleteDatasetViaNativeApi(datasetId, apiToken);
691+
deleteDatasetResponse.prettyPrint();
692+
assertEquals(200, deleteDatasetResponse.getStatusCode());
693+
694+
Long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
695+
696+
System.out.println("doomed: " + doomed);
697+
Response getTypeById = UtilIT.getDatasetType(doomed.toString());
698+
getTypeById.prettyPrint();
699+
getTypeById.then().assertThat().statusCode(OK.getStatusCode());
700+
701+
System.out.println("deleting type with id " + doomed);
702+
Response typeDeleted = UtilIT.deleteDatasetTypes(doomed, apiToken);
703+
typeDeleted.prettyPrint();
704+
typeDeleted.then().assertThat().statusCode(OK.getStatusCode());
705+
706+
Response deleteDataverseResponse = UtilIT.deleteDataverse(dataverseAlias, apiToken);
707+
deleteDataverseResponse.prettyPrint();
708+
assertEquals(200, deleteDataverseResponse.getStatusCode());
709+
710+
Response deleteUserResponse = UtilIT.deleteUser(username);
711+
deleteUserResponse.prettyPrint();
712+
assertEquals(200, deleteUserResponse.getStatusCode());
713+
714+
}
612715

613716
}

0 commit comments

Comments
 (0)