package com.celements.appScript; import static org.easymock.EasyMock.*; import static org.junit.Assert.*; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.xwiki.model.reference.DocumentReference; import com.celements.common.test.AbstractBridgedComponentTestCase; import com.celements.emptycheck.service.IEmptyCheckRole; import com.xpn.xwiki.XWiki; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.web.Utils; import com.xpn.xwiki.web.XWikiRequest; public class AppScriptServiceTest extends AbstractBridgedComponentTestCase { private XWikiContext context; private XWiki xwiki; private AppScriptService appScriptService; private IEmptyCheckRole preseveEmptyCheck; private IEmptyCheckRole emptyCheckMock; @Before public void setUp_AppScriptServiceTest() throws Exception { context = getContext(); xwiki = getWikiMock(); appScriptService = (AppScriptService) Utils.getComponent(IAppScriptService.class); preseveEmptyCheck = appScriptService.emptyCheck; emptyCheckMock = createMockAndAddToDefault(IEmptyCheckRole.class); appScriptService.emptyCheck = emptyCheckMock; } @After public void tearDown_AppScriptServiceTest() { appScriptService.emptyCheck = preseveEmptyCheck; } @Test public void testGetStartIndex_Space_Action() { String myAppScriptPath = "/app/myAppScript"; expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( IAppScriptService.APP_SCRIPT_XPAGE))).andReturn( IAppScriptService.APP_SCRIPT_XPAGE).atLeastOnce(); replayDefault(); int startIndex = appScriptService.getStartIndex(myAppScriptPath); assertEquals("myAppScript", myAppScriptPath.substring(startIndex)); verifyDefault(); } @Test public void testIsAppScriptRequest_appXpage() { DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "noScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); expect(mockRequest.getParameter(eq("xpage"))).andReturn( IAppScriptService.APP_SCRIPT_XPAGE).anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("myScript").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.login").anyTimes(); replayAll(mockRequest); assertTrue(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_appAction() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); replayAll(mockRequest); assertTrue(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_view_appSpace() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_XPAGE, "myScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); replayAll(mockRequest); assertTrue(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_view_overwriteAppDoc_comma() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "login"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.login,Content.WhatsNew").anyTimes(); replayAll(mockRequest); assertTrue(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_view_overwriteAppDoc_space() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "login"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.WhatsNew Content.login").anyTimes(); replayAll(mockRequest); assertTrue(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_view_overwriteAppDoc_noConfig() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "login"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq("appScriptOverwriteDocs"), eq( "com.celements.appScript.overwriteDocs"), eq("-"), same(context))).andReturn( "-").anyTimes(); replayAll(mockRequest); assertFalse(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testIsAppScriptRequest_view_noAppSpace() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "noScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq("appScriptOverwriteDocs"), eq( "com.celements.appScript.overwriteDocs"), eq("-"), same(context))).andReturn( "-").anyTimes(); replayAll(mockRequest); assertFalse(appScriptService.isAppScriptRequest()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_appXpage() { DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "noScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); expect(mockRequest.getParameter(eq("xpage"))).andReturn( IAppScriptService.APP_SCRIPT_XPAGE).anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("myScript").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.login").anyTimes(); replayAll(mockRequest); assertEquals("myScript", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_appAction() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "pathTo", "myScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/" + IAppScriptService.APP_SCRIPT_XPAGE + "/pathTo/myScript").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); replayAll(mockRequest); assertEquals("pathTo/myScript", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_appAction2() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "pathTo", "pathTo2"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/" + IAppScriptService.APP_SCRIPT_XPAGE + "/pathTo/pathTo2/myScript").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); replayAll(mockRequest); assertEquals("pathTo/pathTo2/myScript", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_view_appSpace() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_XPAGE, "myScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/" + IAppScriptService.APP_SCRIPT_XPAGE + "/myScript").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); replayAll(mockRequest); assertEquals("myScript", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_view_noAppSpace() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "noScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.login").anyTimes(); replayAll(mockRequest); assertEquals("", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testGetAppScriptNameFromRequestURL_view_overwriteAppDoc() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "login"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/login").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Content.WhatsNew Content.login").anyTimes(); replayAll(mockRequest); assertEquals("login", appScriptService.getAppScriptNameFromRequestURL()); verifyAll(mockRequest); } @Test public void testHasDocAppScript_appAction() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "sub", "testScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.Param(eq(IAppScriptService.APP_SCRIPT_ACTION_NAME_CONF_PROPERTY), eq( "app"))).andReturn("app").anyTimes(); DocumentReference appScriptDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_SPACE_NAME, "sub/testScript"); expect(xwiki.exists(eq(appScriptDocRef), same(context))).andReturn(false); DocumentReference centralAppScriptDocRef = new DocumentReference("celements2web", IAppScriptService.APP_SCRIPT_SPACE_NAME, "sub/testScript"); expect(xwiki.exists(eq(centralAppScriptDocRef), same(context))).andReturn(false); expect(emptyCheckMock.isEmptyRTEDocument(eq(appScriptDocRef))).andReturn(false).anyTimes(); expect(emptyCheckMock.isEmptyRTEDocument(eq(centralAppScriptDocRef))).andReturn( false).anyTimes(); replayAll(mockRequest); assertFalse(appScriptService.hasDocAppScript("sub/testScript")); verifyAll(mockRequest); } @Test public void testHasDocAppScript_appAction_emptyString() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "sub", "testScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); replayAll(mockRequest); assertFalse(appScriptService.hasDocAppScript("")); verifyAll(mockRequest); } @Test public void testGetAppScriptDocRef_localOverwritesCentral() throws Exception { appScriptService.emptyCheck = preseveEmptyCheck; XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "testScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); DocumentReference appScriptDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); expect(xwiki.exists(eq(appScriptDocRef), same(context))).andReturn(true).anyTimes(); DocumentReference centralAppScriptDocRef = new DocumentReference("celements2web", IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); expect(xwiki.exists(eq(centralAppScriptDocRef), same(context))).andReturn(false).anyTimes(); XWikiDocument appScriptDoc = new XWikiDocument(appScriptDocRef); appScriptDoc.setContent("this is no empty script!"); expect(xwiki.getDocument(eq(appScriptDocRef), same(context))).andReturn( appScriptDoc).anyTimes(); expect(xwiki.getXWikiPreference(eq(IEmptyCheckRole.EMPTYCHECK_MODULS_PREF_NAME), eq( "celements.emptycheckModuls"), eq("default"), same(context))).andReturn( "default").anyTimes(); replayAll(mockRequest); DocumentReference expectedAppDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); assertEquals(expectedAppDocRef, appScriptService.getAppScriptDocRef("testScript")); verifyAll(mockRequest); } @Test public void testGetAppScriptDocRef_noLocalButCentral() throws Exception { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); context.put("appAction", true); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Content", "testScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); DocumentReference appScriptDocRef = new DocumentReference(context.getDatabase(), IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); expect(xwiki.exists(eq(appScriptDocRef), same(context))).andReturn(false).anyTimes(); DocumentReference centralAppScriptDocRef = new DocumentReference("celements2web", IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); expect(xwiki.exists(eq(centralAppScriptDocRef), same(context))).andReturn(true).anyTimes(); XWikiDocument appScriptDoc = new XWikiDocument(appScriptDocRef); appScriptDoc.setContent("this is no empty script!"); expect(xwiki.getDocument(eq(centralAppScriptDocRef), same(context))).andReturn( appScriptDoc).anyTimes(); expect(emptyCheckMock.isEmptyRTEDocument(eq(appScriptDocRef))).andReturn(false).anyTimes(); expect(emptyCheckMock.isEmptyRTEDocument(eq(centralAppScriptDocRef))).andReturn( true).anyTimes(); replayAll(mockRequest); DocumentReference expectedAppDocRef = new DocumentReference("celements2web", IAppScriptService.APP_SCRIPT_SPACE_NAME, "testScript"); assertEquals(expectedAppDocRef, appScriptService.getAppScriptDocRef("testScript")); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_emptyPathInfo() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Main", "WebHome"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Main.WebHome").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("").anyTimes(); replayAll(mockRequest); assertEquals("WebHome", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_explicit_DefaultSpace() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Main", "Test"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Main.Test").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/Main/Test").anyTimes(); replayAll(mockRequest); assertEquals("Test", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_explicit_DefaultPage() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Test", "WebHome"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Test.WebHome").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/Test/WebHome").anyTimes(); replayAll(mockRequest); assertEquals("Test/WebHome", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_implicit_DefaultPage() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Test", "WebHome"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Test.WebHome").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/Test/").anyTimes(); replayAll(mockRequest); assertEquals("Test/WebHome", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_explicit_DefaultSpace_DefaultPage() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("view"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "Main", "WebHome"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "Main.WebHome").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/Main/WebHome").anyTimes(); replayAll(mockRequest); assertEquals("WebHome", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromURL_export_action() { XWikiRequest mockRequest = createMock(XWikiRequest.class); context.setRequest(mockRequest); context.setAction("export"); DocumentReference contextDocRef = new DocumentReference(context.getDatabase(), "TestSpace", "TestScript"); XWikiDocument contextDoc = new XWikiDocument(contextDocRef); context.setDoc(contextDoc); expect(mockRequest.getParameter(eq("xpage"))).andReturn("").anyTimes(); expect(mockRequest.getParameter(eq("s"))).andReturn("").anyTimes(); expect(xwiki.getXWikiPreference(eq(IAppScriptService.APP_SCRIPT_XWPREF_OVERW_DOCS), eq( IAppScriptService.APP_SCRIPT_CONF_OVERW_DOCS), eq("-"), same(context))).andReturn( "TestSpace.TestScript").anyTimes(); expect(mockRequest.getPathInfo()).andReturn("/export/TestSpace/TestScript").anyTimes(); replayAll(mockRequest); assertEquals("TestSpace/TestScript", appScriptService.getScriptNameFromURL()); verifyAll(mockRequest); } @Test public void testGetScriptNameFromDocRef_defaultSpace() { DocumentReference docRef = new DocumentReference(context.getDatabase(), "Main", "WebHome"); replayAll(); assertEquals("WebHome", appScriptService.getScriptNameFromDocRef(docRef)); verifyAll(); } @Test public void testGetScriptNameFromDocRef_anySpace() { DocumentReference docRef = new DocumentReference(context.getDatabase(), "ScriptSpace", "TestScript"); replayAll(); assertEquals("ScriptSpace/TestScript", appScriptService.getScriptNameFromDocRef(docRef)); verifyAll(); } @Test public void testGetAppScriptURL_queryString_queryStringEmpty() { DocumentReference docRef = new DocumentReference(context.getDatabase(), "someSpace", "someDoc"); String scriptName = "someSpace/someDoc"; expect(xwiki.getURL(eq(docRef), eq("view"), eq("xpage=app&s=someSpace/someDoc"), (String) isNull(), same(context))).andReturn("theURL").once(); replayAll(); assertEquals("theURL", appScriptService.getAppScriptURL(scriptName, null)); verifyAll(); } @Test public void testGetAppScriptURL() { DocumentReference docRef = new DocumentReference(context.getDatabase(), "someSpace", "someDoc"); String scriptName = "someSpace/someDoc"; String queryString = "string=a{sd]f&string2=a[sd}f"; expect(xwiki.getURL(eq(docRef), eq("view"), eq("xpage=app&s=someSpace/someDoc&" + queryString), (String) isNull(), same(context))).andReturn("theURL").once(); replayAll(); assertEquals("theURL", appScriptService.getAppScriptURL(scriptName, queryString)); verifyAll(); } @Test public void testGetAppScriptURL_queryStringWithAmp() { DocumentReference docRef = new DocumentReference(context.getDatabase(), "someSpace", "someDoc"); String scriptName = "someSpace/someDoc"; String queryString = "&string=a{sd]f&string2=a[sd}f"; expect(xwiki.getURL(eq(docRef), eq("view"), eq("xpage=app&s=someSpace/someDoc&" + queryString), (String) isNull(), same(context))).andReturn("theURL").once(); replayAll(); assertEquals("theURL", appScriptService.getAppScriptURL(scriptName, queryString)); verifyAll(); } @Test public void testGetAppScriptURL_longName() { String scriptName = "path/to/my/appscript"; String queryString = "string=a{sd]f&string2=a[sd}f"; replayAll(); String url = appScriptService.getAppScriptURL(scriptName, queryString); assertEquals("/app/" + scriptName + "?xpage=app&s=" + scriptName + "&string=a%7Bsd%5Df&string2=a%5Bsd%7Df", url); verifyAll(); } private void replayAll(Object... mocks) { replayDefault(mocks); } private void verifyAll(Object... mocks) { verifyDefault(mocks); } }