/* * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xwiki.eventstream; import java.net.MalformedURLException; import java.net.URL; import java.util.Date; import java.util.UUID; import org.junit.Assert; import org.jmock.Expectations; import org.junit.Before; import org.junit.Test; import org.xwiki.bridge.DocumentAccessBridge; import org.xwiki.context.Execution; import org.xwiki.context.ExecutionContext; import org.xwiki.eventstream.Event.Importance; import org.xwiki.eventstream.internal.DefaultEventFactory; import org.xwiki.model.EntityType; import org.xwiki.model.reference.DocumentReference; import org.xwiki.model.reference.EntityReferenceResolver; import org.xwiki.model.reference.SpaceReference; import org.xwiki.model.reference.WikiReference; import org.xwiki.test.jmock.AbstractMockingComponentTestCase; import org.xwiki.test.jmock.annotation.MockingRequirement; /** * Tests for the {@link org.xwiki.eventstream.internal.DefaultEvent default event} and * {@link org.xwiki.eventstream.internal.DefaultEventFactory default event factory}. * * @version $Id: 586a9a8c771f787898e12cbc85e1611a69fd6a58 $ */ @MockingRequirement(DefaultEventFactory.class) public class EventAndFactoryTest extends AbstractMockingComponentTestCase { private EventFactory factory; Event defaultEvent; Event rawEvent; @Before public void configure() throws Exception { final DocumentAccessBridge mockDocumentAccessBridge = getComponentManager().getInstance(DocumentAccessBridge.class); getMockery().checking(new Expectations() { { allowing(mockDocumentAccessBridge).getCurrentUser(); will(returnValue("XWiki.Admin")); } }); final ExecutionContext context = new ExecutionContext(); final Execution mockExecution = getComponentManager().getInstance(Execution.class); getMockery().checking(new Expectations() { { allowing(mockExecution).getContext(); will(returnValue(context)); } }); final EntityReferenceResolver<String> mockResolver = getComponentManager().getInstance(EntityReferenceResolver.TYPE_STRING); getMockery().checking(new Expectations() { { allowing(mockResolver).resolve("XWiki.Admin", EntityType.DOCUMENT); will(returnValue(new DocumentReference("xwiki", "XWiki", "Admin"))); } }); this.factory = getComponentManager().getInstance(EventFactory.class); this.defaultEvent = this.factory.createEvent(); this.rawEvent = this.factory.createRawEvent(); } @Test public void testId() { Assert.assertNotNull("Event ID not set on new event", this.defaultEvent.getId()); String id = UUID.randomUUID().toString(); this.defaultEvent.setId(id); Assert.assertEquals("Event ID was not persisted on new event", id, this.defaultEvent.getId()); Assert.assertNull(this.rawEvent.getId()); this.rawEvent.setId(id); Assert.assertEquals("Event ID was not persisted on raw event", id, this.rawEvent.getId()); this.rawEvent.setId(null); Assert.assertNull(this.rawEvent.getId()); } @Test public void testGroupId() { Assert.assertNotNull("Group ID not set on new event", this.defaultEvent.getGroupId()); Assert.assertEquals("Consecutive events have different group identifiers", this.defaultEvent.getGroupId(), this.factory.createEvent().getGroupId()); String id = UUID.randomUUID().toString(); this.defaultEvent.setGroupId(id); Assert.assertEquals("Group ID was not persisted", id, this.defaultEvent.getGroupId()); Assert.assertNull(this.rawEvent.getGroupId()); this.rawEvent.setGroupId(id); Assert.assertEquals(id, this.rawEvent.getGroupId()); this.rawEvent.setGroupId(null); Assert.assertNull(this.rawEvent.getGroupId()); } @Test public void testType() { Assert.assertNull(this.defaultEvent.getType()); String type = "CommentAdded"; this.defaultEvent.setType(type); Assert.assertEquals(type, this.defaultEvent.getType()); Assert.assertNull(this.rawEvent.getType()); this.rawEvent.setType(type); Assert.assertEquals(type, this.rawEvent.getType()); this.rawEvent.setType(null); Assert.assertNull(this.rawEvent.getType()); } @Test public void testDate() { Assert.assertNotNull(this.defaultEvent.getDate()); Assert.assertTrue(new Date().getTime() - this.defaultEvent.getDate().getTime() < 1000); Date date = new Date(); this.defaultEvent.setDate(date); Assert.assertEquals(date, this.defaultEvent.getDate()); Assert.assertNull(this.rawEvent.getDate()); this.rawEvent.setDate(date); Assert.assertEquals(date, this.rawEvent.getDate()); this.rawEvent.setDate(null); Assert.assertNull(this.rawEvent.getDate()); } @Test public void testImportance() { Assert.assertEquals(Importance.MEDIUM, this.defaultEvent.getImportance()); this.defaultEvent.setImportance(Importance.CRITICAL); Assert.assertEquals(Importance.CRITICAL, this.defaultEvent.getImportance()); Assert.assertEquals(Importance.MEDIUM, this.rawEvent.getImportance()); this.rawEvent.setImportance(Importance.BACKGROUND); Assert.assertEquals(Importance.BACKGROUND, this.rawEvent.getImportance()); this.rawEvent.setImportance(null); Assert.assertEquals(Importance.MEDIUM, this.rawEvent.getImportance()); } @Test public void testApplication() { Assert.assertNull(this.defaultEvent.getApplication()); String app = "Comments"; this.defaultEvent.setApplication(app); Assert.assertEquals(app, this.defaultEvent.getApplication()); Assert.assertNull(this.rawEvent.getApplication()); this.rawEvent.setApplication(app); Assert.assertEquals(app, this.rawEvent.getApplication()); this.rawEvent.setApplication(null); Assert.assertNull(this.rawEvent.getApplication()); } @Test public void testStream() { Assert.assertNull(this.defaultEvent.getStream()); String stream = "xwiki:XWiki.AdminGroup"; this.defaultEvent.setStream(stream); Assert.assertEquals(stream, this.defaultEvent.getStream()); Assert.assertNull(this.rawEvent.getStream()); this.rawEvent.setStream(stream); Assert.assertEquals(stream, this.rawEvent.getStream()); this.rawEvent.setStream(null); Assert.assertNull(this.rawEvent.getStream()); } @Test public void testDocument() { Assert.assertNull(this.defaultEvent.getDocument()); DocumentReference ref = new DocumentReference("wiki", "Space", "Page"); this.defaultEvent.setDocument(ref); Assert.assertEquals(ref, this.defaultEvent.getDocument()); Assert.assertNull(this.rawEvent.getDocument()); this.rawEvent.setDocument(ref); Assert.assertEquals(ref, this.rawEvent.getDocument()); this.defaultEvent.setDocument(null); Assert.assertNull(this.defaultEvent.getDocument()); } @Test public void testSpace() { Assert.assertNull(this.defaultEvent.getSpace()); DocumentReference doc = new DocumentReference("wiki1", "Space1", "Page"); SpaceReference space = new SpaceReference("Space2", new WikiReference("wiki2")); this.defaultEvent.setDocument(doc); Assert.assertEquals(doc.getLastSpaceReference(), this.defaultEvent.getSpace()); Assert.assertEquals("Space1", this.defaultEvent.getSpace().getName()); this.defaultEvent.setSpace(space); Assert.assertEquals(space, this.defaultEvent.getSpace()); Assert.assertEquals("Space2", this.defaultEvent.getSpace().getName()); this.defaultEvent.setSpace(null); Assert.assertEquals(doc.getLastSpaceReference(), this.defaultEvent.getSpace()); this.defaultEvent.setDocument(null); Assert.assertNull(this.defaultEvent.getSpace()); Assert.assertNull(this.rawEvent.getSpace()); } @Test public void testWiki() { Assert.assertNull(this.defaultEvent.getWiki()); DocumentReference doc = new DocumentReference("wiki1", "Space1", "Page"); SpaceReference space = new SpaceReference("Space2", new WikiReference("wiki2")); WikiReference wiki = new WikiReference("wiki3"); this.defaultEvent.setDocument(doc); Assert.assertEquals(doc.getWikiReference(), this.defaultEvent.getWiki()); Assert.assertEquals("wiki1", this.defaultEvent.getWiki().getName()); this.defaultEvent.setSpace(space); Assert.assertEquals(space.getRoot(), this.defaultEvent.getWiki()); Assert.assertEquals("wiki2", this.defaultEvent.getWiki().getName()); this.defaultEvent.setWiki(wiki); Assert.assertEquals(wiki, this.defaultEvent.getWiki()); Assert.assertEquals("wiki3", this.defaultEvent.getWiki().getName()); this.defaultEvent.setWiki(null); Assert.assertEquals(space.getRoot(), this.defaultEvent.getWiki()); this.defaultEvent.setSpace(null); Assert.assertEquals(doc.getWikiReference(), this.defaultEvent.getWiki()); this.defaultEvent.setDocument(null); Assert.assertNull(this.defaultEvent.getWiki()); Assert.assertNull(this.rawEvent.getWiki()); } @Test public void testRelatedEntity() { Assert.assertNull(this.defaultEvent.getRelatedEntity()); DocumentReference ref = new DocumentReference("wiki", "Space", "Page"); this.defaultEvent.setRelatedEntity(ref); Assert.assertEquals(ref, this.defaultEvent.getRelatedEntity()); this.defaultEvent.setRelatedEntity(null); Assert.assertNull(this.defaultEvent.getRelatedEntity()); Assert.assertNull(this.rawEvent.getRelatedEntity()); } @Test public void testDocumentVersion() { Assert.assertNull(this.defaultEvent.getDocumentVersion()); String version = "4.2"; this.defaultEvent.setDocumentVersion(version); Assert.assertEquals(version, this.defaultEvent.getDocumentVersion()); this.defaultEvent.setDocumentVersion(null); Assert.assertNull(this.defaultEvent.getDocumentVersion()); Assert.assertNull(this.rawEvent.getDocumentVersion()); } @Test public void testDocumentTitle() { Assert.assertNull(this.defaultEvent.getDocumentTitle()); String title = "Welcome to your wiki"; this.defaultEvent.setDocumentTitle(title); Assert.assertEquals(title, this.defaultEvent.getDocumentTitle()); this.defaultEvent.setDocumentTitle(null); Assert.assertNull(this.defaultEvent.getDocumentTitle()); Assert.assertNull(this.rawEvent.getDocumentTitle()); } @Test public void testUser() { Assert.assertNotNull(this.defaultEvent.getUser()); DocumentReference user = new DocumentReference("xwiki", "XWiki", "Admin"); Assert.assertEquals(user, this.defaultEvent.getUser()); user = new DocumentReference("wiki2", "XWiki", "jdoe"); this.defaultEvent.setUser(user); Assert.assertEquals(user, this.defaultEvent.getUser()); this.defaultEvent.setUser(null); Assert.assertNull(this.defaultEvent.getUser()); Assert.assertNull(this.rawEvent.getUser()); this.rawEvent.setUser(user); Assert.assertEquals(user, this.rawEvent.getUser()); } @Test public void testURL() throws MalformedURLException { Assert.assertNull(this.defaultEvent.getUrl()); URL url = new URL("http://xwiki.org/xwiki/bin/Some/Page"); this.defaultEvent.setUrl(url); Assert.assertEquals(url, this.defaultEvent.getUrl()); this.defaultEvent.setUrl(null); Assert.assertNull(this.defaultEvent.getUrl()); Assert.assertNull(this.rawEvent.getUrl()); } @Test public void testTitle() { Assert.assertNull(this.defaultEvent.getTitle()); String title = "Deleted attachment file.png"; this.defaultEvent.setTitle(title); Assert.assertEquals(title, this.defaultEvent.getTitle()); this.defaultEvent.setTitle(null); Assert.assertNull(this.defaultEvent.getTitle()); Assert.assertNull(this.rawEvent.getTitle()); } @Test public void testBody() { Assert.assertNull(this.defaultEvent.getBody()); String body = "I **do** believe in fairies!"; this.defaultEvent.setBody(body); Assert.assertEquals(body, this.defaultEvent.getBody()); this.defaultEvent.setBody(null); Assert.assertNull(this.defaultEvent.getBody()); Assert.assertNull(this.rawEvent.getBody()); } }