package com.celements.menu.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 com.celements.common.test.AbstractBridgedComponentTestCase;
import com.xpn.xwiki.XWiki;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.user.api.XWikiRightService;
import com.xpn.xwiki.web.Utils;
public class DefaultMenuAccessProviderTest extends AbstractBridgedComponentTestCase {
private DefaultMenuAccessProvider defMenuAccessProvider;
private XWikiContext context;
private XWiki xwiki;
private XWikiRightService rightsMock;
@Before
public void setUp_DefaultMenuAccessProviderTest() throws Exception {
context = getContext();
xwiki = getWikiMock();
rightsMock = createMockAndAddToDefault(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(rightsMock).anyTimes();
defMenuAccessProvider = (DefaultMenuAccessProvider) Utils.getComponent(
IMenuAccessProviderRole.class, "celements.defaultMenuAccess");
expect(xwiki.isVirtualMode()).andReturn(true).anyTimes();
}
@Test
public void testDenyView() {
replayDefault();
assertFalse(defMenuAccessProvider.denyView(null));
assertFalse(defMenuAccessProvider.denyView(new DocumentReference(context.getDatabase(),
"Celements2", "CelMenuBar")));
verifyDefault();
}
@Test
public void testHasview_notLocal_central_hasAccess_XWikiGuest() throws Exception {
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(false).once();
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"celements2web:Celements.MenuBar"), same(context))).andReturn(true).once();
expect(xwiki.getXWikiPreferenceAsInt(eq("CelMenuBar-Celements.MenuBar"), eq(
"celements.menubar.guestview.Celements.MenuBar"), eq(0), same(context))).andReturn(0);
replayDefault();
assertFalse(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_notLocal_central_hasAccess_user() throws Exception {
String myUserName = "XWiki.myUser";
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(false).once();
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq(myUserName), eq(
"celements2web:Celements.MenuBar"), same(context))).andReturn(true).once();
replayDefault();
// important only call setUser after replayDefault. In unstable-2.0 branch setUser
// calls xwiki.isVirtualMode
getContext().setUser(myUserName);
assertTrue(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_Local_central_noAccess() throws Exception {
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"xwikidb:Celements.MenuBar"), same(context))).andReturn(false).once();
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"celements2web:Celements.MenuBar"), same(context))).andReturn(true).once();
replayDefault();
assertFalse(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_local_central_hasAccess() throws Exception {
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"xwikidb:Celements.MenuBar"), same(context))).andReturn(true).once();
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"celements2web:Celements.MenuBar"), same(context))).andReturn(true).once();
replayDefault();
assertTrue(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_local_notCentral_hasAccess() throws Exception {
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(false).once();
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"xwikidb:Celements.MenuBar"), same(context))).andReturn(true).once();
replayDefault();
assertTrue(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_notLocal_central_noAccess() throws Exception {
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"celements2web:Celements.MenuBar"), same(context))).andReturn(false).once();
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(false).once();
expect(xwiki.getXWikiPreferenceAsInt(eq("CelMenuBar-Celements.MenuBar"), eq(
"celements.menubar.guestview.Celements.MenuBar"), eq(0), same(context))).andReturn(1);
replayDefault();
assertFalse(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
@Test
public void testHasview_local_notCentral_noAccess() throws Exception {
DocumentReference menuBar2webDocRef = new DocumentReference("celements2web", "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBar2webDocRef), same(context))).andReturn(false).once();
DocumentReference menuBarDocRef = new DocumentReference(context.getDatabase(), "Celements",
"MenuBar");
expect(xwiki.exists(eq(menuBarDocRef), same(context))).andReturn(true).once();
expect(rightsMock.hasAccessLevel(eq("view"), eq("XWiki.XWikiGuest"), eq(
"xwikidb:Celements.MenuBar"), same(context))).andReturn(false).once();
replayDefault();
assertFalse(defMenuAccessProvider.hasview(menuBarDocRef));
verifyDefault();
}
}