Skip to content

Commit e8e5abf

Browse files
committed
#10520 add/update tests
1 parent 0c40e74 commit e8e5abf

3 files changed

Lines changed: 153 additions & 19 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/api/Datasets.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5308,31 +5308,35 @@ public Response addDatasetType(@Context ContainerRequestContext crc, String json
53085308
nameIn = datasetTypeObj.getString("name");
53095309

53105310
JsonArray arr = datasetTypeObj.getJsonArray("linkedMetadataBlocks");
5311-
for (JsonString jsonValue : arr.getValuesAs(JsonString.class)) {
5312-
String name = jsonValue.getString();
5313-
MetadataBlock metadataBlock = metadataBlockSvc.findByName(name);
5314-
if (metadataBlock != null) {
5315-
metadataBlocksToSave.add(metadataBlock);
5316-
datasetTypesAfter.add(name);
5317-
} else {
5318-
String availableBlocks = metadataBlockSvc.listMetadataBlocks().stream().map(MetadataBlock::getName).collect(Collectors.joining(", "));
5319-
return badRequest("Metadata block not found: " + name + ". Available metadata blocks: " + availableBlocks);
5311+
if (arr != null && !arr.isEmpty()) {
5312+
for (JsonString jsonValue : arr.getValuesAs(JsonString.class)) {
5313+
String name = jsonValue.getString();
5314+
MetadataBlock metadataBlock = metadataBlockSvc.findByName(name);
5315+
if (metadataBlock != null) {
5316+
metadataBlocksToSave.add(metadataBlock);
5317+
datasetTypesAfter.add(name);
5318+
} else {
5319+
String availableBlocks = metadataBlockSvc.listMetadataBlocks().stream().map(MetadataBlock::getName).collect(Collectors.joining(", "));
5320+
return badRequest("Metadata block not found: " + name + ". Available metadata blocks: " + availableBlocks);
5321+
}
53205322
}
53215323
}
5322-
5324+
53235325
arr = datasetTypeObj.getJsonArray("availableLicenses");
5324-
for (JsonString jsonValue : arr.getValuesAs(JsonString.class)) {
5325-
String name = jsonValue.getString();
5326-
License license = licenseSvc.getByNameOrUri(name);
5327-
if (license != null) {
5328-
licensesToSave.add(license);
5329-
} else {
5330-
String availableLicenses = licenseSvc.listAllActive().stream().map(License::getName).collect(Collectors.joining(", "));
5331-
return badRequest("License not found: " + name + ". Available licenses: " + availableLicenses);
5326+
if (arr != null && !arr.isEmpty()) {
5327+
for (JsonString jsonValue : arr.getValuesAs(JsonString.class)) {
5328+
String name = jsonValue.getString();
5329+
License license = licenseSvc.getByNameOrUri(name);
5330+
if (license != null) {
5331+
licensesToSave.add(license);
5332+
} else {
5333+
String availableLicenses = licenseSvc.listAllActive().stream().map(License::getName).collect(Collectors.joining(", "));
5334+
return badRequest("License not found: " + name + ". Available licenses: " + availableLicenses);
5335+
}
53325336
}
5337+
53335338
}
53345339

5335-
53365340
} catch (JsonParsingException ex) {
53375341
return error(BAD_REQUEST, "Problem parsing supplied JSON: " + ex.getLocalizedMessage());
53385342
}

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

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
import io.restassured.path.json.JsonPath;
66
import io.restassured.response.Response;
77
import jakarta.json.Json;
8+
import jakarta.json.JsonObjectBuilder;
89
import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST;
910
import static jakarta.ws.rs.core.Response.Status.CREATED;
1011
import static jakarta.ws.rs.core.Response.Status.FORBIDDEN;
1112
import static jakarta.ws.rs.core.Response.Status.OK;
1213
import java.util.UUID;
1314
import org.hamcrest.CoreMatchers;
15+
import static org.hamcrest.CoreMatchers.containsString;
1416
import static org.hamcrest.CoreMatchers.equalTo;
1517
import static org.hamcrest.CoreMatchers.is;
1618
import static org.hamcrest.CoreMatchers.nullValue;
@@ -277,6 +279,116 @@ public void testAddAndDeleteDatasetType() {
277279
typeDeleted.then().assertThat().statusCode(OK.getStatusCode());
278280

279281
}
282+
283+
@Test
284+
public void testAddDatasetTypeWithMDBLicense(){
285+
286+
Response createUser = UtilIT.createRandomUser();
287+
createUser.then().assertThat().statusCode(OK.getStatusCode());
288+
String username = UtilIT.getUsernameFromResponse(createUser);
289+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
290+
UtilIT.setSuperuserStatus(username, true).then().assertThat().statusCode(OK.getStatusCode());
291+
292+
JsonObjectBuilder job = Json.createObjectBuilder();
293+
job.add("name", "testDatasetType");
294+
job.add("linkedMetadataBlocks", Json.createArrayBuilder().add("geospatial"));
295+
job.add("availableLicenses", Json.createArrayBuilder().add("CC0 1.0"));
296+
297+
Response typeAdded = UtilIT.addDatasetType(job.build(), apiToken);
298+
typeAdded.prettyPrint();
299+
300+
typeAdded.then().assertThat().statusCode(OK.getStatusCode());
301+
302+
Long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
303+
304+
System.out.println("doomed: " + doomed);
305+
Response getTypeById = UtilIT.getDatasetType(doomed.toString());
306+
getTypeById.prettyPrint();
307+
getTypeById.then().assertThat().statusCode(OK.getStatusCode());
308+
309+
System.out.println("deleting type with id " + doomed);
310+
Response typeDeleted = UtilIT.deleteDatasetTypes(doomed, apiToken);
311+
typeDeleted.prettyPrint();
312+
typeDeleted.then().assertThat().statusCode(OK.getStatusCode());
313+
314+
//bad metadatablock name
315+
job = Json.createObjectBuilder();
316+
job.add("name", "testDatasetType");
317+
job.add("linkedMetadataBlocks", Json.createArrayBuilder().add("geospatialXXX"));
318+
job.add("availableLicenses", Json.createArrayBuilder().add("CC0 1.0"));
319+
320+
typeAdded = UtilIT.addDatasetType(job.build(), apiToken);
321+
typeAdded.prettyPrint();
322+
323+
typeAdded.then().assertThat()
324+
.statusCode(BAD_REQUEST.getStatusCode())
325+
.body("message", containsString("Metadata block not found:"));
326+
327+
job = Json.createObjectBuilder();
328+
job.add("name", "testDatasetType");
329+
job.add("linkedMetadataBlocks", Json.createArrayBuilder().add("geospatial"));
330+
job.add("availableLicenses", Json.createArrayBuilder().add("CC0 12.0"));
331+
332+
typeAdded = UtilIT.addDatasetType(job.build(), apiToken);
333+
typeAdded.prettyPrint();
334+
typeAdded.then().assertThat()
335+
.statusCode(BAD_REQUEST.getStatusCode())
336+
.body("message", containsString("License not found:"));
337+
338+
}
339+
340+
@Test
341+
public void testUpdateDatasetTypeWithLicense(){
342+
343+
Response createUser = UtilIT.createRandomUser();
344+
createUser.then().assertThat().statusCode(OK.getStatusCode());
345+
String username = UtilIT.getUsernameFromResponse(createUser);
346+
String apiToken = UtilIT.getApiTokenFromResponse(createUser);
347+
UtilIT.setSuperuserStatus(username, true).then().assertThat().statusCode(OK.getStatusCode());
348+
349+
JsonObjectBuilder job = Json.createObjectBuilder();
350+
job.add("name", "testDatasetType");
351+
352+
Response typeAdded = UtilIT.addDatasetType(job.build(), apiToken);
353+
typeAdded.prettyPrint();
354+
355+
typeAdded.then().assertThat().statusCode(OK.getStatusCode());
356+
357+
String availableLicenseArray = """
358+
["CC0 1.0"]
359+
""";
360+
361+
Response addCC0 = UtilIT.updateDatasetTypeAvailableLicense("testDatasetType", availableLicenseArray, apiToken);
362+
addCC0.prettyPrint();
363+
addCC0.then().assertThat().
364+
statusCode(OK.getStatusCode())
365+
.body("data.availableLicenses.after[0]", CoreMatchers.is("CC0 1.0"));
366+
367+
368+
String badAvailableLicenseArray = """
369+
["CC0 xx.0"]
370+
""";
371+
372+
addCC0 = UtilIT.updateDatasetTypeAvailableLicense("testDatasetType", badAvailableLicenseArray, apiToken);
373+
addCC0.prettyPrint();
374+
addCC0.then().assertThat().
375+
statusCode(BAD_REQUEST.getStatusCode())
376+
.body("message", containsString("License not found:"));
377+
378+
379+
Long doomed = JsonPath.from(typeAdded.getBody().asString()).getLong("data.id");
380+
381+
System.out.println("doomed: " + doomed);
382+
Response getTypeById = UtilIT.getDatasetType(doomed.toString());
383+
getTypeById.prettyPrint();
384+
getTypeById.then().assertThat().statusCode(OK.getStatusCode());
385+
386+
System.out.println("deleting type with id " + doomed);
387+
Response typeDeleted = UtilIT.deleteDatasetTypes(doomed, apiToken);
388+
typeDeleted.prettyPrint();
389+
typeDeleted.then().assertThat().statusCode(OK.getStatusCode());
390+
391+
}
280392

281393
@Test
282394
public void testUpdateDatasetTypeLinksWithMetadataBlocks() {

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4483,6 +4483,17 @@ static Response addDatasetType(String jsonIn, String apiToken) {
44834483
.contentType(ContentType.JSON)
44844484
.post("/api/datasets/datasetTypes");
44854485
}
4486+
4487+
static Response addDatasetType(JsonObject jsonObject, String apiToken) {
4488+
RequestSpecification requestSpecification = given();
4489+
if (apiToken != null) {
4490+
requestSpecification.header(UtilIT.API_TOKEN_HTTP_HEADER, apiToken);
4491+
}
4492+
return requestSpecification
4493+
.body(jsonObject.toString())
4494+
.contentType(ContentType.JSON)
4495+
.post("/api/datasets/datasetTypes");
4496+
}
44864497

44874498
static Response deleteDatasetTypes(long doomed, String apiToken) {
44884499
return given()
@@ -4496,6 +4507,13 @@ static Response updateDatasetTypeLinksWithMetadataBlocks(String idOrName, String
44964507
.body(jsonArrayOfMetadataBlocks)
44974508
.put("/api/datasets/datasetTypes/" + idOrName);
44984509
}
4510+
4511+
static Response updateDatasetTypeAvailableLicense(String idOrName, String jsonArrayOfLicenses, String apiToken) {
4512+
return given()
4513+
.header(API_TOKEN_HTTP_HEADER, apiToken)
4514+
.body(jsonArrayOfLicenses)
4515+
.put("/api/datasets/datasetTypes/" + idOrName + "/licenses");
4516+
}
44994517

45004518
static Response registerOidcUser(String jsonIn, String bearerToken) {
45014519
return given()

0 commit comments

Comments
 (0)