package com.constellio.model.services.contents;
import static junit.framework.TestCase.fail;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.model.entities.records.ContentVersion;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.contents.ContentImplRuntimeException.ContentImplRuntimeException_InvalidArgument;
import com.constellio.model.utils.Lazy;
import com.constellio.sdk.tests.ConstellioTest;
public class ContentImplTest extends ConstellioTest {
@Mock InputStream inputStream;
String aliceId = "aliceId";
String bobId = "bobId";
String charlesId = "charlesId";
String dakotaId = "dakotaId";
@Mock User alice;
@Mock User bob;
@Mock User charles;
@Mock User dakota;
String contentId1 = aString();
String contentId2 = aString();
String contentId53 = aString();
long zeLength = aLong();
long zeFirstLength = aLong();
long zeSecondLength = aLong();
long zeNewLength = aLong();
long zeVeryNewLength = aLong();
LocalDateTime smashOClock = new LocalDateTime().minusHours(4);
ContentVersion firstHistoryVersion = new ContentVersion(
new ContentVersionDataSummary("zeFirstHash", "zeFirstMime", zeFirstLength), "zeFirstFile.pdf", "0.1", bobId,
smashOClock, null);
LocalDateTime meetingOClock = new LocalDateTime().minusHours(4);
LocalDateTime shishOClock = new LocalDateTime().minusHours(2);
ContentVersion currentVersion = new ContentVersion(new ContentVersionDataSummary("zeCurrentHash", "zeMime", zeLength),
"zeFile.pdf", "1.0", charlesId, shishOClock, null);
LocalDateTime teaOClock = new LocalDateTime().minusHours(1);
ContentVersion modifiedCheckedOut = new ContentVersion(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength),
"zeNewFile.pdf", "1.1", aliceId, teaOClock, null);
LocalDateTime tockOClock = new LocalDateTime().minusHours(1);
@Mock Lazy<List<ContentVersion>> history;
ContentImpl content;
@Before
public void setUp()
throws Exception {
when(alice.getId()).thenReturn(aliceId);
when(bob.getId()).thenReturn(bobId);
when(charles.getId()).thenReturn(charlesId);
when(dakota.getId()).thenReturn(dakotaId);
when(history.get()).thenReturn(Arrays.asList(firstHistoryVersion));
}
@Test
public void whenCreatingContentImplThenHistoryIsLazyLoadedAndNotDirty()
throws Exception {
givenNonCheckedOutContent();
verify(history, never()).get();
assertThat(content.isDirty()).isFalse();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
}
@Test
public void whenCreatingContentImplThenHasCorrectInfos()
throws Exception {
givenModifiedCheckedOutContent();
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(charlesId);
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(shishOClock);
assertThat(content.getCurrentVersion().getFilename()).isEqualTo("zeFile.pdf");
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.0");
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeCurrentHash");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeLength);
assertThat(content.getHistoryVersions().get(0).getModifiedBy()).isEqualTo(bobId);
assertThat(content.getHistoryVersions().get(0).getLastModificationDateTime()).isEqualTo(smashOClock);
assertThat(content.getHistoryVersions().get(0).getFilename()).isEqualTo("zeFirstFile.pdf");
assertThat(content.getHistoryVersions().get(0).getVersion()).isEqualTo("0.1");
assertThat(content.getHistoryVersions().get(0).getHash()).isEqualTo("zeFirstHash");
assertThat(content.getHistoryVersions().get(0).getMimetype()).isEqualTo("zeFirstMime");
assertThat(content.getHistoryVersions().get(0).getLength()).isEqualTo(zeFirstLength);
assertThat(content.getCurrentCheckedOutVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentCheckedOutVersion().getLastModificationDateTime()).isEqualTo(teaOClock);
assertThat(content.getCurrentCheckedOutVersion().getFilename()).isEqualTo("zeNewFile.pdf");
assertThat(content.getCurrentCheckedOutVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentCheckedOutVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getCurrentCheckedOutVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentCheckedOutVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCheckoutUserId()).isEqualTo(aliceId);
assertThat(content.getCheckoutDateTime()).isEqualTo(teaOClock);
}
@Test
public void givenAddedNewContentWhenSetVersionAndMimeTypeThenNewCurrentVersionAndPreviousCurrentVersionInHistory()
throws Exception {
givenNonCheckedOutContent();
givenTimeIs(meetingOClock);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCurrentVersion().getFilename()).isEqualTo("zeFile.pdf");
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
}
@Test
public void whenContentIsCheckedOutThenCheckedOutContentIsSameAsCurrentVersion()
throws Exception {
givenNonCheckedOutContent();
givenTimeIs(shishOClock);
content.checkOut(alice);
verify(history, never()).get();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getCurrentCheckedOutVersion()).isEqualTo(currentVersion);
assertThat(content.getCheckoutUserId()).isEqualTo(aliceId);
assertThat(content.getCheckoutDateTime()).isEqualTo(shishOClock);
}
@Test
public void givenAddedNewContentToCheckedOutContentWhenSetVersionAndMimeTypeThenNewCurrentVersionAndPreviousCurrentVersionInHistory()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(meetingOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getCurrentCheckedOutVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentCheckedOutVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentCheckedOutVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentCheckedOutVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentCheckedOutVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCurrentCheckedOutVersion().getFilename()).isEqualTo("zeFile.pdf");
assertThat(content.getCurrentCheckedOutVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isEqualTo(aliceId);
assertThat(content.getCheckoutDateTime()).isEqualTo(teaOClock);
}
@Test
public void givenModifiedCheckedOutContentWhenSetNewContentThenModifiedContentIsRemoved()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(shishOClock.minusMinutes(10));
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
givenTimeIs(meetingOClock);
content.renameCurrentVersion("zeNew:Name.pdf")
.updateCheckedOutContent(new ContentVersionDataSummary("zeVeryNewHash", "zeVeryNewMime", zeVeryNewLength));
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getCurrentCheckedOutVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentCheckedOutVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentCheckedOutVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentCheckedOutVersion().getMimetype()).isEqualTo("zeVeryNewMime");
assertThat(content.getCurrentCheckedOutVersion().getLength()).isEqualTo(zeVeryNewLength);
assertThat(content.getCurrentCheckedOutVersion().getFilename()).isEqualTo("zeNewName.pdf");
assertThat(content.getCurrentCheckedOutVersion().getHash()).isEqualTo("zeVeryNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isEqualTo(aliceId);
assertThat(content.getCheckoutDateTime()).isEqualTo(teaOClock);
}
@Test
public void givenPreviouslyModifiedCheckedOutContentWhenSetNewContentThenModifiedContentIsRemoved()
throws Exception {
givenModifiedCheckedOutContent();
givenTimeIs(meetingOClock);
content.renameCurrentVersion("zeNew:Name.pdf").updateCheckedOutContent(
new ContentVersionDataSummary("zeVeryNewHash", "zeVeryNewMime", zeVeryNewLength));
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getCurrentCheckedOutVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentCheckedOutVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentCheckedOutVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentCheckedOutVersion().getMimetype()).isEqualTo("zeVeryNewMime");
assertThat(content.getCurrentCheckedOutVersion().getLength()).isEqualTo(zeVeryNewLength);
assertThat(content.getCurrentCheckedOutVersion().getFilename()).isEqualTo("zeNewName.pdf");
assertThat(content.getCurrentCheckedOutVersion().getHash()).isEqualTo("zeVeryNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isEqualTo(aliceId);
assertThat(content.getCheckoutDateTime()).isEqualTo(teaOClock);
}
@Test
public void givenCheckedOutContentWhenCheckInAsMajorThenNotCheckedOutAnymoreAndNewVersionSet()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(shishOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
givenTimeIs(meetingOClock);
content.checkInWithModification(new ContentVersionDataSummary("zeVeryNewHash", "zeVeryNewMime", zeVeryNewLength), true);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("2.0");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeVeryNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeVeryNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeVeryNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenCheckedOutContentWhenCheckInAsMinorThenNotCheckedOutAnymoreAndNewVersionSet()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(shishOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
givenTimeIs(meetingOClock);
content.checkInWithModification(new ContentVersionDataSummary("zeVeryNewHash", "zeVeryNewMime", zeVeryNewLength), false);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeVeryNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeVeryNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeVeryNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenModifiedCheckedOutContentWhenCheckInAsMinorThenNotCheckedOutAnymoreAndNewVersionSet()
throws Exception {
givenModifiedCheckedOutContent();
givenTimeIs(meetingOClock);
content.checkInWithModification(new ContentVersionDataSummary("zeVeryNewHash", "zeVeryNewMime", zeVeryNewLength), false);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeVeryNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeVeryNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeVeryNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenModifiedCheckedOutContentWhenCheckInThenCheckInAndVersionIncrementedAsMinor()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(shishOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
givenTimeIs(tockOClock);
content.checkIn();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(shishOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenModifiedCheckedOutContentWhenCheckOutCancelledThenNoModification()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(shishOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
givenTimeIs(tockOClock);
content.cancelCheckOut();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenPreviouslyModifiedCheckedOutContentWhenCheckInThenCheckInAndVersionIncrementedAsMinor()
throws Exception {
givenModifiedCheckedOutContent();
givenTimeIs(tockOClock);
content.checkIn();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(teaOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.1");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenPreviouslyModifiedCheckedOutContentWhenCheckOutCancelledThenCheckInAndVersionIncrementedAsMinor()
throws Exception {
givenModifiedCheckedOutContent();
givenTimeIs(tockOClock);
content.cancelCheckOut();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenPreviouslyModifiedCheckedOutContentWhenGetContentSeenByCheckOutUserThenReturnCheckOutVersion()
throws Exception {
givenModifiedCheckedOutContent();
assertThat(content.getCurrentVersionSeenBy(alice)).isSameAs(modifiedCheckedOut);
assertThat(content.getCurrentVersionSeenBy(bob)).isSameAs(currentVersion);
}
@Test
public void givenModifiedCheckedOutContentWhenCheckInAndFinalizeThenCheckInAndVersionIncrementedAsMajor()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(meetingOClock);
content.updateCheckedOutContent(new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength));
content.finalizeVersion();
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(meetingOClock);
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("2.0");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeNewMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeNewLength);
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeNewHash");
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion, currentVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenNonModifiedCheckedOutContentWhenCheckInThenCheckInAndNoChanges()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(meetingOClock);
content.checkIn();
givenTimeIs(tockOClock);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenNonModifiedCheckedOutContentWhenCheckOutCancelledThenCheckInAndNoChanges()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(meetingOClock);
content.cancelCheckOut();
givenTimeIs(tockOClock);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void givenNonModifiedCheckedOutContentWhenCheckInAndFinalizeThenCheckInAndNoChanges()
throws Exception {
givenCheckedOutContentNotYetModified();
givenTimeIs(meetingOClock);
content.finalizeVersion();
givenTimeIs(tockOClock);
assertThat(content.getCurrentCheckedOutVersion()).isNull();
assertThat(content.getCurrentVersion()).isEqualTo(currentVersion);
assertThat(content.getHistoryVersions()).containsExactly(firstHistoryVersion);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
}
@Test
public void whenCreatingAMajorContentWithColonsThenColonsAreRemovedAndContentCreatedNormally()
throws Exception {
givenTimeIs(shishOClock);
ContentImpl content = (ContentImpl) ContentImpl
.create("zeId", alice, "file:name.pdf", new ContentVersionDataSummary("zeHash", "zeMime", zeLength), true, false);
assertThat(content.isDirty()).isTrue();
assertThat(content.getCurrentVersion().getFilename()).isEqualTo("filename.pdf");
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeHash");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeLength);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("1.0");
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(shishOClock);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
assertThat(content.getHistoryVersions()).isEmpty();
assertThat(content.isDirty()).isTrue();
}
@Test
public void whenCreatingAMinorContentWithColonsThenColonsAreRemovedAndContentCreatedNormally()
throws Exception {
givenTimeIs(shishOClock);
ContentImpl content = (ContentImpl) ContentImpl
.create("zeId", alice, "file:name.pdf", new ContentVersionDataSummary("zeHash", "zeMime", zeLength), false,
false);
assertThat(content.isDirty()).isTrue();
assertThat(content.getCurrentVersion().getFilename()).isEqualTo("filename.pdf");
assertThat(content.getCurrentVersion().getHash()).isEqualTo("zeHash");
assertThat(content.getCurrentVersion().getMimetype()).isEqualTo("zeMime");
assertThat(content.getCurrentVersion().getLength()).isEqualTo(zeLength);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("0.1");
assertThat(content.getCurrentVersion().getModifiedBy()).isEqualTo(aliceId);
assertThat(content.getCurrentVersion().getLastModificationDateTime()).isEqualTo(shishOClock);
assertThat(content.getCheckoutUserId()).isNull();
assertThat(content.getCheckoutDateTime()).isNull();
assertThat(content.getHistoryVersions()).isEmpty();
assertThat(content.isDirty()).isTrue();
}
@Test
public void givenInvalidMimeOrHashThenException()
throws Exception {
givenTimeIs(shishOClock);
try {
ContentImpl.create("zeId", alice, "file:name.pdf", null, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", alice, "file:name.pdf", new ContentVersionDataSummary(null, "zeMime", 1l), false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", alice, "file:name.pdf", new ContentVersionDataSummary("zeHash", null, 1l), false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void givenInvalidFilenameOrInputStreamOrUserWhileCreatingAContentThenException()
throws Exception {
givenTimeIs(shishOClock);
ContentVersionDataSummary dataSummary = new ContentVersionDataSummary("zeHash", "zeMime", 42);
try {
ContentImpl.create(null, alice, "file:name.pdf", dataSummary, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create(" ", alice, "file:name.pdf", dataSummary, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", null, "file:name.pdf", dataSummary, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", alice, null, dataSummary, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", alice, " ", dataSummary, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
ContentImpl.create("zeId", alice, "file:name.pdf", null, false, false);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void whenCheckingWithModificationThenAllArgumentsMustBeValid() {
givenCheckedOutContentNotYetModified();
try {
content.checkInWithModification(null, true);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void whenRenamingCurrentVersionThenAllArgumentsMustBeValid() {
givenCheckedOutContentNotYetModified();
try {
content.renameCurrentVersion(null);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
content.renameCurrentVersion(" ");
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void whenUpdatingContentThenAllArgumentsMustBeValid() {
givenNonCheckedOutContent();
try {
content.updateContent(null, new ContentVersionDataSummary("zeHash", "zeMime", 42), true);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
try {
content.updateContent(alice, null, true);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void whenUpdatingCheckedOutContentThenAllArgumentsMustBeValid() {
givenCheckedOutContentNotYetModified();
try {
content.updateCheckedOutContent(null);
fail("ContentImplRuntimeException_InvalidArgument expected");
} catch (ContentImplRuntimeException_InvalidArgument e) {
//OK
}
}
@Test
public void givenCurrentVersion0_9WhenNewMinorVersionThen0_10()
throws Exception {
content = new ContentImpl(contentId1, firstHistoryVersion, history, null, null, null, false);
givenTimeIs(meetingOClock);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("0.9");
content.updateContent(alice, new ContentVersionDataSummary("zeNewHash", "zeNewMime", zeNewLength), false);
assertThat(content.getCurrentVersion().getVersion()).isEqualTo("0.10");
}
private void givenNonCheckedOutContent() {
content = new ContentImpl(contentId1, currentVersion, history, null, null, null, false);
}
private void givenCheckedOutContentNotYetModified() {
content = new ContentImpl(contentId1, currentVersion, history, currentVersion, teaOClock, aliceId, false);
}
private void givenModifiedCheckedOutContent() {
content = new ContentImpl(contentId1, currentVersion, history, modifiedCheckedOut, teaOClock, aliceId, false);
}
}