package edu.harvard.iq.dataverse.engine.command.impl; import edu.harvard.iq.dataverse.Dataset; import edu.harvard.iq.dataverse.DatasetServiceBean; import edu.harvard.iq.dataverse.DatasetVersion; import edu.harvard.iq.dataverse.DvObject; import edu.harvard.iq.dataverse.authorization.Permission; import edu.harvard.iq.dataverse.mocks.MocksFactory; import static edu.harvard.iq.dataverse.mocks.MocksFactory.*; 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.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.junit.After; import org.junit.AfterClass; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; /** * * @author michael */ public class CreateDatasetVersionCommandTest { public CreateDatasetVersionCommandTest() { } @BeforeClass public static void setUpClass() { } @AfterClass public static void tearDownClass() { } @Before public void setUp() { } @After public void tearDown() { } @Test public void testSimpleVersionAddition() throws Exception { SimpleDateFormat dateFmt = new SimpleDateFormat("yyyyMMdd"); // Create Dataset Dataset ds = makeDataset(); // Populate the Initial version DatasetVersion dsvInitial = ds.getEditVersion(); dsvInitial.setCreateTime( dateFmt.parse("20001012") ); dsvInitial.setLastUpdateTime( dsvInitial.getLastUpdateTime() ); dsvInitial.setId( MocksFactory.nextId() ); dsvInitial.setReleaseTime( dateFmt.parse("20010101") ); dsvInitial.setVersionState(DatasetVersion.VersionState.RELEASED); dsvInitial.setMinorVersionNumber(0l); dsvInitial.setVersionNumber(1l); // Create version to be added DatasetVersion dsvNew = new DatasetVersion(); dsvNew.setVersionState(DatasetVersion.VersionState.DRAFT); // Execute CreateDatasetVersionCommand sut = new CreateDatasetVersionCommand( makeRequest(), ds, dsvNew ); final MockDatasetServiceBean serviceBean = new MockDatasetServiceBean(); TestDataverseEngine testEngine = new TestDataverseEngine( new TestCommandContext(){ @Override public DatasetServiceBean datasets() { return serviceBean; } } ); testEngine.submit(sut); // asserts assertTrue( serviceBean.storeVersionCalled ); Date dsvCreationDate = dsvNew.getCreateTime(); assertEquals( dsvCreationDate, dsvNew.getLastUpdateTime() ); assertEquals( dsvCreationDate.getTime(), ds.getModificationTime().getTime() ); assertEquals( ds, dsvNew.getDataset() ); assertEquals( dsvNew, ds.getEditVersion() ); Map<DvObject, Set<Permission>> expected = new HashMap<>(); expected.put(ds, Collections.singleton(Permission.AddDataset)); assertEquals(expected, testEngine.getReqiredPermissionsForObjects() ); } @Test(expected=IllegalCommandException.class) public void testCantCreateTwoDraftVersions() throws Exception { DatasetVersion dsvNew = new DatasetVersion(); dsvNew.setVersionState(DatasetVersion.VersionState.DRAFT); // Execute CreateDatasetVersionCommand sut = new CreateDatasetVersionCommand( makeRequest(), makeDataset(), dsvNew ); TestDataverseEngine testEngine = new TestDataverseEngine( new TestCommandContext() ); testEngine.submit(sut); } static class MockDatasetServiceBean extends DatasetServiceBean { boolean storeVersionCalled = false; @Override public DatasetVersion storeVersion(DatasetVersion dsv) { storeVersionCalled = true; dsv.setId( nextId() ); return dsv; } } }