diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java index f71099e30f4..bccf4a8caaf 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Datasets.java @@ -442,16 +442,13 @@ public Response publishDataset(@PathParam("id") String id, @QueryParam("type") S @Path("{id}/move/{targetDataverseAlias}") public Response moveDataset(@PathParam("id") String id, @PathParam("targetDataverseAlias") String targetDataverseAlias) { try{ - User u = findUserOrDie(); - if (!u.isSuperuser()) { - return error(Response.Status.FORBIDDEN, "Not a superuser"); - } - + User u = findUserOrDie(); Dataset ds = findDatasetOrDie(id); Dataverse target = dataverseService.findByAlias(targetDataverseAlias); if (target == null){ return error(Response.Status.BAD_REQUEST, "Target Dataverse not found."); } + //Command requires Super user - it will be tested by the command execCommand(new MoveDatasetCommand( createDataverseRequest(u), ds, target )); diff --git a/src/test/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommandTest.java b/src/test/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommandTest.java index 95eef980b33..046461d1739 100644 --- a/src/test/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommandTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/engine/command/impl/MoveDatasetCommandTest.java @@ -5,9 +5,7 @@ */ package edu.harvard.iq.dataverse.engine.command.impl; -import edu.harvard.iq.dataverse.DataFile; import edu.harvard.iq.dataverse.Dataset; -import edu.harvard.iq.dataverse.DatasetServiceBean; import edu.harvard.iq.dataverse.Dataverse; import edu.harvard.iq.dataverse.DataverseServiceBean; import edu.harvard.iq.dataverse.MetadataBlock; @@ -17,9 +15,9 @@ import edu.harvard.iq.dataverse.engine.TestDataverseEngine; import edu.harvard.iq.dataverse.engine.command.DataverseRequest; import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException; +import edu.harvard.iq.dataverse.engine.command.exception.PermissionException; import static edu.harvard.iq.dataverse.mocks.MocksFactory.makeAuthenticatedUser; import edu.harvard.iq.dataverse.search.IndexServiceBean; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.Future; @@ -40,7 +38,6 @@ import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; @@ -65,42 +62,16 @@ public void setUp() { auth.setSuperuser(true); nobody = makeAuthenticatedUser("Nick", "Nobody"); nobody.setSuperuser(false); - - blockA = new MetadataBlock(); - blockA.setName("blockA"); - blockA.setId(1l); - blockB = new MetadataBlock(); - blockB.setName("blockB"); - blockB.setId(2l); - blockC = new MetadataBlock(); - blockC.setName("blockC"); - blockC.setId(3l); - blockD = new MetadataBlock(); - blockD.setName("blockD"); - blockD.setId(4l); - List aOnly = new ArrayList(); - aOnly.add(blockA); root = new Dataverse(); root.setName("root"); root.setId(1l); - root.setMetadataBlocks(aOnly); childA = new Dataverse(); childA.setName("childA"); childA.setId(2l); - List abOnly = new ArrayList(); - abOnly.add(blockA); - abOnly.add(blockB); - childA.setMetadataBlocks(abOnly); - childA.setMetadataBlockRoot(true); childB = new Dataverse(); childB.setName("childB"); childB.setId(3l); - List bcOnly = new ArrayList(); - bcOnly.add(blockC); - bcOnly.add(blockB); - childB.setMetadataBlocks(bcOnly); - childB.setMetadataBlockRoot(true); grandchildAA = new Dataverse(); grandchildAA.setName("grandchildAA"); @@ -137,266 +108,11 @@ public Future indexDataset(Dataset dataset, boolean doNormalSolrDocClean @Override public EntityManager em() { - return new EntityManager() { - - @Override - public void persist(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T merge(T entity) { - return entity; - } - - @Override - public void remove(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T find(Class entityClass, Object primaryKey) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T find(Class entityClass, Object primaryKey, Map properties) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T find(Class entityClass, Object primaryKey, LockModeType lockMode) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T find(Class entityClass, Object primaryKey, LockModeType lockMode, Map properties) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T getReference(Class entityClass, Object primaryKey) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void flush() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void setFlushMode(FlushModeType flushMode) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public FlushModeType getFlushMode() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void lock(Object entity, LockModeType lockMode) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void lock(Object entity, LockModeType lockMode, Map properties) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void refresh(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } + return new MockEntityManager() { - @Override - public void refresh(Object entity, Map properties) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void refresh(Object entity, LockModeType lockMode) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void refresh(Object entity, LockModeType lockMode, Map properties) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void clear() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void detach(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public boolean contains(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public LockModeType getLockMode(Object entity) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void setProperty(String propertyName, Object value) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Map getProperties() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createQuery(String qlString) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public TypedQuery createQuery(CriteriaQuery criteriaQuery) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createQuery(CriteriaUpdate updateQuery) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createQuery(CriteriaDelete deleteQuery) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public TypedQuery createQuery(String qlString, Class resultClass) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createNamedQuery(String name) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public TypedQuery createNamedQuery(String name, Class resultClass) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createNativeQuery(String sqlString) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createNativeQuery(String sqlString, Class resultClass) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Query createNativeQuery(String sqlString, String resultSetMapping) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public StoredProcedureQuery createNamedStoredProcedureQuery(String name) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public StoredProcedureQuery createStoredProcedureQuery(String procedureName) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void joinTransaction() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public boolean isJoinedToTransaction() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public T unwrap(Class cls) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Object getDelegate() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public void close() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public boolean isOpen() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public EntityTransaction getTransaction() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public EntityManagerFactory getEntityManagerFactory() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public CriteriaBuilder getCriteriaBuilder() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public Metamodel getMetamodel() { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public EntityGraph createEntityGraph(Class rootType) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public EntityGraph createEntityGraph(String graphName) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public EntityGraph getEntityGraph(String graphName) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - @Override - public List> getEntityGraphs(Class entityClass) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } }; } - }); } @@ -404,27 +120,309 @@ public List> getEntityGraphs(Class entityClass) { * Moving ChildB to ChildA * @throws Exception - should not throw an exception */ - @Test - public void testValidMove() throws Exception { - - DataverseRequest aRequest = new DataverseRequest(auth, httpRequest); - testEngine.submit(new MoveDatasetCommand(aRequest, moved, childA)); - - assertEquals( childA, moved.getOwner() ); - - } + @Test + public void testValidMove() throws Exception { + + DataverseRequest aRequest = new DataverseRequest(auth, httpRequest); + testEngine.submit(new MoveDatasetCommand(aRequest, moved, childA)); + + assertEquals(childA, moved.getOwner()); + + } /** * Moving DS to its owning DV * @throws java.lang.Exception */ - @Test( expected=IllegalCommandException.class ) - public void testInvalidMove() throws Exception { - - DataverseRequest aRequest = new DataverseRequest(auth, httpRequest); - testEngine.submit( - new MoveDatasetCommand(aRequest, moved, root)); - fail(); - } - + @Test(expected = IllegalCommandException.class) + public void testInvalidMove() throws Exception { + + DataverseRequest aRequest = new DataverseRequest(auth, httpRequest); + testEngine.submit( + new MoveDatasetCommand(aRequest, moved, root)); + fail(); + } + + /** + * Moving DS Without Being Super User + * Fails due to Permission Exception + * @throws java.lang.Exception + */ + @Test(expected = PermissionException.class) + public void testNotSuperUser() throws Exception { + + DataverseRequest aRequest = new DataverseRequest(nobody, httpRequest); + testEngine.submit( + new MoveDatasetCommand(aRequest, moved, root)); + fail(); + } + + + private static class EntityManagerImpl implements EntityManager { + + @Override + public void persist(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T merge(T entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void remove(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T find(Class entityClass, Object primaryKey) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T find(Class entityClass, Object primaryKey, Map properties) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T find(Class entityClass, Object primaryKey, LockModeType lockMode) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T find(Class entityClass, Object primaryKey, LockModeType lockMode, Map properties) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T getReference(Class entityClass, Object primaryKey) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void flush() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void setFlushMode(FlushModeType flushMode) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public FlushModeType getFlushMode() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void lock(Object entity, LockModeType lockMode) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void lock(Object entity, LockModeType lockMode, Map properties) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void refresh(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void refresh(Object entity, Map properties) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void refresh(Object entity, LockModeType lockMode) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void refresh(Object entity, LockModeType lockMode, Map properties) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void clear() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void detach(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean contains(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public LockModeType getLockMode(Object entity) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void setProperty(String propertyName, Object value) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Map getProperties() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createQuery(String qlString) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public TypedQuery createQuery(CriteriaQuery criteriaQuery) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createQuery(CriteriaUpdate updateQuery) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createQuery(CriteriaDelete deleteQuery) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public TypedQuery createQuery(String qlString, Class resultClass) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createNamedQuery(String name) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public TypedQuery createNamedQuery(String name, Class resultClass) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createNativeQuery(String sqlString) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createNativeQuery(String sqlString, Class resultClass) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Query createNativeQuery(String sqlString, String resultSetMapping) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public StoredProcedureQuery createNamedStoredProcedureQuery(String name) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public StoredProcedureQuery createStoredProcedureQuery(String procedureName) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void joinTransaction() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean isJoinedToTransaction() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public T unwrap(Class cls) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Object getDelegate() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void close() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean isOpen() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public EntityTransaction getTransaction() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public EntityManagerFactory getEntityManagerFactory() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public CriteriaBuilder getCriteriaBuilder() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Metamodel getMetamodel() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public EntityGraph createEntityGraph(Class rootType) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public EntityGraph createEntityGraph(String graphName) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public EntityGraph getEntityGraph(String graphName) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public List> getEntityGraphs(Class entityClass) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + } + + private static class MockEntityManager extends EntityManagerImpl { + + @Override + public T merge(T entity) { + return entity; + } + + } }