Skip to content

Commit

Permalink
Merge 988572b into 91ddb11
Browse files Browse the repository at this point in the history
  • Loading branch information
sekmiller committed May 26, 2020
2 parents 91ddb11 + 988572b commit 17eac06
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ public LinkDatasetCommand(DataverseRequest aRequest, Dataverse dataverse, Datase
@Override
public DatasetLinkingDataverse execute(CommandContext ctxt) throws CommandException {

if (!linkedDataset.isReleased()) {
throw new IllegalCommandException(BundleUtil.getStringFromBundle("dataset.link.not.published"), this);
if (!linkedDataset.isReleased() && !linkedDataset.isHarvested()) {
throw new IllegalCommandException(BundleUtil.getStringFromBundle("dataset.link.not.available"), this);
}
if (linkedDataset.getOwner().equals(linkingDataverse)) {
throw new IllegalCommandException(BundleUtil.getStringFromBundle("dataset.link.not.to.owner"), this);
Expand Down
1 change: 1 addition & 0 deletions src/main/java/propertyFiles/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,7 @@ dataset.link.save=Save Linked Dataset
dataset.link.not.to.owner=Can't link a dataset to its dataverse
dataset.link.not.to.parent.dataverse=Can't link a dataset to its parent dataverses
dataset.link.not.published=Can't link a dataset that has not been published
dataset.link.not.available=Can't link a dataset that has not been published or is not harvested
dataverse.link.dataverse.choose=Choose which of your dataverses you would like to link this dataverse to.
dataverse.link.dataset.choose=Enter the name of the dataverse you would like to link this dataset to. If you need to remove this link in the future, please contact {0}.
dataverse.link.dataset.none=No linkable dataverses available.
Expand Down
107 changes: 105 additions & 2 deletions src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,26 @@
import edu.harvard.iq.dataverse.authorization.users.PrivateUrlUser;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import java.util.UUID;
import static javax.ws.rs.core.Response.Status.NO_CONTENT;
import org.apache.commons.lang.StringUtils;
import com.jayway.restassured.parsing.Parser;
import static com.jayway.restassured.path.json.JsonPath.with;
import com.jayway.restassured.path.xml.XmlPath;
import edu.harvard.iq.dataverse.Dataset;
import static edu.harvard.iq.dataverse.api.UtilIT.equalToCI;
import static edu.harvard.iq.dataverse.authorization.AuthenticationResponse.Status.ERROR;
import edu.harvard.iq.dataverse.authorization.groups.impl.builtin.AuthenticatedUsers;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObjectBuilder;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
import static javax.ws.rs.core.Response.Status.CREATED;
import static javax.ws.rs.core.Response.Status.FORBIDDEN;
Expand All @@ -50,18 +55,24 @@
import static junit.framework.Assert.assertEquals;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.nullValue;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Before;
import static org.junit.matchers.JUnitMatchers.containsString;

public class DatasetsIT {

private static final Logger logger = Logger.getLogger(DatasetsIT.class.getCanonicalName());



@BeforeClass
public static void setUpClass() {


RestAssured.baseURI = UtilIT.getRestAssuredBaseUri();

Response removeIdentifierGenerationStyle = UtilIT.deleteSetting(SettingsServiceBean.Key.IdentifierGenerationStyle);
Expand Down Expand Up @@ -1936,6 +1947,98 @@ public void testUpdateDatasetVersionWithFiles() throws InterruptedException {
System.out.println("Author username/password: " + authorUsername);

}


@Test
public void testLinkingDatasets() {

Response createUser = UtilIT.createRandomUser();
createUser.prettyPrint();
createUser.then().assertThat()
.statusCode(OK.getStatusCode());
String username = UtilIT.getUsernameFromResponse(createUser);
String apiToken = UtilIT.getApiTokenFromResponse(createUser);

Response createSuperUser = UtilIT.createRandomUser();
createSuperUser.prettyPrint();
createSuperUser.then().assertThat()
.statusCode(OK.getStatusCode());
String superuserUsername = UtilIT.getUsernameFromResponse(createSuperUser);
String superuserApiToken = UtilIT.getApiTokenFromResponse(createSuperUser);
Response makeSuperuser = UtilIT.makeSuperUser(superuserUsername);
makeSuperuser.prettyPrint();
makeSuperuser.then().assertThat()
.statusCode(OK.getStatusCode());

Response createDataverse1 = UtilIT.createRandomDataverse(apiToken);
createDataverse1.prettyPrint();
createDataverse1.then().assertThat()
.statusCode(CREATED.getStatusCode());
String dataverse1Alias = UtilIT.getAliasFromResponse(createDataverse1);

Response createDataset = UtilIT.createRandomDatasetViaNativeApi(dataverse1Alias, apiToken);
createDataset.prettyPrint();
createDataset.then().assertThat()
.statusCode(CREATED.getStatusCode());

Integer datasetId = UtilIT.getDatasetIdFromResponse(createDataset);
String datasetPid = JsonPath.from(createDataset.asString()).getString("data.persistentId");

Response createDataverse2 = UtilIT.createRandomDataverse(apiToken);
createDataverse2.prettyPrint();
createDataverse2.then().assertThat()
.statusCode(CREATED.getStatusCode());
String dataverse2Alias = UtilIT.getAliasFromResponse(createDataverse2);
Integer dataverse2Id = UtilIT.getDatasetIdFromResponse(createDataverse2);
String dataverse2Name = JsonPath.from(createDataverse2.asString()).getString("data.name");

UtilIT.publishDataverseViaNativeApi(dataverse1Alias, apiToken).then().assertThat()
.statusCode(OK.getStatusCode());

// Link dataset to second dataverse.
//should fail if dataset is not published
Response linkDataset = UtilIT.linkDataset(datasetPid, dataverse2Alias, superuserApiToken);
linkDataset.prettyPrint();
linkDataset.then().assertThat()
.body("message", equalTo(BundleUtil.getStringFromBundle("dataset.link.not.available")))
.statusCode(FORBIDDEN.getStatusCode());

UtilIT.publishDatasetViaNativeApi(datasetPid, "major", apiToken).then().assertThat()
.statusCode(OK.getStatusCode());

//Once published you should be able to link it
linkDataset = UtilIT.linkDataset(datasetPid, dataverse2Alias, superuserApiToken);
linkDataset.prettyPrint();
linkDataset.then().assertThat()
.statusCode(OK.getStatusCode());

//Experimental code for trying to trick test into thinking the dataset has been harvested
/*
createDataset = UtilIT.createRandomDatasetViaNativeApi(dataverse1Alias, apiToken);
createDataset.prettyPrint();
createDataset.then().assertThat()
.statusCode(CREATED.getStatusCode());
Integer datasetId2 = UtilIT.getDatasetIdFromResponse(createDataset);
String datasetPid2 = JsonPath.from(createDataset.asString()).getString("data.persistentId");
linkDataset = UtilIT.linkDataset(datasetPid2, dataverse2Alias, superuserApiToken);
linkDataset.prettyPrint();
linkDataset.then().assertThat()
.body("message", equalTo( BundleUtil.getStringFromBundle("dataset.link.not.available")))
.statusCode(FORBIDDEN.getStatusCode());
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
// Do stuff...
entityManager.createNativeQuery("UPDATE dataset SET harvestingclient_id=1 WHERE id="+datasetId2).executeUpdate();
entityManager.getTransaction().commit();
entityManager.close();
UtilIT.linkDataset(datasetId2.toString(), dataverse2Alias, superuserApiToken);
linkDataset.prettyPrint();
linkDataset.then().assertThat()
.statusCode(OK.getStatusCode());
*/
}

}

0 comments on commit 17eac06

Please sign in to comment.