package com.celements.model.access;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.xwiki.model.reference.DocumentReference;
import org.xwiki.script.service.ScriptService;
import com.celements.common.test.AbstractBridgedComponentTestCase;
import com.celements.model.access.exception.DocumentLoadException;
import com.celements.rights.access.EAccessLevel;
import com.celements.rights.access.IRightsAccessFacadeRole;
import com.xpn.xwiki.api.Document;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.user.api.XWikiRightService;
import com.xpn.xwiki.web.Utils;
public class ModelAccessScriptServiceTest extends AbstractBridgedComponentTestCase {
private ModelAccessScriptService modelAccess;
private DocumentReference docRef;
private XWikiDocument doc;
private IRightsAccessFacadeRole rightsAccessMock;
@Before
public void setUp_DefaultModelAccessFacadeTest() {
modelAccess = (ModelAccessScriptService) Utils.getComponent(ScriptService.class,
ModelAccessScriptService.NAME);
modelAccess.modelAccess = createMockAndAddToDefault(IModelAccessFacade.class);
rightsAccessMock = createMockAndAddToDefault(IRightsAccessFacadeRole.class);
modelAccess.rightsAccess = rightsAccessMock;
docRef = new DocumentReference("db", "space", "doc");
doc = new XWikiDocument(docRef);
XWikiRightService rightServiceMock = createMockAndAddToDefault(XWikiRightService.class);
expect(getWikiMock().getRightService()).andReturn(rightServiceMock).anyTimes();
expect(rightServiceMock.hasProgrammingRights(same(getContext()))).andReturn(true).anyTimes();
}
@Test
public void test_getDocument() throws Exception {
expect(rightsAccessMock.hasAccessLevel(eq(docRef), eq(EAccessLevel.VIEW))).andReturn(
true).once();
expect(modelAccess.modelAccess.getDocument(eq(docRef))).andReturn(doc).once();
Document apiDoc = new Document(doc, getContext());
expect(modelAccess.modelAccess.getApiDocument(same(doc))).andReturn(apiDoc).once();
replayDefault();
Document ret = modelAccess.getDocument(docRef);
verifyDefault();
assertSame(ret, apiDoc);
}
@Test
public void test_getDocument_loadException() throws Exception {
expect(rightsAccessMock.hasAccessLevel(eq(docRef), eq(EAccessLevel.VIEW))).andReturn(
true).once();
expect(modelAccess.modelAccess.getDocument(eq(docRef))).andThrow(new DocumentLoadException(
docRef)).once();
replayDefault();
Document ret = modelAccess.getDocument(docRef);
verifyDefault();
assertNull(ret);
}
@Test
public void test_getDocument_notViewRights() throws Exception {
expect(rightsAccessMock.hasAccessLevel(eq(docRef), eq(EAccessLevel.VIEW))).andReturn(
false).once();
replayDefault();
Document ret = modelAccess.getDocument(docRef);
verifyDefault();
assertNull(ret);
}
@Test
public void test_getDocument_null() throws Exception {
expect(rightsAccessMock.hasAccessLevel(isNull(DocumentReference.class), eq(
EAccessLevel.VIEW))).andReturn(false).once();
replayDefault();
Document ret = modelAccess.getDocument(null);
verifyDefault();
assertNull(ret);
}
@Test
public void test_exists() {
expect(modelAccess.modelAccess.exists(eq(docRef))).andReturn(true).once();
replayDefault();
boolean ret = modelAccess.exists(docRef);
verifyDefault();
assertTrue(ret);
}
@Test
public void test_exists_null() {
expect(modelAccess.modelAccess.exists(isNull(DocumentReference.class))).andReturn(false).once();
replayDefault();
boolean ret = modelAccess.exists(null);
verifyDefault();
assertFalse(ret);
}
}