package com.celements.web.service;
import static com.celements.common.test.CelementsTestUtils.*;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.xwiki.model.EntityType;
import org.xwiki.model.reference.AttachmentReference;
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.AbstractComponentTest;
import com.celements.model.context.ModelContext;
import com.celements.parents.IDocumentParentsListerRole;
import com.celements.rights.access.EAccessLevel;
import com.celements.web.comparators.XWikiAttachmentAscendingChangeDateComparator;
import com.celements.web.comparators.XWikiAttachmentAscendingNameComparator;
import com.celements.web.comparators.XWikiAttachmentDescendingChangeDateComparator;
import com.celements.web.comparators.XWikiAttachmentDescendingNameComparator;
import com.xpn.xwiki.XWiki;
import com.xpn.xwiki.XWikiContext;
import com.xpn.xwiki.XWikiException;
import com.xpn.xwiki.api.Attachment;
import com.xpn.xwiki.doc.XWikiAttachment;
import com.xpn.xwiki.doc.XWikiDocument;
import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.render.XWikiRenderingEngine;
import com.xpn.xwiki.user.api.XWikiGroupService;
import com.xpn.xwiki.user.api.XWikiRightService;
import com.xpn.xwiki.user.api.XWikiUser;
import com.xpn.xwiki.web.Utils;
import com.xpn.xwiki.web.XWikiRequest;
public class WebUtilsServiceTest extends AbstractComponentTest {
private XWikiContext context;
private XWiki xwiki;
private WebUtilsService webUtilsService;
@Before
public void setUp_WebUtilsServiceTest() throws Exception {
context = getContext();
xwiki = getWikiMock();
webUtilsService = (WebUtilsService) Utils.getComponent(IWebUtilsService.class);
expect(xwiki.isVirtualMode()).andReturn(true).anyTimes();
webUtilsService.docParentsLister = createMockAndAddToDefault(IDocumentParentsListerRole.class);
}
@After
public void tearDown_WebUtilsServiceTest() throws Exception {
webUtilsService.docParentsLister = null;
}
@Test
public void testGetParentForLevel_1() throws Exception {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument doc = new XWikiDocument(docRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(true))).andReturn(
Collections.<DocumentReference>emptyList()).once();
replayDefault();
context.setDoc(doc);
assertNull(webUtilsService.getParentForLevel(1)); // root
verifyDefault();
}
@Test
public void testGetParentForLevel_2() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
DocumentReference parentRef = new DocumentReference(context.getDatabase(), "mySpace",
"parent1");
XWikiDocument doc = new XWikiDocument(docRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(true))).andReturn(
Arrays.asList(docRef, parentRef)).once();
replayDefault();
context.setDoc(doc);
assertEquals(parentRef, webUtilsService.getParentForLevel(2));
verifyDefault();
}
@Test
public void testGetParentForLevel_3() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
DocumentReference parentRef = new DocumentReference(context.getDatabase(), "mySpace",
"parent1");
XWikiDocument doc = new XWikiDocument(docRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(true))).andReturn(
Arrays.asList(docRef, parentRef)).once();
replayDefault();
context.setDoc(doc);
assertEquals(docRef, webUtilsService.getParentForLevel(3));
verifyDefault();
}
@Test
public void testGetParentForLevel_IndexOutOfBounds() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
DocumentReference parentRef = new DocumentReference(context.getDatabase(), "mySpace",
"parent1");
XWikiDocument doc = new XWikiDocument(docRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(true))).andReturn(
Arrays.asList(docRef, parentRef)).times(3);
replayDefault();
context.setDoc(doc);
assertNull(webUtilsService.getParentForLevel(4));
assertNull(webUtilsService.getParentForLevel(0));
assertNull(webUtilsService.getParentForLevel(-1));
verifyDefault();
}
@Test
@Deprecated
public void testGetDocumentParentsList() throws XWikiException {
boolean includeDoc = false;
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
DocumentReference parentRef = new DocumentReference(context.getDatabase(), "mySpace",
"parent1");
List<DocumentReference> docParentsList = Arrays.asList(parentRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(
includeDoc))).andReturn(docParentsList).once();
replayDefault();
assertSame(docParentsList, webUtilsService.getDocumentParentsList(docRef, includeDoc));
verifyDefault();
}
@Test
@Deprecated
public void testGetDocumentParentsList_includeDoc() throws XWikiException {
boolean includeDoc = true;
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
DocumentReference parentRef = new DocumentReference(context.getDatabase(), "mySpace",
"parent1");
List<DocumentReference> docParentsList = Arrays.asList(parentRef);
expect(webUtilsService.docParentsLister.getDocumentParentsList(eq(docRef), eq(
includeDoc))).andReturn(docParentsList).once();
replayDefault();
assertSame(docParentsList, webUtilsService.getDocumentParentsList(docRef, includeDoc));
verifyDefault();
}
@Test
public void testGetDocSectionAsJSON() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
transDoc.setContent("abc<table>blabla</table><table>abc</table>");
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
XWikiRenderingEngine mockRenderer = createMock(XWikiRenderingEngine.class);
expect(xwiki.getRenderingEngine()).andReturn(mockRenderer).atLeastOnce();
expect(mockRenderer.renderText(eq("{pre}<table>blabla</table>{/pre}"), eq(context.getDoc()),
same(context))).andReturn("<table>blabla</table>").atLeastOnce();
replayDefault(doc, mockRenderer);
String json = "[{\"content\" : \"<table>blabla</table>\", \"section\" : 2,"
+ " \"sectionNr\" : 3}]";
assertEquals(json, webUtilsService.getDocSectionAsJSON("(?=<table)", docRef, 2));
verifyDefault(doc, mockRenderer);
}
@Test
public void testGetDocSection_empty() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).once();
expect(doc.getTranslatedDocument(same(context))).andReturn(new XWikiDocument(
transDocRef)).once();
replayDefault(doc);
assertNull(webUtilsService.getDocSection("(?=<table)", docRef, 1));
verifyDefault(doc);
}
@Test
public void testGetDocSection_first() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
transDoc.setContent("abc<table>blabla</table><table>abc</table>");
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
XWikiRenderingEngine mockRenderer = createMock(XWikiRenderingEngine.class);
expect(xwiki.getRenderingEngine()).andReturn(mockRenderer).atLeastOnce();
expect(mockRenderer.renderText(eq("{pre}abc{/pre}"), eq(context.getDoc()), same(
context))).andReturn("abc").atLeastOnce();
replayDefault(doc, mockRenderer);
assertEquals("abc", webUtilsService.getDocSection("(?=<table)", docRef, 1));
verifyDefault(doc, mockRenderer);
}
@Test
public void testGetDocSection_firstEmptyRTE() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
transDoc.setContent("<p></p> <br /> \n<table>blabla</table><table>abc</table>");
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
XWikiRenderingEngine mockRenderer = createMock(XWikiRenderingEngine.class);
expect(xwiki.getRenderingEngine()).andReturn(mockRenderer).atLeastOnce();
expect(mockRenderer.renderText(eq("{pre}<table>blabla</table>{/pre}"), eq(context.getDoc()),
same(context))).andReturn("<table>blabla</table>").atLeastOnce();
replayDefault(doc, mockRenderer);
assertEquals("<table>blabla</table>", webUtilsService.getDocSection("(?=<table)", docRef, 1));
verifyDefault(doc, mockRenderer);
}
@Test
public void testGetDocSection_middle() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
transDoc.setContent("abc<table>blabla</table><table>abc</table>");
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
XWikiRenderingEngine mockRenderer = createMock(XWikiRenderingEngine.class);
expect(xwiki.getRenderingEngine()).andReturn(mockRenderer).atLeastOnce();
expect(mockRenderer.renderText(eq("{pre}<table>blabla</table>{/pre}"), eq(context.getDoc()),
same(context))).andReturn("<table>blabla</table>").atLeastOnce();
replayDefault(doc, mockRenderer);
assertEquals("<table>blabla</table>", webUtilsService.getDocSection("(?=<table)", docRef, 2));
verifyDefault(doc, mockRenderer);
}
@Test
public void testGetDocSection_last() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
transDoc.setContent("abc<table>blabla</table><table>abc</table>");
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
XWikiRenderingEngine mockRenderer = createMock(XWikiRenderingEngine.class);
expect(xwiki.getRenderingEngine()).andReturn(mockRenderer).atLeastOnce();
expect(mockRenderer.renderText(eq("{pre}<table>abc</table>{/pre}"), eq(context.getDoc()), same(
context))).andReturn("<table>abc</table>").atLeastOnce();
replayDefault(doc, mockRenderer);
assertEquals("<table>abc</table>", webUtilsService.getDocSection("(?=<table)", docRef, 3));
verifyDefault(doc, mockRenderer);
}
@Test
public void testCountSections_empty() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).once();
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).once();
replayDefault(doc);
assertEquals(0, webUtilsService.countSections("", docRef));
verifyDefault(doc);
}
@Test
public void testCountSections_one() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
transDoc.setContent("<table>blabla</table>");
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
replayDefault(doc);
assertEquals(1, webUtilsService.countSections("(?=<table)", docRef));
verifyDefault(doc);
}
@Test
public void testCountSections_emptyRTEStart() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
transDoc.setContent("<table>blabla</table>");
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
replayDefault(doc);
assertEquals(1, webUtilsService.countSections("(?=<table)", docRef));
verifyDefault(doc);
}
@Test
public void testCountSections_several() throws XWikiException {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "DocName"),
transDocRef = new DocumentReference(context.getDatabase(), "Space", "TransDocName");
XWikiDocument doc = createMock(XWikiDocument.class);
XWikiDocument transDoc = new XWikiDocument(transDocRef);
transDoc.setContent("abc<table>blabla</table><table>abc</table>");
expect(xwiki.getDocument(eq(docRef), same(context))).andReturn(doc).atLeastOnce();
expect(doc.getTranslatedDocument(same(context))).andReturn(transDoc).atLeastOnce();
replayDefault(doc);
assertEquals(3, webUtilsService.countSections("(?=<table)", docRef));
verifyDefault(doc);
}
@Test
public void testGetSectionNr_negative() {
assertEquals(1, webUtilsService.getSectionNr(-3, 5));
}
@Test
public void testGetSectionNr_zero() {
assertEquals(1, webUtilsService.getSectionNr(0, 5));
}
@Test
public void testGetSectionNr_validNr() {
assertEquals(3, webUtilsService.getSectionNr(3, 5));
}
@Test
public void testGetSectionNr_toHighNr() {
assertEquals(5, webUtilsService.getSectionNr(8, 5));
}
@Test
public void testGetAdminLanguage_defaultToDocLanguage() throws XWikiException {
context.setLanguage("de");
String userName = "XWiki.MyUser";
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki", "MyUser");
XWikiDocument userDoc = new XWikiDocument(userDocRef);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(userDoc);
expect(xwiki.getSpacePreference(eq("admin_language"), eq("de"), same(context))).andReturn("de");
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser(userName);
assertEquals("de", webUtilsService.getAdminLanguage());
verifyDefault();
}
@Test
public void testGetAdminLanguage_contextUser() throws XWikiException {
context.setLanguage("de");
String userName = "XWiki.MyUser";
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki", "MyUser");
XWikiDocument userDoc = new XWikiDocument(userDocRef);
DocumentReference xwikiUserClassRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiUsers");
BaseObject userObj = new BaseObject();
userObj.setXClassReference(xwikiUserClassRef);
userObj.setStringValue("admin_language", "fr");
userDoc.setXObject(0, userObj);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(userDoc);
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser(userName);
assertEquals("fr", webUtilsService.getAdminLanguage());
verifyDefault();
}
@Test
@Deprecated
public void testGetAdminLanguage_notContextUser() throws XWikiException {
context.setLanguage("de");
String userName = "XWiki.MyUser";
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki", "MyUser");
XWikiDocument userDoc = new XWikiDocument(userDocRef);
DocumentReference xwikiUserClassRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiUsers");
BaseObject userObj = new BaseObject();
userObj.setXClassReference(xwikiUserClassRef);
userObj.setStringValue("admin_language", "fr");
userDoc.setXObject(0, userObj);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(userDoc);
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.NotMyUser");
assertEquals("fr", webUtilsService.getAdminLanguage(userName));
verifyDefault();
}
@Test
@Deprecated
public void testGetAdminLanguage_defaultToWebPreferences() throws XWikiException {
context.setLanguage("de");
String userName = "XWiki.MyUser";
expect(xwiki.getSpacePreference(eq("admin_language"), isA(String.class), same(
context))).andReturn("en");
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki", "MyUser");
XWikiDocument userDoc = new XWikiDocument(userDocRef);
DocumentReference xwikiUserClassRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiUsers");
BaseObject userObj = new BaseObject();
userObj.setXClassReference(xwikiUserClassRef);
userObj.setStringValue("admin_language", "");
userDoc.setXObject(0, userObj);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(userDoc);
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.NotMyUser");
assertEquals("en", webUtilsService.getAdminLanguage(userName));
verifyDefault();
}
@Test
public void testGetAdminLanguage_emptySpaceLanguage() throws Exception {
String systemDefaultAdminLang = "en";
context.setLanguage("de");
String userName = "XWiki.MyUser";
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki", "MyUser");
XWikiDocument userDoc = new XWikiDocument(userDocRef);
DocumentReference xwikiUserClassRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiUsers");
BaseObject userObj = new BaseObject();
userObj.setXClassReference(xwikiUserClassRef);
userObj.setStringValue("admin_language", "");
userDoc.setXObject(0, userObj);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(userDoc);
expect(xwiki.getSpacePreference(eq("admin_language"), eq("de"), same(context))).andReturn("");
expect(xwiki.Param(eq("celements.admin_language"))).andReturn("");
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser(userName);
assertEquals(systemDefaultAdminLang, webUtilsService.getAdminLanguage());
verifyDefault();
}
@Test
public void testIsAdminUser_noAdminRights_noRightsService() {
DocumentReference currentDocRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
context.setDoc(new XWikiDocument(currentDocRef));
expect(xwiki.getRightService()).andReturn(null).anyTimes();
replayDefault();
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.TestUser");
assertFalse(webUtilsService.isAdminUser());
verifyDefault();
}
@Test
public void testIsAdminUser_noContextDoc() {
context.setDoc(null);
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
// hasAdminRights must not be called it will fail with an NPE
replayDefault(mockRightsService);
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.TestUser");
assertFalse(webUtilsService.isAdminUser());
verifyDefault(mockRightsService);
}
@Test
public void testIsAdminUser_noAdminRights_notInAdminGroup() throws Exception {
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki",
"TestUser");
DocumentReference currentDocRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
context.setDoc(new XWikiDocument(currentDocRef));
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAdminRights(same(context))).andReturn(false).anyTimes();
XWikiGroupService groupServiceMock = createMock(XWikiGroupService.class);
expect(xwiki.getGroupService(same(context))).andReturn(groupServiceMock);
List<DocumentReference> emptyGroupList = Collections.emptyList();
expect(groupServiceMock.getAllGroupsReferencesForMember(eq(userDocRef), eq(0), eq(0), same(
context))).andReturn(emptyGroupList).atLeastOnce();
replayDefault(mockRightsService, groupServiceMock);
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.TestUser");
assertFalse(webUtilsService.isAdminUser());
verifyDefault(mockRightsService, groupServiceMock);
}
@Test
public void testIsAdminUser_noAdminRights_isInAdminGroup() throws Exception {
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki",
"TestUser");
DocumentReference currentDocRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
context.setDoc(new XWikiDocument(currentDocRef));
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAdminRights(same(context))).andReturn(false).anyTimes();
XWikiGroupService groupServiceMock = createMock(XWikiGroupService.class);
expect(xwiki.getGroupService(same(context))).andReturn(groupServiceMock);
DocumentReference adminGroupDocRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiAdminGroup");
expect(groupServiceMock.getAllGroupsReferencesForMember(eq(userDocRef), eq(0), eq(0), same(
context))).andReturn(Arrays.asList(adminGroupDocRef)).atLeastOnce();
replayDefault(mockRightsService, groupServiceMock);
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.TestUser");
assertTrue(webUtilsService.isAdminUser());
verifyDefault(mockRightsService, groupServiceMock);
}
@Test
public void testIsAdminUser_adminRights_notInAdminGroup() {
DocumentReference currentDocRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
context.setDoc(new XWikiDocument(currentDocRef));
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAdminRights(same(context))).andReturn(true).anyTimes();
replayDefault(mockRightsService);
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.TestUser");
assertNotNull(context.getXWikiUser());
assertNotNull(context.getDoc());
assertTrue(webUtilsService.isAdminUser());
verifyDefault(mockRightsService);
}
@Test
public void testIsAdvancedAdmin_NPE_noUserObj() throws Exception {
DocumentReference userDocRef = new DocumentReference(context.getDatabase(), "XWiki",
"XWikiGuest");
DocumentReference currentDocRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
context.setDoc(new XWikiDocument(currentDocRef));
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAdminRights(same(context))).andReturn(true).anyTimes();
XWikiDocument guestUserDoc = new XWikiDocument(userDocRef);
expect(xwiki.getDocument(eq(userDocRef), same(context))).andReturn(guestUserDoc).anyTimes();
replayDefault(mockRightsService);
// context.setUser calls xwiki.isVirtualMode in xwiki version 4.5 thus why it must be
// set after calling replay
context.setUser("XWiki.XWikiGuest");
assertNotNull(context.getXWikiUser());
assertNotNull(context.getDoc());
assertFalse(webUtilsService.isAdvancedAdmin());
verifyDefault(mockRightsService);
}
@Test
@Deprecated
public void testHasAccessLevel_docRef() throws Exception {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
EAccessLevel level = EAccessLevel.EDIT;
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAccessLevel(eq(level.getIdentifier()), eq(getContext().getUser()),
eq(webUtilsService.serializeRef(docRef)), same(context))).andReturn(true).once();
replayDefault(mockRightsService);
assertTrue(webUtilsService.hasAccessLevel(docRef, level));
verifyDefault(mockRightsService);
}
@Test
@Deprecated
public void testHasAccessLevel_attRef() throws Exception {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
AttachmentReference attRef = new AttachmentReference("file", docRef);
EAccessLevel level = EAccessLevel.EDIT;
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAccessLevel(eq(level.getIdentifier()), eq(getContext().getUser()),
eq(webUtilsService.serializeRef(docRef)), same(context))).andReturn(true).once();
replayDefault(mockRightsService);
assertTrue(webUtilsService.hasAccessLevel(attRef, level));
verifyDefault(mockRightsService);
}
@Test
@Deprecated
public void testHasAccessLevel_wikiRefRef() throws Exception {
EAccessLevel level = EAccessLevel.EDIT;
replayDefault();
assertFalse(webUtilsService.hasAccessLevel(webUtilsService.getWikiRef(), level));
verifyDefault();
}
@Test
@Deprecated
public void testHasAccessLevel_user() throws Exception {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "MySpace",
"MyDocument");
EAccessLevel level = EAccessLevel.VIEW;
XWikiUser user = new XWikiUser("MySpace.MyUser");
XWikiRightService mockRightsService = createMock(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAccessLevel(eq(level.getIdentifier()), eq(user.getUser()), eq(
webUtilsService.serializeRef(docRef)), same(context))).andReturn(false).once();
replayDefault(mockRightsService);
assertFalse(webUtilsService.hasAccessLevel(docRef, level, user));
verifyDefault(mockRightsService);
}
@Test
@Deprecated
public void testSerializeRef_null() {
assertNull(webUtilsService.serializeRef(null));
}
@Test
@Deprecated
public void testSerializeRef_local_null() {
assertNull(webUtilsService.serializeRef(null, true));
}
@Test
@Deprecated
public void testSerializeRef_default_null() {
assertNull(webUtilsService.serializeRef(null, false));
}
@Test
public void testReplaceInternalWithExternalLinks_nothingToReplace() {
String host = "www.bla.com";
String test = "test";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_img_nothingToReplace() {
String host = "www.bla.com/";
String test = "<img src=\"http://www.bla.com/download/A/B/test.img\" />";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_img_newInternal() {
String host = "www.bla.com";
String test = "<img src=\"/download/A/B/test.img\" />";
String result = "<img src=\"http://" + host + "/download/A/B/test.img\" />";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_img_dotInternal() {
String host = "www.bla.com";
String test = "<img src=\"../../download/A/B/test.img\" />";
String result = "<img src=\"http://" + host + "/download/A/B/test.img\" />";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_href_nothingToReplace() {
String host = "www.bla.com";
String test = "<a href=\"http://www.bla.com/download/A/B/test.pdf\" >bla</a>";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"http://www.bla.com/skin/A/B/test.css\" >bla</a>";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"http://www.bla.com/view/A/B\" >bla</a>";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"http://www.bla.com/edit/A/B\" >bla</a>";
assertEquals(test, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_href_newInternal() {
String host = "www.bla.com";
String test = "<a href=\"/download/A/B/test.pdf\" >bla</a>";
String result = "<a href=\"http://" + host + "/download/A/B/test.pdf\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"/skin/A/B/test.css\" >bla</a>";
result = "<a href=\"http://" + host + "/skin/A/B/test.css\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"/view/A/B\" >bla</a>";
result = "<a href=\"http://" + host + "/view/A/B\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"/edit/A/B\" >bla</a>";
result = "<a href=\"http://" + host + "/edit/A/B\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testReplaceInternalWithExternalLinks_href_dotInternal() {
String host = "www.bla.com";
String test = "<a href=\"../../download/A/B/test.pdf\" >bla</a>";
String result = "<a href=\"http://" + host + "/download/A/B/test.pdf\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"../../skin/A/B/test.css\" >bla</a>";
result = "<a href=\"http://" + host + "/skin/A/B/test.css\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"../../download/A/B\" >bla</a>";
result = "<a href=\"http://" + host + "/download/A/B\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
test = "<a href=\"../../download/A/B\" >bla</a>";
result = "<a href=\"http://" + host + "/download/A/B\" >bla</a>";
assertEquals(result, webUtilsService.replaceInternalWithExternalLinks(test, host));
}
@Test
public void testGetMajorVersion_nullDoc() {
assertEquals("1", webUtilsService.getMajorVersion(null));
}
@Test
public void testGetMajorVersion_noVersionSet() {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "Doc");
XWikiDocument doc = new XWikiDocument(docRef);
assertEquals("1", webUtilsService.getMajorVersion(doc));
}
@Test
public void testGetMajorVersion() {
DocumentReference docRef = new DocumentReference(context.getDatabase(), "Space", "Doc");
XWikiDocument doc = new XWikiDocument(docRef);
doc.setVersion("28.82");
assertEquals("28", webUtilsService.getMajorVersion(doc));
}
@Test
public void testResolveEntityReference_default() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference ref = new SpaceReference("mySpace", wikiRef);
EntityReference ret = webUtilsService.resolveEntityReference(
webUtilsService.getRefDefaultSerializer().serialize(ref), EntityType.SPACE);
assertEquals(wikiRef, webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveEntityReference_default_withRef() {
WikiReference wikiRef = new WikiReference("db");
WikiReference otherWikiRef = new WikiReference("otherDB");
SpaceReference ref = new SpaceReference("mySpace", wikiRef);
EntityReference ret = webUtilsService.resolveEntityReference(
webUtilsService.getRefDefaultSerializer().serialize(ref), EntityType.SPACE, otherWikiRef);
assertEquals(wikiRef, webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveEntityReference_default_withNullRef() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference ref = new SpaceReference("mySpace", wikiRef);
EntityReference ret = webUtilsService.resolveEntityReference(
webUtilsService.getRefDefaultSerializer().serialize(ref), EntityType.SPACE, null);
assertEquals(wikiRef, webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveEntityReference_local() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference ref = new SpaceReference("mySpace", wikiRef);
EntityReference ret = webUtilsService.resolveEntityReference(
webUtilsService.getRefLocalSerializer().serialize(ref), EntityType.SPACE);
assertEquals(new WikiReference(context.getDatabase()), webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveEntityReference_local_withRef() {
WikiReference wikiRef = new WikiReference("db");
WikiReference otherWikiRef = new WikiReference("otherDB");
SpaceReference ref = new SpaceReference("mySpace", wikiRef);
EntityReference ret = webUtilsService.resolveEntityReference(
webUtilsService.getRefLocalSerializer().serialize(ref), EntityType.SPACE, otherWikiRef);
assertEquals(otherWikiRef, webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveEntityReference_local_withNullRef() {
EntityReference ret = webUtilsService.resolveEntityReference("mySpace", EntityType.SPACE, null);
assertEquals(new WikiReference(context.getDatabase()), webUtilsService.getWikiRef(ret));
}
@Test
public void testResolveRelativeEntityReference() {
EntityReference relativeEntityRef = webUtilsService.resolveRelativeEntityReference(
"MySpace.ParentDoc", EntityType.DOCUMENT);
assertEquals(EntityReference.class, relativeEntityRef.getClass());
assertNull(relativeEntityRef.extractReference(EntityType.WIKI));
assertEquals("ParentDoc", relativeEntityRef.getName());
assertEquals("MySpace", relativeEntityRef.extractReference(EntityType.SPACE).getName());
}
@Test
public void test_resolveWikiReference() {
String wikiName = "wiki";
assertEquals(new WikiReference(wikiName), webUtilsService.resolveWikiReference(wikiName));
assertEquals(webUtilsService.getWikiRef(), webUtilsService.resolveWikiReference(null));
assertEquals(webUtilsService.getWikiRef(), webUtilsService.resolveWikiReference(""));
}
@Test
public void testResolveSpaceReference() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference spaceRef = new SpaceReference("mySpace", wikiRef);
SpaceReference ret = webUtilsService.resolveSpaceReference(
webUtilsService.getRefDefaultSerializer().serialize(spaceRef));
assertEquals(spaceRef, ret);
}
@Test
public void testResolveDocumentReference() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference spaceRef = new SpaceReference("mySpace", wikiRef);
DocumentReference docRef = new DocumentReference("myDoc", spaceRef);
DocumentReference ret = webUtilsService.resolveDocumentReference(
webUtilsService.getRefDefaultSerializer().serialize(docRef));
assertEquals(docRef, ret);
}
@Test
public void testResolveAttachmentReference() {
WikiReference wikiRef = new WikiReference("db");
SpaceReference spaceRef = new SpaceReference("mySpace", wikiRef);
DocumentReference docRef = new DocumentReference("myDoc", spaceRef);
AttachmentReference attRef = new AttachmentReference("myFile", docRef);
AttachmentReference ret = webUtilsService.resolveAttachmentReference(
webUtilsService.getRefDefaultSerializer().serialize(attRef));
assertEquals(attRef, ret);
}
@Test
public void testGetObjectsOrdered_docNull() {
List<BaseObject> list = webUtilsService.getObjectsOrdered(null, getBOClassRef(), "", false);
assertNotNull(list);
assertEquals(0, list.size());
}
@Test
public void testGetObjectsOrdered_noObjects() {
XWikiDocument doc = new XWikiDocument(new DocumentReference(context.getDatabase(), "S", "D"));
List<BaseObject> list = webUtilsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true,
"s2", false);
assertNotNull(list);
assertEquals(0, list.size());
}
@Test
public void testGetObjectsOrdered_oneObject() {
XWikiDocument doc = new XWikiDocument(new DocumentReference(context.getDatabase(), "S", "D"));
doc.addXObject(getSortTestBaseObjects().get(0));
List<BaseObject> list = webUtilsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true,
"s2", true);
assertEquals(1, list.size());
}
@Test
public void testGetObjectsOrdered_onlyOneFieldSort() {
XWikiDocument doc = new XWikiDocument(new DocumentReference(context.getDatabase(), "S", "D"));
for (BaseObject obj : getSortTestBaseObjects()) {
doc.addXObject(obj);
}
List<BaseObject> list = webUtilsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true);
assertEquals(5, list.size());
assertEquals("a", list.get(0).getStringValue("s1"));
assertEquals("b", list.get(1).getStringValue("s1"));
assertEquals("t", list.get(1).getStringValue("s2"));
assertEquals("b", list.get(2).getStringValue("s1"));
assertEquals("s", list.get(2).getStringValue("s2"));
assertEquals("c", list.get(3).getStringValue("s1"));
assertEquals("d", list.get(4).getStringValue("s1"));
}
@Test
public void testGetObjectsOrdered_severalObjects_asc() {
XWikiDocument doc = new XWikiDocument(new DocumentReference(context.getDatabase(), "S", "D"));
for (BaseObject obj : getSortTestBaseObjects()) {
doc.addXObject(obj);
}
List<BaseObject> list = webUtilsService.getObjectsOrdered(doc, getBOClassRef(), "s1", true, "d",
true);
assertEquals(5, list.size());
assertEquals("a", list.get(0).getStringValue("s1"));
assertEquals("b", list.get(1).getStringValue("s1"));
assertEquals(new Date(200l), list.get(1).getDateValue("d"));
assertEquals("b", list.get(2).getStringValue("s1"));
assertEquals(new Date(400l), list.get(2).getDateValue("d"));
assertEquals("c", list.get(3).getStringValue("s1"));
assertEquals("d", list.get(4).getStringValue("s1"));
}
@Test
public void testGetObjectsOrdered_severalObjects_desc() {
XWikiDocument doc = new XWikiDocument(new DocumentReference(context.getDatabase(), "S", "D"));
for (BaseObject obj : getSortTestBaseObjects()) {
doc.addXObject(obj);
}
List<BaseObject> list = webUtilsService.getObjectsOrdered(doc, getBOClassRef(), "i", false, "l",
false);
assertEquals(5, list.size());
assertEquals(3, list.get(0).getIntValue("i"));
assertEquals(2, list.get(1).getIntValue("i"));
assertEquals(4, list.get(1).getIntValue("l"));
assertEquals(2, list.get(2).getIntValue("i"));
assertEquals(3, list.get(2).getIntValue("l"));
assertEquals(2, list.get(3).getIntValue("i"));
assertEquals(1, list.get(3).getIntValue("l"));
assertEquals(1, list.get(4).getIntValue("i"));
}
@Test
public void testSplitStringByLength_noEmptyTrailingFields() {
String testString = ("Market Leader. Business Grammar and" + " Usage, Band 1").substring(0, 35);
String[] splitedStr = webUtilsService.splitStringByLength(testString, 35);
assertEquals("Market Leader. Business Grammar and", splitedStr[0]);
assertTrue("Expecting one Element but found [" + splitedStr.length + "].",
splitedStr.length == 1);
}
@Test
public void testSplitStringByLength() {
String[] splitedStr = webUtilsService.splitStringByLength(
"Market Leader. Business Grammar and Usage, Band 1", 35);
assertEquals("Market Leader. Business Grammar and", splitedStr[0]);
assertEquals(" Usage, Band 1", splitedStr[1]);
}
@Test
public void testReduceListToSize_all() {
Attachment att1 = createMock(Attachment.class);
Attachment att2 = createMock(Attachment.class);
Attachment att3 = createMock(Attachment.class);
List<Attachment> attachments = Arrays.asList(att1, att2, att3);
replayDefault(att1, att2, att3);
List<Attachment> resultList = webUtilsService.reduceListToSize(attachments, 0, 5);
assertEquals(3, resultList.size());
assertTrue(resultList.contains(att1));
assertTrue(resultList.contains(att2));
assertTrue(resultList.contains(att3));
verifyDefault(att1, att2, att3);
}
@Test
public void testReduceListToSize_first() {
Attachment att1 = createMock(Attachment.class);
Attachment att2 = createMock(Attachment.class);
Attachment att3 = createMock(Attachment.class);
List<Attachment> attachments = Arrays.asList(att1, att2, att3);
replayDefault(att1, att2, att3);
List<Attachment> resultList = webUtilsService.reduceListToSize(attachments, 0, 2);
assertEquals(2, resultList.size());
assertTrue(resultList.contains(att1));
assertTrue(resultList.contains(att2));
assertFalse(resultList.contains(att3));
verifyDefault(att1, att2, att3);
}
@Test
public void testReduceListToSize_last() {
Attachment att1 = createMock(Attachment.class);
Attachment att2 = createMock(Attachment.class);
Attachment att3 = createMock(Attachment.class);
List<Attachment> attachments = Arrays.asList(att1, att2, att3);
replayDefault(att1, att2, att3);
List<Attachment> resultList = webUtilsService.reduceListToSize(attachments, 1, 5);
assertEquals(2, resultList.size());
assertFalse(resultList.contains(att1));
assertTrue(resultList.contains(att2));
assertTrue(resultList.contains(att3));
verifyDefault(att1, att2, att3);
}
@Test
public void testGetWikiRef() {
String wikiName = context.getDatabase();
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef());
verifyDefault();
}
@Test
public void testGetWikiRef_attRef() {
String wikiName = "myTestWikiName";
AttachmentReference attRef = new AttachmentReference("myFile.jpg", new DocumentReference(
wikiName, "mySpaceName", "myDocName"));
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef(attRef));
verifyDefault();
}
@Test
public void testGetWikiRef_docRef() {
String wikiName = "myTestWikiName";
DocumentReference docRef = new DocumentReference(wikiName, "mySpaceName", "myDocName");
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef(docRef));
verifyDefault();
}
@Test
public void testGetWikiRef_spaceRef() {
WikiReference wikiRef = new WikiReference("myTestWikiName");
SpaceReference spaceRef = new SpaceReference("mySpaceName", wikiRef);
replayDefault();
assertEquals(wikiRef, webUtilsService.getWikiRef(spaceRef));
verifyDefault();
}
@Test
public void testGetWikiRef_wikiRef() {
WikiReference wikiRef = new WikiReference("myTestWikiName");
replayDefault();
assertEquals(wikiRef, webUtilsService.getWikiRef(wikiRef));
verifyDefault();
}
@Test
public void testGetWikiRef_entityRef() {
EntityReference wikiRef = new EntityReference("myTestWikiName", EntityType.WIKI);
EntityReference ref = new EntityReference("mySpaceName", EntityType.SPACE, wikiRef);
replayDefault();
assertEquals(wikiRef, webUtilsService.getWikiRef(ref));
verifyDefault();
}
@Test
public void testGetWikiRef_null() {
String wikiName = context.getDatabase();
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef((DocumentReference) null));
verifyDefault();
}
@Test
public void testGetWikiRef_doc() {
String wikiName = "myTestWikiName";
DocumentReference docRef = new DocumentReference(wikiName, "mySpaceName", "myDocName");
XWikiDocument doc = new XWikiDocument(docRef);
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef(doc));
verifyDefault();
}
@Test
public void testGetWikiRef_doc_null() {
String wikiName = context.getDatabase();
replayDefault();
assertEquals(new WikiReference(wikiName), webUtilsService.getWikiRef((XWikiDocument) null));
verifyDefault();
}
@Test
public void testGetAllowedLanguages_NPE() {
context.setDoc(null);
replayDefault();
List<String> resultList = Arrays.asList();
assertEquals("Expect empty list if no context or current doc available.", resultList,
webUtilsService.getAllowedLanguages());
verifyDefault();
}
@Test
public void testGetAllowedLanguages_WebPreferences() {
DocumentReference curDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument currentDoc = new XWikiDocument(curDocRef);
context.setDoc(currentDoc);
expect(xwiki.getXWikiPreference(eq("languages"), same(context))).andReturn("fr,it").anyTimes();
expect(xwiki.getSpacePreference(eq("languages"), eq("mySpace"), eq(""), same(
context))).andReturn("de,en").once();
replayDefault();
List<String> resultList = Arrays.asList("de", "en");
assertEquals("Expect languages from space preferences", resultList,
webUtilsService.getAllowedLanguages());
verifyDefault();
}
@Test
public void testGetAllowedLanguages_spaceName_WebPreferences() {
DocumentReference curDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument currentDoc = new XWikiDocument(curDocRef);
context.setDoc(currentDoc);
expect(xwiki.getXWikiPreference(eq("languages"), same(context))).andReturn("fr,it").anyTimes();
expect(xwiki.getSpacePreference(eq("languages"), eq("testSpace"), eq(""), same(
context))).andReturn("de,en").once();
replayDefault();
List<String> resultList = Arrays.asList("de", "en");
assertEquals("Expect languages from space preferences", resultList,
webUtilsService.getAllowedLanguages("testSpace"));
verifyDefault();
}
@Test
public void testGetAllowedLanguages_deprecatedUsageOfFieldLanguage() {
DocumentReference curDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument currentDoc = new XWikiDocument(curDocRef);
context.setDoc(currentDoc);
expect(xwiki.getSpacePreference(eq("languages"), eq("mySpace"), eq(""), same(
context))).andReturn("").once();
expect(xwiki.getXWikiPreference(eq("language"), same(context))).andReturn("fr it").anyTimes();
expect(xwiki.getSpacePreference(eq("language"), eq("mySpace"), eq(""), same(
context))).andReturn("de en").once();
replayDefault();
List<String> resultList = Arrays.asList("de", "en");
assertEquals("Expect languages from space preferences", resultList,
webUtilsService.getAllowedLanguages());
verifyDefault();
}
@Test
public void testGetAllowedLanguages_spaceName_deprecatedUsageOfFieldLanguage() {
DocumentReference curDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument currentDoc = new XWikiDocument(curDocRef);
context.setDoc(currentDoc);
expect(xwiki.getSpacePreference(eq("languages"), eq("testSpace"), eq(""), same(
context))).andReturn("").once();
expect(xwiki.getXWikiPreference(eq("language"), same(context))).andReturn("fr it").anyTimes();
expect(xwiki.getSpacePreference(eq("language"), eq("testSpace"), eq(""), same(
context))).andReturn("de en").once();
replayDefault();
List<String> resultList = Arrays.asList("de", "en");
assertEquals("Expect languages from space preferences", resultList,
webUtilsService.getAllowedLanguages("testSpace"));
verifyDefault();
}
@Test
public void testGetParentSpace() {
expect(xwiki.getSpacePreference(eq("parent"), same(context))).andReturn(
"parentSpaceName").atLeastOnce();
replayDefault();
assertEquals("parentSpaceName", webUtilsService.getParentSpace());
verifyDefault();
}
@Test
public void testGetParentSpace_spaceName() {
expect(xwiki.getSpacePreference(eq("parent"), eq("mySpace"), eq(""), same(context))).andReturn(
"parentSpaceName").atLeastOnce();
replayDefault();
assertEquals("parentSpaceName", webUtilsService.getParentSpace("mySpace"));
verifyDefault();
}
@Test
public void testGetRequestParameterMap_none() {
replayDefault();
Map<String, String[]> requestMap = webUtilsService.getRequestParameterMap();
verifyDefault();
assertNull(requestMap);
}
@Test
public void testGetRequestParameterMap() {
XWikiRequest mockXWikiRequest = createMock(XWikiRequest.class);
context.setRequest(mockXWikiRequest);
Map<Object, Object> requestMap = new HashMap<>();
requestMap.put("asdf", "1");
requestMap.put("qwer", new String[] { "2", "3" });
expect(mockXWikiRequest.getParameterMap()).andReturn(requestMap).once();
replayDefault(mockXWikiRequest);
Map<String, String[]> request = webUtilsService.getRequestParameterMap();
verifyDefault(mockXWikiRequest);
assertNotNull(request);
assertEquals(2, request.size());
String[] arr1 = request.get("asdf");
assertNotNull(arr1);
assertEquals(1, arr1.length);
assertEquals("1", arr1[0]);
String[] arr2 = request.get("qwer");
assertNotNull(arr2);
assertEquals(2, arr2.length);
assertEquals("2", arr2[0]);
assertEquals("3", arr2[1]);
}
@Test
public void testGetInheritedTemplatedPath_null() {
replayDefault();
assertNull(webUtilsService.getInheritedTemplatedPath(null));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_local_exists() {
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(true).once();
replayDefault();
assertEquals("Templates.myView", webUtilsService.getInheritedTemplatedPath(localTemplateRef));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_central_exists() {
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(true).once();
replayDefault();
assertEquals("celements2web:Templates.myView", webUtilsService.getInheritedTemplatedPath(
localTemplateRef));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_inital_central_exists() {
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(true).once();
replayDefault();
assertEquals("celements2web:Templates.myView", webUtilsService.getInheritedTemplatedPath(
centralTemplateRef));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_inital_central_notExists() {
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
replayDefault();
assertEquals(":Templates.myView", webUtilsService.getInheritedTemplatedPath(
centralTemplateRef));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_disk_no_local_no_central() {
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
replayDefault();
assertEquals(":Templates.myView", webUtilsService.getInheritedTemplatedPath(localTemplateRef));
verifyDefault();
}
@Test
public void testGetInheritedTemplatedPath_disk_inital_central() {
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
replayDefault();
assertEquals(":Templates.myView", webUtilsService.getInheritedTemplatedPath(
centralTemplateRef));
verifyDefault();
}
@Test
public void testGetTemplatePathOnDisk_Template() {
assertEquals("/templates/celTemplates/myScript.vm", webUtilsService.getTemplatePathOnDisk(
":Templates.myScript"));
}
@Test
public void testGetTemplatePathOnDisk_Ajax() {
assertEquals("/templates/celAjax/myScript.vm", webUtilsService.getTemplatePathOnDisk(
":Ajax.myScript"));
}
@Test
public void testRenderInheritableDocument_local_exists() throws Exception {
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(true).once();
XWikiDocument localTemplateDocDef = createMockAndAddToDefault(XWikiDocument.class);
expect(localTemplateDocDef.getDocumentReference()).andReturn(localTemplateRef).anyTimes();
expect(xwiki.getDocument(eq(localTemplateRef), same(context))).andReturn(
localTemplateDocDef).once();
String localScriptText = "my expected local script";
expect(localTemplateDocDef.getTranslatedContent(eq("de"), same(context))).andReturn(
localScriptText);
XWikiRenderingEngine mockRenderingEngine = createMockAndAddToDefault(
XWikiRenderingEngine.class);
expect(mockRenderingEngine.getRendererNames()).andReturn(Arrays.asList("velocity",
"groovy")).anyTimes();
String expectedRenderedText = "my expected rendered local script";
expect(mockRenderingEngine.renderText(eq(localScriptText), same(localTemplateDocDef),
(XWikiDocument) isNull(), same(context))).andReturn(expectedRenderedText).once();
replayDefault();
webUtilsService.injectedRenderingEngine = mockRenderingEngine;
assertEquals(expectedRenderedText, webUtilsService.renderInheritableDocument(localTemplateRef,
"de"));
verifyDefault();
}
@Test
public void testRenderInheritableDocument_central_exists() throws Exception {
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(true).once();
XWikiDocument centralTemplateDocDef = createMockAndAddToDefault(XWikiDocument.class);
expect(centralTemplateDocDef.getDocumentReference()).andReturn(centralTemplateRef).anyTimes();
expect(xwiki.getDocument(eq(centralTemplateRef), same(context))).andReturn(
centralTemplateDocDef).once();
String centralScriptText = "my expected central script";
expect(centralTemplateDocDef.getTranslatedContent(eq("en"), same(context))).andReturn(
centralScriptText);
XWikiRenderingEngine mockRenderingEngine = createMockAndAddToDefault(
XWikiRenderingEngine.class);
expect(mockRenderingEngine.getRendererNames()).andReturn(Arrays.asList("velocity",
"groovy")).anyTimes();
String expectedRenderedText = "my expected rendered central script";
expect(mockRenderingEngine.renderText(eq(centralScriptText), same(centralTemplateDocDef),
(XWikiDocument) isNull(), same(context))).andReturn(expectedRenderedText).once();
replayDefault();
webUtilsService.injectedRenderingEngine = mockRenderingEngine;
assertEquals(expectedRenderedText, webUtilsService.renderInheritableDocument(localTemplateRef,
"en"));
verifyDefault();
}
@Test
public void testRenderInheritableDocument_disk_langSpecific_no_local_no_central()
throws Exception {
XWikiRenderingEngine mockRenderingEngine = createMockAndAddToDefault(
XWikiRenderingEngine.class);
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
String diskScriptText = "my expected disk script fr";
expect(xwiki.getResourceContent(eq("/templates/celTemplates/myView_fr.vm"))).andReturn(
diskScriptText).once();
String expectedRenderedText = "my expected rendered disk script";
expect(mockRenderingEngine.renderText(eq(diskScriptText), (XWikiDocument) isNull(),
(XWikiDocument) isNull(), same(context))).andReturn(expectedRenderedText).once();
replayDefault();
webUtilsService.injectedRenderingEngine = mockRenderingEngine;
// TODO check for language doc on disc
assertEquals(expectedRenderedText, webUtilsService.renderInheritableDocument(localTemplateRef,
"fr"));
verifyDefault();
}
@Test
public void testRenderInheritableDocument_disk_noLang_no_local_no_central() throws Exception {
XWikiRenderingEngine mockRenderingEngine = createMockAndAddToDefault(
XWikiRenderingEngine.class);
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
expect(xwiki.getResourceContent(eq("/templates/celTemplates/myView_fr.vm"))).andThrow(
new IOException()).once();
String diskScriptText = "my expected disk script";
expect(xwiki.getResourceContent(eq("/templates/celTemplates/myView.vm"))).andReturn(
diskScriptText).once();
String expectedRenderedText = "my expected rendered disk script";
expect(mockRenderingEngine.renderText(eq(diskScriptText), (XWikiDocument) isNull(),
(XWikiDocument) isNull(), same(context))).andReturn(expectedRenderedText).once();
replayDefault();
webUtilsService.injectedRenderingEngine = mockRenderingEngine;
assertEquals(expectedRenderedText, webUtilsService.renderInheritableDocument(localTemplateRef,
"fr"));
verifyDefault();
}
@Test
public void testRenderInheritableDocument_disk_defLang_no_local_no_central() throws Exception {
XWikiRenderingEngine mockRenderingEngine = createMockAndAddToDefault(
XWikiRenderingEngine.class);
DocumentReference localTemplateRef = new DocumentReference(context.getDatabase(), "Templates",
"myView");
expect(xwiki.exists(eq(localTemplateRef), same(context))).andReturn(false).once();
DocumentReference centralTemplateRef = new DocumentReference("celements2web", "Templates",
"myView");
expect(xwiki.exists(eq(centralTemplateRef), same(context))).andReturn(false).once();
expect(xwiki.getResourceContent(eq("/templates/celTemplates/myView_fr.vm"))).andThrow(
new IOException()).once();
String diskScriptText = "my expected disk script";
expect(xwiki.getResourceContent(eq("/templates/celTemplates/myView_en.vm"))).andReturn(
diskScriptText).once();
String expectedRenderedText = "my expected rendered disk script";
expect(mockRenderingEngine.renderText(eq(diskScriptText), (XWikiDocument) isNull(),
(XWikiDocument) isNull(), same(context))).andReturn(expectedRenderedText).once();
replayDefault();
webUtilsService.injectedRenderingEngine = mockRenderingEngine;
assertEquals(expectedRenderedText, webUtilsService.renderInheritableDocument(localTemplateRef,
"fr", "en"));
verifyDefault();
}
@Test
public void testIsSuperAdminUser() throws Exception {
context.setMainXWiki("main");
context.setDatabase("main");
DocumentReference docRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument doc = new XWikiDocument(docRef);
doc.setParentReference((EntityReference) null);
context.setDoc(doc);
XWikiRightService mockRightsService = createMockAndAddToDefault(XWikiRightService.class);
expect(xwiki.getRightService()).andReturn(mockRightsService).anyTimes();
expect(mockRightsService.hasAdminRights(same(context))).andReturn(true).atLeastOnce();
replayDefault();
// important only call setUser after replayDefault. In unstable-2.0 branch setUser
// calls xwiki.isVirtualMode
context.setUser("XWiki.MyAdmin");
assertNotNull("check precondition", context.getXWikiUser());
assertNotNull("check precondition", context.getDoc());
assertTrue("check precondition", context.isMainWiki());
assertTrue("isSuperAdminUser must be true for admins in Main Wiki.",
webUtilsService.isSuperAdminUser());
verifyDefault();
}
@Test
public void testGetCentralWikiRef() {
assertEquals("celements2web", webUtilsService.getCentralWikiRef().getName());
}
@Test
public void testFilterAttachmentsByTag_null() {
List<Attachment> attachments = new ArrayList<>();
attachments.add(new Attachment(null, null, getContext()));
attachments.add(new Attachment(null, null, getContext()));
List<Attachment> atts = webUtilsService.filterAttachmentsByTag(attachments, null);
assertEquals(2, atts.size());
}
@Test
public void testFilterAttachmentsByTag_empty() {
List<Attachment> attachments = new ArrayList<>();
attachments.add(new Attachment(null, null, getContext()));
attachments.add(new Attachment(null, null, getContext()));
List<Attachment> atts = webUtilsService.filterAttachmentsByTag(attachments, "");
assertEquals(2, atts.size());
}
@Test
public void testFilterAttachmentsByTag_tagDoesNotExist() {
List<Attachment> attachments = new ArrayList<>();
attachments.add(new Attachment(null, null, getContext()));
attachments.add(new Attachment(null, null, getContext()));
expect(xwiki.exists(eq(webUtilsService.resolveDocumentReference("Tag.T")), same(
getContext()))).andReturn(false).once();
replayDefault();
List<Attachment> atts = webUtilsService.filterAttachmentsByTag(attachments, "Tag.T");
verifyDefault();
assertEquals(2, atts.size());
}
@Test
public void testFilterAttachmentsByTag_filterHasNoTagLists() throws XWikiException {
String tagName = "Tag.Tags";
List<Attachment> attachments = new ArrayList<>();
attachments.add(new Attachment(null, null, getContext()));
attachments.add(new Attachment(null, null, getContext()));
DocumentReference tagRef = webUtilsService.resolveDocumentReference(tagName);
DocumentReference tagClassRef = new DocumentReference(getContext().getDatabase(), "Classes",
"FilebaseTag");
expect(xwiki.exists(eq(tagRef), same(getContext()))).andReturn(true).once();
XWikiDocument tagDoc = createDocMock(tagRef);
expect(xwiki.getDocument(eq(tagRef), same(getContext()))).andReturn(tagDoc).once();
expect(tagDoc.getXObjectSize(eq(tagClassRef))).andReturn(0);
replayDefault();
List<Attachment> atts = webUtilsService.filterAttachmentsByTag(attachments, tagName);
verifyDefault();
assertEquals(2, atts.size());
}
@Test
public void testFilterAttachmentsByTag() throws XWikiException {
String tagName = "Tag.Tags";
String docName = "Content_attachments.Filebase";
DocumentReference docRef = new DocumentReference(getContext().getDatabase(),
"Content_attachments", "Filebase");
XWikiDocument theDoc = new XWikiDocument(docRef);
DocumentReference tagRef = webUtilsService.resolveDocumentReference(tagName);
DocumentReference tagClassRef = new DocumentReference(getContext().getDatabase(), "Classes",
"FilebaseTag");
expect(xwiki.exists(eq(tagRef), same(getContext()))).andReturn(true).once();
XWikiDocument tagDoc = createMock(XWikiDocument.class);
expect(tagDoc.clone()).andReturn(tagDoc).anyTimes();
expect(xwiki.getDocument(eq(tagRef), same(getContext()))).andReturn(tagDoc).once();
expect(tagDoc.getXObjectSize(eq(tagClassRef))).andReturn(3);
expect(tagDoc.getXObject(eq(tagClassRef), eq("attachment"), eq(docName + "/abc.jpg"), eq(
false))).andReturn(new BaseObject()).once();
expect(tagDoc.getXObject(eq(tagClassRef), eq("attachment"), eq(docName + "/bcd.jpg"), eq(
false))).andReturn(null).once();
expect(tagDoc.getXObject(eq(tagClassRef), eq("attachment"), eq(docName + "/cde.jpg"), eq(
false))).andReturn(new BaseObject()).once();
List<Attachment> attachments = new ArrayList<>();
attachments.add(new Attachment(theDoc.newDocument(getContext()), new XWikiAttachment(theDoc,
"abc.jpg"), getContext()));
attachments.add(new Attachment(theDoc.newDocument(getContext()), new XWikiAttachment(theDoc,
"bcd.jpg"), getContext()));
attachments.add(new Attachment(theDoc.newDocument(getContext()), new XWikiAttachment(theDoc,
"cde.jpg"), getContext()));
replayDefault(tagDoc);
List<Attachment> atts = webUtilsService.filterAttachmentsByTag(attachments, tagName);
verifyDefault(tagDoc);
assertEquals(2, atts.size());
assertEquals("abc.jpg", atts.get(0).getFilename());
assertEquals("cde.jpg", atts.get(1).getFilename());
}
@Test
public void testGetAttachment() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument attDoc = new XWikiDocument(attDocRef);
XWikiAttachment att = new XWikiAttachment(attDoc, "myFile");
attDoc.setAttachmentList(Arrays.asList(att));
AttachmentReference attRef = new AttachmentReference(att.getFilename(), attDocRef);
expect(xwiki.getDocument(eq(attDocRef), same(context))).andReturn(attDoc).once();
replayDefault();
XWikiAttachment ret = webUtilsService.getAttachment(attRef);
verifyDefault();
assertSame(att, ret);
}
@Test
public void testGetAttachment_notFound() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument attDoc = new XWikiDocument(attDocRef);
attDoc.setAttachmentList(Arrays.asList(new XWikiAttachment()));
AttachmentReference attRef = new AttachmentReference("myFile", attDocRef);
expect(xwiki.getDocument(eq(attDocRef), same(context))).andReturn(attDoc).once();
replayDefault();
XWikiAttachment ret = webUtilsService.getAttachment(attRef);
verifyDefault();
assertNull(ret);
}
@Test
public void testGetAttachment_XWE() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
AttachmentReference attRef = new AttachmentReference("myFile", attDocRef);
Throwable cause = new XWikiException();
expect(xwiki.getDocument(eq(attDocRef), same(context))).andThrow(cause).once();
replayDefault();
try {
webUtilsService.getAttachment(attRef);
fail("expecting XWikiException");
} catch (XWikiException xwe) {
assertSame(cause, xwe);
}
verifyDefault();
}
@Test
public void testGetAttachmentApi() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument attDoc = new XWikiDocument(attDocRef);
XWikiAttachment att = new XWikiAttachment(attDoc, "myFile");
attDoc.setAttachmentList(Arrays.asList(att));
AttachmentReference attRef = new AttachmentReference(att.getFilename(), attDocRef);
expect(xwiki.getDocument(eq(attDocRef), same(context))).andReturn(attDoc).times(2);
replayDefault();
Attachment ret = webUtilsService.getAttachmentApi(attRef);
verifyDefault();
assertEquals(att.getFilename(), ret.getFilename());
assertEquals(att.getDoc().getDocumentReference(), ret.getDocument().getDocumentReference());
}
@Test
public void testGetAttachmentApi_notFound() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
XWikiDocument attDoc = new XWikiDocument(attDocRef);
attDoc.setAttachmentList(Arrays.asList(new XWikiAttachment()));
AttachmentReference attRef = new AttachmentReference("myFile", attDocRef);
expect(xwiki.getDocument(eq(attDocRef), same(context))).andReturn(attDoc).once();
replayDefault();
Attachment ret = webUtilsService.getAttachmentApi(attRef);
verifyDefault();
assertNull(ret);
}
@Test
public void testGetAttachmentApi_XWE() throws Exception {
DocumentReference attDocRef = new DocumentReference(context.getDatabase(), "mySpace", "myDoc");
AttachmentReference attRef = new AttachmentReference("myFile", attDocRef);
Throwable cause = new XWikiException();
expect(xwiki.getDocument(eq(attDocRef), same(context))).andThrow(cause).once();
replayDefault();
try {
webUtilsService.getAttachmentApi(attRef);
fail("expecting XWikiException");
} catch (XWikiException xwe) {
assertSame(cause, xwe);
}
verifyDefault();
}
@Test
public void testResolveEntityTypeForFullName_wiki() {
String fullName = "myWiki";
assertSame(EntityType.WIKI, webUtilsService.resolveEntityTypeForFullName(fullName));
assertSame(EntityType.WIKI, webUtilsService.resolveEntityTypeForFullName(fullName,
EntityType.WIKI));
}
@Test
public void testResolveEntityTypeForFullName_space() {
String fullName = "myWiki:mySpace";
assertSame(EntityType.SPACE, webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_space_local() {
String fullName = "mySpace";
assertSame(EntityType.SPACE, webUtilsService.resolveEntityTypeForFullName(fullName,
EntityType.SPACE));
}
@Test
public void testResolveEntityTypeForFullName_doc() {
String fullName = "myWiki:mySpace.myDoc";
assertSame(EntityType.DOCUMENT, webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_doc_local() {
String fullName = "mySpace.myDoc";
assertSame(EntityType.DOCUMENT, webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_att() {
String fullName = "myWiki:mySpace.myDoc@myAtt.jpg";
assertSame(EntityType.ATTACHMENT, webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_att_local() {
String fullName = "mySpace.myDoc@myAtt";
assertSame(EntityType.ATTACHMENT, webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_null() {
String fullName = null;
assertNull(webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_empty() {
String fullName = "";
assertNull(webUtilsService.resolveEntityTypeForFullName(fullName));
}
@Test
public void testResolveEntityTypeForFullName_invalid() {
String fullName = "mySpace myDoc";
EntityType entityType = webUtilsService.resolveEntityTypeForFullName(fullName);
assertNull("expected null but got " + entityType, entityType);
}
@Test
public void testResolveEntityTypeForFullName_specialChars() {
assertEquals(EntityType.SPACE, webUtilsService.resolveEntityTypeForFullName("mySpace_myDoc"));
assertEquals(EntityType.SPACE, webUtilsService.resolveEntityTypeForFullName("mySpace-myDoc"));
}
@Test
public void testGetAttachmentListSorted_none() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
expect(docMock.getAttachmentList()).andReturn(Collections.<XWikiAttachment>emptyList()).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock, null);
verifyDefault();
assertEquals(0, ret.size());
}
@Test
public void testGetAttachmentListSorted_single() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att)).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock, null);
verifyDefault();
assertEquals(1, ret.size());
assertSame(att, ret.get(0));
}
@Test
public void testGetAttachmentListSorted_noComparator() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2)).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock, null);
verifyDefault();
assertEquals(2, ret.size());
assertSame(att1, ret.get(0));
assertSame(att2, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_name_asc() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2)).once();
expect(att1.getFilename()).andReturn("name2").once();
expect(att2.getFilename()).andReturn("name1").once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock,
new XWikiAttachmentAscendingNameComparator());
verifyDefault();
assertEquals(2, ret.size());
assertSame(att2, ret.get(0));
assertSame(att1, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_name_desc() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2)).once();
expect(att1.getFilename()).andReturn("name1").once();
expect(att2.getFilename()).andReturn("name2").once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock,
new XWikiAttachmentDescendingNameComparator());
verifyDefault();
assertEquals(2, ret.size());
assertSame(att2, ret.get(0));
assertSame(att1, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_date_asc() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2)).once();
expect(att1.getDate()).andReturn(new Date(1)).once();
expect(att2.getDate()).andReturn(new Date(0)).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock,
new XWikiAttachmentAscendingChangeDateComparator());
verifyDefault();
assertEquals(2, ret.size());
assertSame(att2, ret.get(0));
assertSame(att1, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_date_desc() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2)).once();
expect(att1.getDate()).andReturn(new Date(0)).once();
expect(att2.getDate()).andReturn(new Date(1)).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock,
new XWikiAttachmentDescendingChangeDateComparator());
verifyDefault();
assertEquals(2, ret.size());
assertSame(att2, ret.get(0));
assertSame(att1, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_imageOnly() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att3 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2, att3)).once();
expect(att1.isImage(same(context))).andReturn(true).once();
expect(att2.isImage(same(context))).andReturn(false).once();
expect(att3.isImage(same(context))).andReturn(true).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock, null, true);
verifyDefault();
assertEquals(2, ret.size());
assertSame(att1, ret.get(0));
assertSame(att3, ret.get(1));
}
@Test
public void testGetAttachmentListSorted_reduced() {
XWikiDocument docMock = createMockAndAddToDefault(XWikiDocument.class);
XWikiAttachment att1 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att2 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att3 = createMockAndAddToDefault(XWikiAttachment.class);
XWikiAttachment att4 = createMockAndAddToDefault(XWikiAttachment.class);
expect(docMock.getAttachmentList()).andReturn(Arrays.asList(att1, att2, att3, att4)).once();
replayDefault();
List<XWikiAttachment> ret = webUtilsService.getAttachmentListSorted(docMock, null, false, 1, 2);
verifyDefault();
assertEquals(2, ret.size());
assertSame(att2, ret.get(0));
assertSame(att3, ret.get(1));
}
@Test
public void testGetDefaultLanguage_cfgSrc() throws Exception {
String lang = "xk";
getConfigurationSource().setProperty(ModelContext.CFG_KEY_DEFAULT_LANG, lang);
replayDefault();
assertEquals(lang, webUtilsService.getDefaultLanguage());
verifyDefault();
}
@Test
public void testGetDefaultLanguage_withSpaceRef() throws Exception {
final String lang = "en";
final WikiReference wikiRef = new WikiReference("wiki");
final SpaceReference spaceRef = new SpaceReference("space", wikiRef);
DocumentReference webPrefDocRef = new DocumentReference("WebPreferences", spaceRef);
expect(xwiki.exists(eq(webPrefDocRef), same(context))).andReturn(true).once();
expect(xwiki.getDocument(eq(webPrefDocRef), same(context))).andReturn(new XWikiDocument(
webPrefDocRef)).once();
assertEquals("xwikidb", getContext().getDatabase());
assertNull(getContext().getDoc());
replayDefault();
assertEquals(lang, webUtilsService.getDefaultLanguage(spaceRef));
verifyDefault();
assertEquals("xwikidb", getContext().getDatabase());
assertNull(getContext().getDoc());
}
// *****************************************************************
// * H E L P E R - M E T H O D S *
// *****************************************************************/
private DocumentReference getBOClassRef() {
return new DocumentReference(context.getDatabase(), "Classes", "TestClass");
}
private List<BaseObject> getSortTestBaseObjects() {
List<BaseObject> objs = new ArrayList<>();
BaseObject obj = new BaseObject();
obj.setXClassReference(getBOClassRef());
obj.setStringValue("s1", "c");
obj.setStringValue("s2", "u");
obj.setIntValue("i", 1);
obj.setDateValue("d", new Date(500l));
obj.setLongValue("l", 5l);
objs.add(obj);
obj = new BaseObject();
obj.setXClassReference(getBOClassRef());
obj.setStringValue("s1", "b");
obj.setStringValue("s2", "t");
obj.setIntValue("i", 2);
obj.setDateValue("d", new Date(400l));
obj.setLongValue("l", 1l);
objs.add(obj);
obj = new BaseObject();
obj.setXClassReference(getBOClassRef());
obj.setStringValue("s1", "a");
obj.setStringValue("s2", "r");
obj.setIntValue("i", 3);
obj.setDateValue("d", new Date(300l));
obj.setLongValue("l", 2l);
objs.add(obj);
obj = new BaseObject();
obj.setXClassReference(getBOClassRef());
obj.setStringValue("s1", "b");
obj.setStringValue("s2", "s");
obj.setIntValue("i", 2);
obj.setDateValue("d", new Date(200l));
obj.setLongValue("l", 4l);
objs.add(obj);
obj = new BaseObject();
obj.setXClassReference(getBOClassRef());
obj.setStringValue("s1", "d");
obj.setStringValue("s2", "v");
obj.setIntValue("i", 2);
obj.setDateValue("d", new Date(100l));
obj.setLongValue("l", 3l);
objs.add(obj);
return objs;
}
}