Skip to content
This repository has been archived by the owner on May 4, 2022. It is now read-only.

Commit

Permalink
[misc] Discarded bad test, wrote some new ones
Browse files Browse the repository at this point in the history
  • Loading branch information
sdumitriu committed Jul 29, 2014
1 parent db0c9fa commit da681d3
Showing 1 changed file with 86 additions and 28 deletions.
Expand Up @@ -19,25 +19,33 @@
*/
package org.phenotips.data.permissions.internal;

import org.phenotips.data.Patient;

import org.xwiki.bridge.event.DocumentCreatingEvent;
import org.xwiki.bridge.event.DocumentUpdatingEvent;
import org.xwiki.component.manager.ComponentLookupException;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.EntityReference;
import org.xwiki.observation.EventListener;
import org.xwiki.observation.event.Event;
import org.xwiki.test.mockito.MockitoComponentMockingRule;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseObject;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

/**
Expand All @@ -48,38 +56,88 @@
public class RightsUpdateEventListenerTest
{
@Rule
public final MockitoComponentMockingRule<RightsUpdateEventListener> mocker =
new MockitoComponentMockingRule<RightsUpdateEventListener>(RightsUpdateEventListener.class);
public final MockitoComponentMockingRule<EventListener> mocker =
new MockitoComponentMockingRule<EventListener>(RightsUpdateEventListener.class);

@Mock
private Event event;

@Mock
private XWikiDocument doc;

private DocumentReference reference = new DocumentReference("x", "data", "P0000001");

@Mock
private XWikiContext context;

public XWikiDocument doc = mock(XWikiDocument.class);
@Mock
private BaseObject patientObject;

public XWikiContext context = mock(XWikiContext.class);
@Mock
private BaseObject manageRightsObject;

public RightsUpdateEventListener testComponent;
@Mock
private BaseObject editRightObject;

@Mock
private BaseObject viewRightObject;

@Before
public void setUp() throws ComponentLookupException
{
this.testComponent = this.mocker.getComponentUnderTest();
MockitoAnnotations.initMocks(this);
}

@Test
public void listensToDocumentCreation() throws ComponentLookupException
{
boolean found = false;
for (Event e : this.mocker.getComponentUnderTest().getEvents()) {
if (e instanceof DocumentCreatingEvent) {
found = true;
break;
}
}
Assert.assertTrue(found);
}

@Test
public void listensToDocumentUpdates() throws ComponentLookupException
{
boolean found = false;
for (Event e : this.mocker.getComponentUnderTest().getEvents()) {
if (e instanceof DocumentUpdatingEvent) {
found = true;
break;
}
}
Assert.assertTrue(found);
}

@Test
public void hasName() throws ComponentLookupException
{
String name = this.mocker.getComponentUnderTest().getName();
Assert.assertTrue(StringUtils.isNotBlank(name));
Assert.assertFalse("default".equals(name));
}

@Test
public void ignoresNonPatients() throws ComponentLookupException, XWikiException
{
when(this.doc.getXObject(Patient.CLASS_REFERENCE)).thenReturn(null);
this.mocker.getComponentUnderTest().onEvent(this.event, this.doc, this.context);
verify(this.doc, never()).getXObjects(any(EntityReference.class));
verify(this.doc, never()).newXObject(any(EntityReference.class), any(XWikiContext.class));
}

/** Basic test for {@link RightsUpdateEventListener#findRights} */
@Test
public void findRightsTest() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
public void ignoresTemplatePatient() throws ComponentLookupException, XWikiException
{
Class[] args = new Class[1];
args[0] = XWikiDocument.class;
Method testMethod = this.testComponent.getClass().getDeclaredMethod("findRights", args);
testMethod.setAccessible(true);

List<BaseObject> mockRightObjects = mock(List.class);
Iterator<BaseObject> mockRightIterator = mock(Iterator.class);
BaseObject mockRightObject = mock(BaseObject.class);
when(this.doc.getXObjects(any(EntityReference.class))).thenReturn(mockRightObjects);
when(mockRightObjects.iterator()).thenReturn(mockRightIterator);
when(mockRightIterator.hasNext()).thenReturn(true, false);
when(mockRightIterator.next()).thenReturn(mockRightObject);

testMethod.invoke(this.testComponent, this.doc);
when(this.doc.getXObject(Patient.CLASS_REFERENCE)).thenReturn(this.patientObject);
when(this.doc.getDocumentReference()).thenReturn(new DocumentReference("x", "PhenoTips", "PatientTemplate"));
this.mocker.getComponentUnderTest().onEvent(this.event, this.doc, this.context);
verify(this.doc, never()).getXObjects(any(EntityReference.class));
verify(this.doc, never()).newXObject(any(EntityReference.class), any(XWikiContext.class));
}
}

0 comments on commit da681d3

Please sign in to comment.