package com.celements.rights.publication; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import java.util.Calendar; import java.util.GregorianCalendar; import org.junit.Before; import org.junit.Test; import org.xwiki.context.Execution; import org.xwiki.context.ExecutionContext; import org.xwiki.model.reference.DocumentReference; import com.celements.common.test.AbstractBridgedComponentTestCase; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.objects.BaseObject; import com.xpn.xwiki.web.Utils; public class PublicationServiceTest extends AbstractBridgedComponentTestCase { private PublicationService pubService; @Before public void setUp_PublicationServiceTest() throws Exception { pubService = (PublicationService) Utils.getComponent(IPublicationServiceRole.class); } @Test public void testGetPublishObject_null() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); assertNotNull(pubService.getPublishObjects(doc)); } @Test public void testGetPublishObject_hasObj() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); BaseObject obj = new BaseObject(); obj.setXClassReference(pubService.getPublicationClassReference()); doc.addXObject(obj); assertEquals(obj, pubService.getPublishObjects(doc).get(0)); } @Test public void testGetPublishObject_hasObjs() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); BaseObject obj1 = new BaseObject(); obj1.setXClassReference(pubService.getPublicationClassReference()); doc.addXObject(obj1); BaseObject obj2 = new BaseObject(); obj2.setXClassReference(pubService.getPublicationClassReference()); doc.addXObject(obj2); assertEquals(2, pubService.getPublishObjects(doc).size()); } @Test public void testGetPublishObject_nullObjs() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); BaseObject obj = new BaseObject(); obj.setXClassReference(pubService.getPublicationClassReference()); doc.setXObject(3, obj); assertEquals(1, pubService.getPublishObjects(doc).size()); } @Test public void testIsPublished_noLimits() { assertTrue("null document", pubService.isPublished(null)); XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); assertTrue("document without objects", pubService.isPublished(doc)); } @Test public void testIsPublished_noLimits_umpublished() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); BaseObject obj1 = new BaseObject(); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, 1); obj1.setDateValue("publishDate", gc.getTime()); obj1.setXClassReference(pubService.getPublicationClassReference()); doc.addXObject(obj1); BaseObject obj2 = new BaseObject(); gc.add(GregorianCalendar.HOUR, -2); obj2.setDateValue("unpublishDate", gc.getTime()); gc.add(GregorianCalendar.HOUR, -2); obj2.setDateValue("publishDate", gc.getTime()); obj2.setXClassReference(pubService.getPublicationClassReference()); doc.addXObject(obj2); assertFalse(doc.getXObjects(pubService.getPublicationClassReference()).isEmpty()); assertFalse(pubService.isPublished(doc)); } @Test public void testIsPublished_noLimits_published() { XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "Space", "Doc")); BaseObject obj1 = new BaseObject(); obj1.setXClassReference(pubService.getPublicationClassReference()); BaseObject obj3 = new BaseObject(); obj3.setXClassReference(pubService.getPublicationClassReference()); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, 1); obj3.setDateValue("unpublishDate", gc.getTime()); obj1.setDateValue("publishDate", gc.getTime()); BaseObject obj2 = new BaseObject(); obj2.setXClassReference(pubService.getPublicationClassReference()); gc.add(GregorianCalendar.HOUR, -2); obj2.setDateValue("unpublishDate", gc.getTime()); obj3.setDateValue("publishDate", gc.getTime()); gc.add(GregorianCalendar.HOUR, -2); obj2.setDateValue("publishDate", gc.getTime()); doc.addXObject(obj1); doc.addXObject(obj2); doc.addXObject(obj3); assertFalse(doc.getXObjects(pubService.getPublicationClassReference()).isEmpty()); assertTrue(pubService.isPublished(doc)); } @Test public void testIsPublishActive_docNull() { expect(getWikiMock().getSpacePreference(eq("publishdate_active"), same((String) null), eq("-1"), same(getContext()))).andReturn("-1").once(); expect(getWikiMock().getXWikiPreference(eq("publishdate_active"), eq( "celements.publishdate.active"), eq("0"), same(getContext()))).andReturn("0").once(); replayDefault(); assertEquals(false, pubService.isPublishActive()); verifyDefault(); } @Test public void testIsPublishActive_notSet() { expect(getWikiMock().getSpacePreference(eq("publishdate_active"), eq("TestSpace"), eq("-1"), same(getContext()))).andReturn("-1").once(); expect(getWikiMock().getXWikiPreference(eq("publishdate_active"), eq( "celements.publishdate.active"), eq("0"), same(getContext()))).andReturn("0").once(); XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "TestSpace", "TestDoc")); getContext().setDoc(doc); replayDefault(); assertEquals(false, pubService.isPublishActive()); verifyDefault(); } @Test public void testIsPublishActive_false() { expect(getWikiMock().getSpacePreference(eq("publishdate_active"), eq("TestSpace"), eq("-1"), same(getContext()))).andReturn("0").once(); XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "TestSpace", "TestDoc")); getContext().setDoc(doc); replayDefault(); assertEquals(false, pubService.isPublishActive()); verifyDefault(); } @Test public void testIsPublishActive_true() { expect(getWikiMock().getSpacePreference(eq("publishdate_active"), eq("TestSpace"), eq("-1"), same(getContext()))).andReturn("1").once(); XWikiDocument doc = new XWikiDocument(new DocumentReference(getContext().getDatabase(), "TestSpace", "TestDoc")); getContext().setDoc(doc); replayDefault(); assertEquals(true, pubService.isPublishActive()); verifyDefault(); } @Test public void testIsRestrictedRightsAction_view() { assertTrue(pubService.isRestrictedRightsAction("view")); } @Test public void testIsRestrictedRightsAction_comment() { assertTrue(pubService.isRestrictedRightsAction("comment")); } @Test public void testIsRestrictedRightsAction_admin() { assertFalse(pubService.isRestrictedRightsAction("admin")); } @Test public void testIsAfterStart_empty() { assertEquals(true, pubService.isAfterStart(new BaseObject())); } @Test public void testIsAfterStart_beforeStart() { BaseObject obj = new BaseObject(); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, 1); obj.setDateValue("publishDate", gc.getTime()); assertFalse(pubService.isAfterStart(obj)); } @Test public void testIsAfterStart_afterStart() { BaseObject obj = new BaseObject(); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, -1); obj.setDateValue("publishDate", gc.getTime()); assertTrue(pubService.isAfterStart(obj)); } @Test public void testIsBeforeEnd_empty() { assertEquals(true, pubService.isBeforeEnd(new BaseObject())); } @Test public void testIsBeforeEnd_beforeEnd() { BaseObject obj = new BaseObject(); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, 1); obj.setDateValue("unpublishDate", gc.getTime()); assertTrue(pubService.isBeforeEnd(obj)); } @Test public void testIsBeforeEnd_afterEnd() { BaseObject obj = new BaseObject(); Calendar gc = GregorianCalendar.getInstance(); gc.add(GregorianCalendar.HOUR, -1); obj.setDateValue("unpublishDate", gc.getTime()); assertFalse(pubService.isBeforeEnd(obj)); } @Test public void testIsPubUnpubOverride_nothingSet() { assertFalse(pubService.isPubUnpubOverride()); } @Test public void testIsPubUnpubOverride_wrongSet() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, "test wrong type"); assertFalse(pubService.isPubUnpubOverride()); } @Test public void testIsPubUnpubOverride_pub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.PUBLISHED); assertTrue(pubService.isPubUnpubOverride()); } @Test public void testIsPubUnpubOverride_unpub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.UNPUBLISHED); assertTrue(pubService.isPubUnpubOverride()); } @Test public void testIsPubOverride_nothing() { assertFalse(pubService.isPubOverride()); } @Test public void testIsPubOverride_unpub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.UNPUBLISHED); assertFalse(pubService.isPubOverride()); } @Test public void testIsPubOverride_pub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.PUBLISHED); assertTrue(pubService.isPubOverride()); } @Test public void testIsUnpubOverride_nothing() { assertFalse(pubService.isUnpubOverride()); } @Test public void testIsUnpubOverride_unpub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.UNPUBLISHED); assertTrue(pubService.isUnpubOverride()); } @Test public void testIsUnpubOverride_pub() { getExecutionContext().setProperty(IPublicationServiceRole.OVERRIDE_PUB_CHECK, EPubUnpub.PUBLISHED); assertFalse(pubService.isUnpubOverride()); } @Test public void test_overridePubUnpub_PUBLISHED() { pubService.overridePubUnpub(EPubUnpub.PUBLISHED); assertEquals(EPubUnpub.PUBLISHED, getExecutionContext().getProperty( IPublicationServiceRole.OVERRIDE_PUB_CHECK)); } @Test public void test_overridePubUnpub_UNPUBLISHED() { pubService.overridePubUnpub(EPubUnpub.UNPUBLISHED); assertEquals(EPubUnpub.UNPUBLISHED, getExecutionContext().getProperty( IPublicationServiceRole.OVERRIDE_PUB_CHECK)); } private ExecutionContext getExecutionContext() { return Utils.getComponent(Execution.class).getContext(); } }