|
1 | 1 | package edu.harvard.iq.dataverse.api; |
2 | 2 |
|
| 3 | +import static edu.harvard.iq.dataverse.api.ApiConstants.DS_VERSION_LATEST_PUBLISHED; |
| 4 | + |
3 | 5 | import edu.harvard.iq.dataverse.dataset.DatasetType; |
| 6 | +import edu.harvard.iq.dataverse.util.StringUtil; |
4 | 7 | import edu.harvard.iq.dataverse.util.json.JsonUtil; |
5 | 8 | import edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder; |
6 | 9 | import io.restassured.RestAssured; |
@@ -344,4 +347,212 @@ public void testCreateReviewRequiredFields() { |
344 | 347 |
|
345 | 348 | } |
346 | 349 |
|
| 350 | + @Test |
| 351 | + public void testLocalReviews() { |
| 352 | + |
| 353 | + Response createUserDatasetAuthor = UtilIT.createRandomUser(); |
| 354 | + createUserDatasetAuthor.prettyPrint(); |
| 355 | + createUserDatasetAuthor.then().assertThat() |
| 356 | + .statusCode(OK.getStatusCode()); |
| 357 | + String usernameDatasetAuthor = UtilIT.getUsernameFromResponse(createUserDatasetAuthor); |
| 358 | + String apiTokenDatasetAuthor = UtilIT.getApiTokenFromResponse(createUserDatasetAuthor); |
| 359 | + |
| 360 | + Response createCollectionOfDatasets = UtilIT.createRandomDataverse(apiTokenDatasetAuthor); |
| 361 | + createCollectionOfDatasets.prettyPrint(); |
| 362 | + createCollectionOfDatasets.then().assertThat() |
| 363 | + .statusCode(CREATED.getStatusCode()); |
| 364 | + |
| 365 | + String collectionAliasDatasets = UtilIT.getAliasFromResponse(createCollectionOfDatasets); |
| 366 | + String datasetJson = """ |
| 367 | + { |
| 368 | + "http://purl.org/dc/terms/title": "Pediatric Asthma", |
| 369 | + "http://purl.org/dc/terms/creator": { |
| 370 | + "https://dataverse.org/schema/citation/authorName": "Sullivan, James" |
| 371 | + }, |
| 372 | + "https://dataverse.org/schema/citation/datasetContact": { |
| 373 | + "https://dataverse.org/schema/citation/datasetContactEmail": "sully@mailinator.com" |
| 374 | + }, |
| 375 | + "https://dataverse.org/schema/citation/dsDescription": { |
| 376 | + "https://dataverse.org/schema/citation/dsDescriptionValue": "A dataset about pediatric asthma." |
| 377 | + }, |
| 378 | + "http://purl.org/dc/terms/subject": "Medicine, Health and Life Sciences" |
| 379 | + } |
| 380 | + """; |
| 381 | + |
| 382 | + Response createDataset = UtilIT.createDatasetSemantic(collectionAliasDatasets, datasetJson, |
| 383 | + apiTokenDatasetAuthor); |
| 384 | + createDataset.prettyPrint(); |
| 385 | + createDataset.then().assertThat().statusCode(CREATED.getStatusCode()); |
| 386 | + |
| 387 | + Integer datasetId = UtilIT.getDatasetIdFromResponse(createDataset); |
| 388 | + String datasetPid = UtilIT.getDatasetPersistentIdFromResponse(createDataset); |
| 389 | + |
| 390 | + Response setLicensetoCC0 = UtilIT.updateLicense(datasetId.toString(), "{ \"name\": \"CC0 1.0\" }", |
| 391 | + apiTokenDatasetAuthor); |
| 392 | + setLicensetoCC0.prettyPrint(); |
| 393 | + setLicensetoCC0.then().assertThat().statusCode(OK.getStatusCode()); |
| 394 | + |
| 395 | + Response publishCollection = UtilIT.publishDataverseViaNativeApi(collectionAliasDatasets, |
| 396 | + apiTokenDatasetAuthor); |
| 397 | + // publishCollection.prettyPrint(); |
| 398 | + publishCollection.then().assertThat() |
| 399 | + .statusCode(OK.getStatusCode()); |
| 400 | + |
| 401 | + Response publishDataset = UtilIT.publishDatasetViaNativeApi(datasetId, "major", apiTokenDatasetAuthor); |
| 402 | + publishDataset.prettyPrint(); |
| 403 | + publishDataset.then().assertThat() |
| 404 | + .statusCode(OK.getStatusCode()); |
| 405 | + |
| 406 | + Response createUserReviewer = UtilIT.createRandomUser(); |
| 407 | + createUserReviewer.prettyPrint(); |
| 408 | + createUserReviewer.then().assertThat() |
| 409 | + .statusCode(OK.getStatusCode()); |
| 410 | + String usernameReviewer = UtilIT.getUsernameFromResponse(createUserReviewer); |
| 411 | + String apiTokenReviewer = UtilIT.getApiTokenFromResponse(createUserReviewer); |
| 412 | + |
| 413 | + Response getDataset = UtilIT.nativeGetUsingPersistentId(datasetPid, apiTokenReviewer); |
| 414 | + getDataset.prettyPrint(); |
| 415 | + getDataset.then().assertThat().statusCode(OK.getStatusCode()); |
| 416 | + |
| 417 | + String datasetPersistentUrl = JsonPath.from(getDataset.body().asString()).getString("data.persistentUrl"); |
| 418 | + String datasetTitle = JsonPath.from(getDataset.body().asString()) |
| 419 | + .getString("data.latestVersion.metadataBlocks.citation.fields[0].value"); |
| 420 | + |
| 421 | + Response getCitation = UtilIT.getDatasetVersionCitation(datasetId, DS_VERSION_LATEST_PUBLISHED, false, |
| 422 | + apiTokenReviewer); |
| 423 | + getCitation.prettyPrint(); |
| 424 | + getCitation.then().assertThat().statusCode(OK.getStatusCode()); |
| 425 | + String datasetCitationHtml = JsonPath.from(getCitation.getBody().asString()).getString("data.message"); |
| 426 | + String datasetCitationText = StringUtil.html2text(datasetCitationHtml); |
| 427 | + |
| 428 | + Response createCollectionOfReviews = UtilIT.createRandomDataverse(apiTokenReviewer); |
| 429 | + createCollectionOfReviews.prettyPrint(); |
| 430 | + createCollectionOfReviews.then().assertThat() |
| 431 | + .statusCode(CREATED.getStatusCode()); |
| 432 | + |
| 433 | + String collectionAliasReviews = UtilIT.getAliasFromResponse(createCollectionOfReviews); |
| 434 | + |
| 435 | + Response setAllowedDatasetTypes = UtilIT.setCollectionAttribute(collectionAliasReviews, "allowedDatasetTypes", |
| 436 | + "review", apiTokenSuperuser); |
| 437 | + setAllowedDatasetTypes.prettyPrint(); |
| 438 | + setAllowedDatasetTypes.then().assertThat() |
| 439 | + .statusCode(OK.getStatusCode()) |
| 440 | + .body("data.allowedDatasetTypes[0].name", is("review")) |
| 441 | + .body("data.allowedDatasetTypes[0].displayName", is("Review")) |
| 442 | + .body("data.allowedDatasetTypes[0].description", |
| 443 | + is("A review of a dataset compiled by the expert community.")); |
| 444 | + |
| 445 | + String itemReviewedTitle = datasetTitle; |
| 446 | + String itemReviewedUrl = datasetPersistentUrl; |
| 447 | + String itemReviewedCitation = datasetCitationHtml; |
| 448 | + String reviewTitle = "Review of " + itemReviewedTitle; |
| 449 | + String authorName = "Wazowski, Mike"; |
| 450 | + String authorEmail = "mwazowski@mailinator.com"; |
| 451 | + JsonObjectBuilder jsonForCreatingReview = Json.createObjectBuilder() |
| 452 | + /** |
| 453 | + * See above where this type is added to the installation and |
| 454 | + * therefore available for use. |
| 455 | + */ |
| 456 | + .add("datasetType", DatasetType.DATASET_TYPE_REVIEW) |
| 457 | + .add("datasetVersion", Json.createObjectBuilder() |
| 458 | + .add("license", Json.createObjectBuilder() |
| 459 | + .add("name", "CC0 1.0") |
| 460 | + .add("uri", "http://creativecommons.org/publicdomain/zero/1.0")) |
| 461 | + .add("metadataBlocks", Json.createObjectBuilder() |
| 462 | + .add("citation", Json.createObjectBuilder() |
| 463 | + .add("fields", Json.createArrayBuilder() |
| 464 | + .add(Json.createObjectBuilder() |
| 465 | + .add("typeName", "title") |
| 466 | + .add("value", reviewTitle) |
| 467 | + .add("typeClass", "primitive") |
| 468 | + .add("multiple", false)) |
| 469 | + .add(Json.createObjectBuilder() |
| 470 | + .add("value", Json.createArrayBuilder() |
| 471 | + .add(Json.createObjectBuilder() |
| 472 | + .add("authorName", |
| 473 | + Json.createObjectBuilder() |
| 474 | + .add("value", authorName) |
| 475 | + .add("typeClass", "primitive") |
| 476 | + .add("multiple", false) |
| 477 | + .add("typeName", |
| 478 | + "authorName")))) |
| 479 | + .add("typeClass", "compound") |
| 480 | + .add("multiple", true) |
| 481 | + .add("typeName", "author")) |
| 482 | + .add(Json.createObjectBuilder() |
| 483 | + .add("value", Json.createArrayBuilder() |
| 484 | + .add(Json.createObjectBuilder() |
| 485 | + .add("datasetContactEmail", |
| 486 | + Json.createObjectBuilder() |
| 487 | + .add("value", authorEmail) |
| 488 | + .add("typeClass", "primitive") |
| 489 | + .add("multiple", false) |
| 490 | + .add("typeName", |
| 491 | + "datasetContactEmail")))) |
| 492 | + .add("typeClass", "compound") |
| 493 | + .add("multiple", true) |
| 494 | + .add("typeName", "datasetContact")) |
| 495 | + .add(Json.createObjectBuilder() |
| 496 | + .add("value", Json.createArrayBuilder() |
| 497 | + .add(Json.createObjectBuilder() |
| 498 | + .add("dsDescriptionValue", |
| 499 | + Json.createObjectBuilder() |
| 500 | + .add("value", |
| 501 | + "This is a review of a dataset.") |
| 502 | + .add("typeClass", "primitive") |
| 503 | + .add("multiple", false) |
| 504 | + .add("typeName", |
| 505 | + "dsDescriptionValue")))) |
| 506 | + .add("typeClass", "compound") |
| 507 | + .add("multiple", true) |
| 508 | + .add("typeName", "dsDescription")) |
| 509 | + .add(Json.createObjectBuilder() |
| 510 | + .add("value", Json.createArrayBuilder() |
| 511 | + .add("Medicine, Health and Life Sciences")) |
| 512 | + .add("typeClass", "controlledVocabulary") |
| 513 | + .add("multiple", true) |
| 514 | + .add("typeName", "subject")) |
| 515 | + .add(Json.createObjectBuilder() |
| 516 | + .add("value", Json.createObjectBuilder() |
| 517 | + .add("itemReviewedUrl", |
| 518 | + Json.createObjectBuilder() |
| 519 | + .add("value", itemReviewedUrl) |
| 520 | + .add("typeClass", "primitive") |
| 521 | + .add("multiple", false) |
| 522 | + .add("typeName", "itemReviewedUrl")) |
| 523 | + .add("itemReviewedType", |
| 524 | + Json.createObjectBuilder() |
| 525 | + .add("value", "Dataset") |
| 526 | + .add("typeClass", |
| 527 | + "controlledVocabulary") |
| 528 | + .add("multiple", false) |
| 529 | + .add("typeName", "itemReviewedType")) |
| 530 | + .add("itemReviewedCitation", |
| 531 | + Json.createObjectBuilder() |
| 532 | + .add("value", itemReviewedCitation) |
| 533 | + .add("typeClass", "primitive") |
| 534 | + .add("multiple", false) |
| 535 | + .add("typeName", |
| 536 | + "itemReviewedCitation"))) |
| 537 | + .add("typeClass", "compound") |
| 538 | + .add("multiple", false) |
| 539 | + .add("typeName", "itemReviewed")))))); |
| 540 | + |
| 541 | + Response createReview = UtilIT.createDataset(collectionAliasReviews, jsonForCreatingReview, apiTokenReviewer); |
| 542 | + createReview.prettyPrint(); |
| 543 | + createReview.then().assertThat().statusCode(CREATED.getStatusCode()); |
| 544 | + Integer reviewId = UtilIT.getDatasetIdFromResponse(createReview); |
| 545 | + String reviewPid = JsonPath.from(createReview.getBody().asString()).getString("data.persistentId"); |
| 546 | + |
| 547 | + Response publishCollectionReviews = UtilIT.publishDataverseViaNativeApi(collectionAliasReviews, |
| 548 | + apiTokenReviewer); |
| 549 | + publishCollectionReviews.then().assertThat() |
| 550 | + .statusCode(OK.getStatusCode()); |
| 551 | + |
| 552 | + Response publishReview = UtilIT.publishDatasetViaNativeApi(reviewId, "major", apiTokenReviewer); |
| 553 | + publishReview.then().assertThat() |
| 554 | + .statusCode(OK.getStatusCode()); |
| 555 | + |
| 556 | + } |
| 557 | + |
347 | 558 | } |
0 commit comments