package com.celements.rights.access;
import static junit.framework.Assert.*;
import static org.easymock.EasyMock.*;
import org.easymock.Capture;
import org.junit.Before;
import org.junit.Test;
import org.xwiki.bridge.DocumentAccessBridge;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.model.reference.EntityReference;
import org.xwiki.model.reference.SpaceReference;
import org.xwiki.model.reference.WikiReference;
import com.celements.common.test.AbstractBridgedComponentTestCase;
import com.celements.rights.access.internal.EntityReferenceRandomCompleter;
import com.celements.rights.access.internal.IEntityReferenceRandomCompleterRole;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.web.Utils;
public class EntityReferenceRandomCompleterTest extends AbstractBridgedComponentTestCase {
private EntityReferenceRandomCompleter randomCompleter;
private XWikiContext context;
private DocumentAccessBridge docAccessBridgeMock;
@Before
public void setUp_EntityReferenceRandomCompleterTest() throws Exception {
docAccessBridgeMock = registerComponentMock(DocumentAccessBridge.class);
context = getContext();
randomCompleter = (EntityReferenceRandomCompleter) Utils.getComponent(
IEntityReferenceRandomCompleterRole.class);
}
@Test
public void testRandomCompleteSpaceRef_entityType_Document() {
DocumentReference entityRef = new DocumentReference(context.getDatabase(), "mySpace",
"myTestDoc");
replayDefault();
assertSame(entityRef, randomCompleter.randomCompleteSpaceRef(entityRef));
verifyDefault();
}
@Test
public void testRandomCompleteSpaceRef_entityType_Wiki() {
WikiReference entityRef = new WikiReference(context.getDatabase());
replayDefault();
assertSame(entityRef, randomCompleter.randomCompleteSpaceRef(entityRef));
verifyDefault();
}
@Test
public void testRandomCompleteSpaceRef_entityType_Space() {
WikiReference wikiRef = new WikiReference(context.getDatabase());
SpaceReference entityRef = new SpaceReference("mySpace", wikiRef);
Capture<DocumentReference> randomDocRefCapture = new Capture<>();
expect(docAccessBridgeMock.exists(capture(randomDocRefCapture))).andReturn(false).once();
replayDefault();
DocumentReference randomDocRef = (DocumentReference) randomCompleter.randomCompleteSpaceRef(
entityRef);
assertEquals(entityRef, randomDocRef.getLastSpaceReference());
assertEquals(randomDocRefCapture.getValue(), randomDocRef);
verifyDefault();
}
@Test
public void testRandomCompleteSpaceRef_entityType_Space_twoLookups() {
WikiReference wikiRef = new WikiReference(context.getDatabase());
SpaceReference entityRef = new SpaceReference("mySpace", wikiRef);
Capture<DocumentReference> randomDocRefCapture = new Capture<>();
expect(docAccessBridgeMock.exists(capture(randomDocRefCapture))).andReturn(true).once();
Capture<DocumentReference> randomDocRefCapture2 = new Capture<>();
expect(docAccessBridgeMock.exists(capture(randomDocRefCapture2))).andReturn(false).once();
replayDefault();
EntityReference randomDocRef = randomCompleter.randomCompleteSpaceRef(entityRef);
verifyDefault();
DocumentReference docRefFirst = randomDocRefCapture.getValue();
DocumentReference docRefSecond = randomDocRefCapture2.getValue();
assertNotNull(docRefFirst);
assertNotNull(docRefSecond);
assertEquals(entityRef, docRefFirst.getLastSpaceReference());
assertFalse("first and second capture may not be equal", docRefFirst.equals(randomDocRef));
assertEquals(entityRef, docRefSecond.getLastSpaceReference());
assertEquals(docRefSecond, randomDocRef);
}
}