package edu.harvard.iq.dataverse.engine.command.impl;
import edu.harvard.iq.dataverse.engine.command.impl.MoveDataverseCommand;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DataverseServiceBean;
import edu.harvard.iq.dataverse.engine.DataverseEngine;
import edu.harvard.iq.dataverse.engine.TestCommandContext;
import edu.harvard.iq.dataverse.engine.TestDataverseEngine;
import edu.harvard.iq.dataverse.engine.command.exception.IllegalCommandException;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
/**
*
* @author michael
*/
public class MoveDataverseCommandTest {
Dataverse root, childA, childB, grandchildAA;
DataverseEngine testEngine;
@Before
public void setUp() {
root = new Dataverse();
root.setName("root");
root.setId(1l);
childA = new Dataverse();
childA.setName( "childA" );
childA.setId(2l);
childB = new Dataverse();
childB.setName( "childB" );
childB.setId(3l);
grandchildAA = new Dataverse();
grandchildAA.setName( "grandchildAA" );
grandchildAA.setId(4l);
childA.setOwner( root );
childB.setOwner( root );
grandchildAA.setOwner( childA );
testEngine = new TestDataverseEngine( new TestCommandContext(){
@Override
public DataverseServiceBean dataverses() {
return new DataverseServiceBean(){
@Override
public Dataverse save(Dataverse dataverse) {
// no-op. The superclass accesses databases which we don't have.
return dataverse;
}};}});
}
/**
* Moving ChildB to ChildA
* @throws Exception - should not throw an exception
*/
@Test
public void testValidMove() throws Exception {
testEngine.submit(
new MoveDataverseCommand(null, childB, childA));
assertEquals( childA, childB.getOwner() );
assertEquals( Arrays.asList(root, childA), childB.getOwners() );
}
/**
* Moving ChildA to its child (illegal).
*/
@Test( expected=IllegalCommandException.class )
public void testInvalidMove() throws Exception {
testEngine.submit(
new MoveDataverseCommand(null, childA, grandchildAA));
fail();
}
}