1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.portalsite;
18
19 import java.lang.reflect.Proxy;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.Locale;
24 import java.util.Map;
25 import java.util.Set;
26
27 import junit.framework.Test;
28 import junit.framework.TestSuite;
29
30 import org.apache.jetspeed.components.test.AbstractSpringTestCase;
31 import org.apache.jetspeed.om.folder.Folder;
32 import org.apache.jetspeed.om.folder.MenuDefinition;
33 import org.apache.jetspeed.om.page.Link;
34 import org.apache.jetspeed.om.page.Page;
35 import org.apache.jetspeed.page.PageManager;
36 import org.apache.jetspeed.page.document.NodeSet;
37 import org.apache.jetspeed.page.document.proxy.NodeProxy;
38 import org.apache.jetspeed.portalsite.impl.MenuImpl;
39 import org.apache.jetspeed.portalsite.view.SiteView;
40 import org.apache.jetspeed.profiler.ProfileLocator;
41 import org.apache.jetspeed.profiler.impl.JetspeedProfileLocator;
42
43 /***
44 * TestPortalSite
45 *
46 * @author <a href="mailto:rwatler@apache.org">Randy Watler</a>
47 * @version $Id: TestPortalSite.java 534967 2007-05-03 19:23:06Z taylor $
48 */
49 public class TestPortalSite extends AbstractSpringTestCase
50 {
51 /***
52 * pageManager - PageManager component
53 */
54 private PageManager pageManager;
55
56 /***
57 * portalSite - PortalSite component
58 */
59 private PortalSite portalSite;
60
61
62
63
64 protected void setUp() throws Exception
65 {
66 super.setUp();
67 this.pageManager = (PageManager) ctx.getBean("pageManager");
68 this.portalSite = (PortalSite) ctx.getBean("portalSite");
69 }
70
71
72
73
74 protected void tearDown() throws Exception
75 {
76 super.tearDown();
77 }
78
79 /***
80 * Start the tests.
81 *
82 * @param args the arguments. Not used
83 */
84 public static void main(String args[])
85 {
86 junit.awtui.TestRunner.main(new String[] {TestPortalSite.class.getName()});
87 }
88
89 /***
90 * Define test suite.
91 *
92 * @return the test suite
93 */
94 public static Test suite()
95 {
96
97 return new TestSuite(TestPortalSite.class);
98 }
99
100 /***
101 * Define configuration paths.
102 *
103 * @return array of paths.
104 */
105 protected String[] getConfigurations()
106 {
107 return new String[] {"/JETSPEED-INF/spring/test-spring.xml"};
108 }
109
110 /***
111 * testPageManagerSetup - Test PageManager test configuration
112 *
113 * @throws Exception
114 */
115 public void testPageManagerSetup() throws Exception
116 {
117 assertNotNull(pageManager);
118 Folder rootFolder = pageManager.getFolder("/");
119 assertNotNull(rootFolder);
120 Page rootPage0 = pageManager.getPage("/page0.psml");
121 assertNotNull(rootPage0);
122 assertEquals(rootFolder.getPage("page0.psml"), rootPage0);
123 Link rootLink0 = pageManager.getLink("/link0.link");
124 assertNotNull(rootLink0);
125 assertEquals(rootFolder.getLink("link0.link"), rootLink0);
126 }
127
128 public void testRelativeNavigations() throws Exception
129 {
130 JetspeedProfileLocator locator = new JetspeedProfileLocator();
131
132 locator.init(null, "/");
133 locator.add("hostname", true, false, "dash");
134 locator.add("user", true, false, "joe");
135 locator.add("page", false, false, "home");
136 SiteView profileView = new SiteView(pageManager, locator);
137 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash,/", profileView.getSearchPathsString());
138
139 locator = new JetspeedProfileLocator();
140 locator.init(null, "/");
141 locator.add("hostname", true, false, "dash");
142 locator.add("user", true, false, "joe");
143 locator.add("navigation", false, true, "/");
144 locator.add("hostname", true, false, "dash");
145 locator.add("role", true, false, "user");
146 locator.add("page", false, false, "home");
147 profileView = new SiteView(pageManager, locator);
148 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash/_role/user,/_hostname/dash,/", profileView.getSearchPathsString());
149
150 locator = new JetspeedProfileLocator();
151
152 locator.init(null, "/");
153 locator.add("navigation", false, true, "subsite-root");
154 locator.add("hostname", true, false, "localhost");
155 locator.add("user", true, false, "sublocal");
156 locator.add("navigation", false, true, "subsite-root");
157 locator.add("hostname", true, false, "localhost");
158 locator.add("role", true, false, "somerole");
159 locator.add("path", false, false, "home");
160 profileView = new SiteView(pageManager, locator);
161 assertEquals("/__subsite-root/_hostname/localhost/_user/sublocal,/__subsite-root/_hostname/localhost/_role/somerole,/__subsite-root/_hostname/localhost,/__subsite-root", profileView.getSearchPathsString());
162 }
163
164 /***
165 * testSiteView - Test SiteView operation
166 *
167 * @throws Exception
168 */
169 public void testSiteView() throws Exception
170 {
171
172 SiteView baseView = new SiteView(pageManager);
173 assertEquals("/", baseView.getSearchPathsString());
174 Folder rootFolderProxy = baseView.getRootFolderProxy();
175 assertNotNull(rootFolderProxy);
176 assertEquals("/", rootFolderProxy.getName());
177 assertEquals("root", rootFolderProxy.getTitle());
178 assertEquals("/", extractFileSystemPathFromId(rootFolderProxy.getId()));
179 assertEquals(4, rootFolderProxy.getFolders().size());
180 Iterator foldersIter = rootFolderProxy.getFolders().iterator();
181 assertEquals("folder0", ((Folder)foldersIter.next()).getName());
182 assertEquals("folder1", ((Folder)foldersIter.next()).getName());
183 assertEquals("folder2", ((Folder)foldersIter.next()).getName());
184 assertEquals("folder3", ((Folder)foldersIter.next()).getName());
185 assertEquals(4, rootFolderProxy.getPages().size());
186 Iterator pagesIter = rootFolderProxy.getPages().iterator();
187 assertEquals("page2.psml", ((Page)pagesIter.next()).getName());
188 assertEquals("page1.psml", ((Page)pagesIter.next()).getName());
189 assertEquals("page0.psml", ((Page)pagesIter.next()).getName());
190 assertEquals("hidden.psml", ((Page)pagesIter.next()).getName());
191 assertEquals(2, rootFolderProxy.getLinks().size());
192 Iterator linksIter = rootFolderProxy.getLinks().iterator();
193 assertEquals("link1.link", ((Link)linksIter.next()).getName());
194 assertEquals("link0.link", ((Link)linksIter.next()).getName());
195 Page rootPage0Proxy = rootFolderProxy.getPage("page0.psml");
196 assertNotNull(rootPage0Proxy);
197 assertEquals(rootFolderProxy, rootPage0Proxy.getParent());
198 assertEquals("page0.psml", rootPage0Proxy.getName());
199 assertEquals("/page0.psml", extractFileSystemPathFromId(rootPage0Proxy.getId()));
200 Page rootHiddenProxy = rootFolderProxy.getPage("hidden.psml");
201 assertNotNull(rootHiddenProxy);
202 assertEquals("hidden.psml", rootHiddenProxy.getName());
203 assertTrue(rootHiddenProxy.isHidden());
204 Link rootLink0Proxy = rootFolderProxy.getLink("link0.link");
205 assertNotNull(rootLink0Proxy);
206 assertEquals(rootFolderProxy, rootLink0Proxy.getParent());
207 assertEquals("link0.link", rootLink0Proxy.getName());
208 assertEquals("/link0.link", extractFileSystemPathFromId(rootLink0Proxy.getId()));
209 Folder rootFolder0Proxy = rootFolderProxy.getFolder("folder0");
210 assertNotNull(rootFolder0Proxy);
211 assertEquals(rootFolderProxy, rootFolder0Proxy.getParent());
212 assertEquals(1, rootFolder0Proxy.getPages().size());
213 assertEquals(null, rootFolder0Proxy.getLinks());
214 assertEquals("folder0", rootFolder0Proxy.getName());
215 assertEquals("/folder0", extractFileSystemPathFromId(rootFolder0Proxy.getId()));
216 Page folder0Page0Proxy = rootFolder0Proxy.getPage("page0.psml");
217 assertNotNull(folder0Page0Proxy);
218 assertEquals(rootFolder0Proxy, folder0Page0Proxy.getParent());
219 assertEquals("page0.psml", folder0Page0Proxy.getName());
220 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(folder0Page0Proxy.getId()));
221
222
223 Folder rootFolderProxyByPath = (Folder)baseView.getNodeProxy("/", null, false, false);
224 assertNotNull(rootFolderProxyByPath);
225 assertEquals(rootFolderProxy, rootFolderProxyByPath);
226 Folder rootFolder0ProxyByPath = (Folder)baseView.getNodeProxy("/folder0/", null, false, false);
227 assertNotNull(rootFolder0ProxyByPath);
228 assertEquals(rootFolder0Proxy, rootFolder0ProxyByPath);
229 Page folder0Page0ProxyByPath = (Page)baseView.getNodeProxy("/folder0/page0.psml", null, false, false);
230 assertNotNull(folder0Page0ProxyByPath);
231 assertEquals(folder0Page0Proxy, folder0Page0ProxyByPath);
232 folder0Page0ProxyByPath = (Page)baseView.getNodeProxy("page0.psml", rootFolder0Proxy, false, false);
233 assertNotNull(folder0Page0ProxyByPath);
234 assertEquals(folder0Page0Proxy, folder0Page0ProxyByPath);
235 List rootPageProxiesByPath = baseView.getNodeProxies("/page?.psml", null, false, false);
236 assertNotNull(rootPageProxiesByPath);
237 assertEquals(3,rootPageProxiesByPath.size());
238 assertTrue(rootPageProxiesByPath.contains(rootPage0Proxy));
239 List rootFolderProxiesByPath = baseView.getNodeProxies("/*/", null, false, false);
240 assertNotNull(rootFolderProxiesByPath);
241 assertEquals(4,rootFolderProxiesByPath.size());
242 assertTrue(rootFolderProxiesByPath.contains(rootFolder0Proxy));
243 List folderPageProxiesByPath = baseView.getNodeProxies("*/p*[0-9].psml", rootFolderProxy, false, false);
244 assertNotNull(folderPageProxiesByPath);
245 assertEquals(2,folderPageProxiesByPath.size());
246 assertTrue(folderPageProxiesByPath.contains(folder0Page0Proxy));
247
248
249 SiteView aggregateView = new SiteView(pageManager, "/_user/user,/_role/role0,/_group/group,/");
250 assertEquals("/_user/user,/_role/role0,/_group/group,/", aggregateView.getSearchPathsString());
251 rootFolderProxy = aggregateView.getRootFolderProxy();
252 assertNotNull(rootFolderProxy);
253 assertEquals("/", rootFolderProxy.getName());
254 assertEquals("user root", rootFolderProxy.getTitle());
255 assertEquals("/_user/user", extractFileSystemPathFromId(rootFolderProxy.getId()));
256 assertEquals(4, rootFolderProxy.getFolders().size());
257 assertEquals(4, rootFolderProxy.getPages().size());
258 assertEquals(2, rootFolderProxy.getLinks().size());
259 rootPage0Proxy = rootFolderProxy.getPage("page0.psml");
260 assertNotNull(rootPage0Proxy);
261 assertEquals(rootFolderProxy, rootPage0Proxy.getParent());
262 assertEquals("page0.psml", rootPage0Proxy.getName());
263 assertEquals("/page0.psml", extractFileSystemPathFromId(rootPage0Proxy.getId()));
264 List rootPage0ProxyMenus = rootPage0Proxy.getMenuDefinitions();
265 assertNotNull(rootPage0ProxyMenus);
266 assertEquals(2 + aggregateView.getStandardMenuNames().size(), rootPage0ProxyMenus.size());
267 Iterator menusIter = rootPage0ProxyMenus.iterator();
268 MenuDefinition rootPage0ProxyTopMenu = (MenuDefinition)menusIter.next();
269 assertEquals("top", rootPage0ProxyTopMenu.getName());
270 assertEquals("/", rootPage0ProxyTopMenu.getOptions());
271 assertEquals(2, rootPage0ProxyTopMenu.getDepth());
272 assertEquals("dhtml-pull-down", rootPage0ProxyTopMenu.getSkin());
273 MenuDefinition rootPage0ProxyBreadCrumbMenu = (MenuDefinition)menusIter.next();
274 assertEquals("bread-crumbs", rootPage0ProxyBreadCrumbMenu.getName());
275 assertEquals("./", rootPage0ProxyBreadCrumbMenu.getOptions());
276 assertEquals(true, rootPage0ProxyBreadCrumbMenu.isPaths());
277 for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
278 {
279 assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
280 }
281 Page rootPage2Proxy = rootFolderProxy.getPage("page2.psml");
282 assertNotNull(rootPage2Proxy);
283 assertEquals(rootFolderProxy, rootPage2Proxy.getParent());
284 assertEquals("page2.psml", rootPage2Proxy.getName());
285 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(rootPage2Proxy.getId()));
286 List rootPage2ProxyMenus = rootPage2Proxy.getMenuDefinitions();
287 assertNotNull(rootPage2ProxyMenus);
288 assertEquals(2 + aggregateView.getStandardMenuNames().size(), rootPage2ProxyMenus.size());
289 menusIter = rootPage2ProxyMenus.iterator();
290 MenuDefinition rootPage2ProxyTopMenu = (MenuDefinition)menusIter.next();
291 assertEquals("top", rootPage2ProxyTopMenu.getName());
292 assertEquals("/", rootPage2ProxyTopMenu.getOptions());
293 assertEquals(1, rootPage2ProxyTopMenu.getDepth());
294 MenuDefinition rootPage2ProxyBreadCrumbMenu = (MenuDefinition)menusIter.next();
295 assertEquals("bread-crumbs", rootPage2ProxyBreadCrumbMenu.getName());
296 for (int i = 0; (i < aggregateView.getStandardMenuNames().size()); i++)
297 {
298 assertTrue(aggregateView.getStandardMenuNames().contains(((MenuDefinition)menusIter.next()).getName()));
299 }
300 rootLink0Proxy = rootFolderProxy.getLink("link0.link");
301 assertNotNull(rootLink0Proxy);
302 assertEquals(rootFolderProxy, rootLink0Proxy.getParent());
303 assertEquals("link0.link", rootLink0Proxy.getName());
304 assertEquals("/_group/group/link0.link", extractFileSystemPathFromId(rootLink0Proxy.getId()));
305 rootFolder0Proxy = rootFolderProxy.getFolder("folder0");
306 assertNotNull(rootFolder0Proxy);
307 assertEquals(rootFolderProxy, rootFolder0Proxy.getParent());
308 assertEquals(1, rootFolder0Proxy.getPages().size());
309 assertEquals(null, rootFolder0Proxy.getLinks());
310 assertEquals(null, rootFolder0Proxy.getFolders());
311 assertEquals("folder0", rootFolder0Proxy.getName());
312 assertEquals("folder0", rootFolder0Proxy.getTitle());
313 assertEquals("/folder0", extractFileSystemPathFromId(rootFolder0Proxy.getId()));
314 folder0Page0Proxy = rootFolder0Proxy.getPage("page0.psml");
315 assertNotNull(folder0Page0Proxy);
316 assertEquals(rootFolder0Proxy, folder0Page0Proxy.getParent());
317 assertEquals("page0.psml", folder0Page0Proxy.getName());
318 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(folder0Page0Proxy.getId()));
319 Folder rootFolder1Proxy = rootFolderProxy.getFolder("folder1");
320 assertNotNull(rootFolder1Proxy);
321 assertEquals(rootFolderProxy, rootFolder1Proxy.getParent());
322 assertEquals(2, rootFolder1Proxy.getPages().size());
323 assertEquals(null, rootFolder1Proxy.getLinks());
324 assertEquals(null, rootFolder1Proxy.getFolders());
325 assertEquals("folder1", rootFolder1Proxy.getName());
326 assertEquals("group folder1", rootFolder1Proxy.getTitle());
327 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(rootFolder1Proxy.getId()));
328
329
330 aggregateView = new SiteView(pageManager, "/__subsite-root");
331 assertEquals("/__subsite-root", aggregateView.getSearchPathsString());
332 rootFolderProxy = aggregateView.getRootFolderProxy();
333 assertNotNull(rootFolderProxy);
334 assertEquals("/", rootFolderProxy.getName());
335 assertEquals("subsite root", rootFolderProxy.getTitle());
336 assertEquals("/__subsite-root", extractFileSystemPathFromId(rootFolderProxy.getId()));
337 assertEquals(null, rootFolderProxy.getFolders());
338 assertEquals(1, rootFolderProxy.getPages().size());
339 assertEquals(1, rootFolderProxy.getLinks().size());
340
341
342 JetspeedProfileLocator locator = new JetspeedProfileLocator();
343 locator.init(null, "/");
344 SiteView profileView = new SiteView(pageManager, locator);
345 assertEquals("/", profileView.getSearchPathsString());
346 locator = new JetspeedProfileLocator();
347 locator.init(null, "/");
348 locator.add("user", true, false, "user");
349 locator.add("page", false, false, "default-page");
350 profileView = new SiteView(pageManager, locator);
351 assertEquals("/_user/user,/", profileView.getSearchPathsString());
352 locator = new JetspeedProfileLocator();
353 locator.init(null, "/");
354 locator.add("page", false, false, "default-page");
355 locator.add("user", true, false, "user");
356 locator.add("mediatype", true, false, "html");
357 locator.add("language", true, false, "en");
358 locator.add("country", true, false, "US");
359 profileView = new SiteView(pageManager, locator);
360 assertEquals("/_user/user/_mediatype/html,/_user/user,/", profileView.getSearchPathsString());
361 locator = new JetspeedProfileLocator();
362 locator.init(null, "/");
363 locator.add("page", false, false, "default-page");
364 locator.add("role", true, false, "role0");
365 locator.add("role", true, false, "role1");
366 profileView = new SiteView(pageManager, locator);
367 assertEquals("/_role/role0,/_role/role1,/", profileView.getSearchPathsString());
368 locator = new JetspeedProfileLocator();
369 locator.init(null, "/");
370 locator.add("user", true, false, "user");
371 locator.add("navigation", false, true, "/");
372 locator.add("role", true, false, "role0");
373 locator.add("navigation", false, true, "/");
374 locator.add("group", true, false, "group");
375 locator.add("page", false, false, "default-page");
376 profileView = new SiteView(pageManager, locator);
377 assertEquals("/_user/user,/_role/role0,/_group/group,/", profileView.getSearchPathsString());
378
379 locator = new JetspeedProfileLocator();
380 locator.init(null, "/");
381 locator.add("hostname", true, false, "dash");
382 locator.add("user", true, false, "joe");
383 locator.add("page", false, false, "home");
384 profileView = new SiteView(pageManager, locator);
385 assertEquals("/_hostname/dash/_user/joe,/_hostname/dash,/", profileView.getSearchPathsString());
386
387 locator = new JetspeedProfileLocator();
388 locator.init(null, "/");
389 locator.add("navigation", false, true, "subsite-root");
390 profileView = new SiteView(pageManager, locator);
391 assertEquals("/__subsite-root", profileView.getSearchPathsString());
392 Map locators = new HashMap();
393 locator = new JetspeedProfileLocator();
394 locator.init(null, "/");
395 locator.add("role", true, false, "role0");
396 locator.add("role", true, false, "role1");
397 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
398 locator = new JetspeedProfileLocator();
399 locator.init(null, "/");
400 locator.add("user", true, false, "user");
401 locator.add("navigation", false, true, "/");
402 locator.add("group", true, false, "group");
403 locators.put("alternate-locator-name", locator);
404 profileView = new SiteView(pageManager, locators);
405 assertEquals("/_role/role0,/_role/role1,/_user/user,/_group/group,/", profileView.getSearchPathsString());
406 rootFolderProxy = profileView.getRootFolderProxy();
407 assertNotNull(rootFolderProxy);
408 assertEquals("/", rootFolderProxy.getName());
409 assertEquals("user root", rootFolderProxy.getTitle());
410 assertEquals("/_role/role0", extractFileSystemPathFromId(rootFolderProxy.getId()));
411 assertEquals(ProfileLocator.PAGE_LOCATOR, extractLocatorNameFromProxy(rootFolderProxy));
412 rootPage2Proxy = rootFolderProxy.getPage("page2.psml");
413 assertNotNull(rootPage2Proxy);
414 assertEquals("page2.psml", rootPage2Proxy.getName());
415 assertEquals("/_role/role0/page2.psml", extractFileSystemPathFromId(rootPage2Proxy.getId()));
416 assertEquals(ProfileLocator.PAGE_LOCATOR, extractLocatorNameFromProxy(rootPage2Proxy));
417 rootFolder1Proxy = rootFolderProxy.getFolder("folder1");
418 assertNotNull(rootFolder1Proxy);
419 assertEquals("folder1", rootFolder1Proxy.getName());
420 assertEquals("group folder1", rootFolder1Proxy.getTitle());
421 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(rootFolder1Proxy.getId()));
422 assertEquals("alternate-locator-name", extractLocatorNameFromProxy(rootFolder1Proxy));
423 Page folder1Page1Proxy = rootFolder1Proxy.getPage("page1.psml");
424 assertNotNull(folder1Page1Proxy);
425 assertEquals("page1.psml", folder1Page1Proxy.getName());
426 assertEquals("/_group/group/folder1/page1.psml", extractFileSystemPathFromId(folder1Page1Proxy.getId()));
427 assertEquals("alternate-locator-name", extractLocatorNameFromProxy(folder1Page1Proxy));
428 }
429
430 /***
431 * testPortalSiteSetup - Test PortalSite test configuration
432 *
433 * @throws Exception
434 */
435 public void testPotalSiteSetup() throws Exception
436 {
437 assertNotNull(portalSite);
438 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
439 assertNotNull(sessionContext);
440 JetspeedProfileLocator locator = new JetspeedProfileLocator();
441 locator.init(null, "/");
442 locator.add("user", true, false, "user");
443 locator.add("navigation", false, true, "/");
444 locator.add("role", true, false, "role0");
445 locator.add("role", true, false, "role1");
446 locator.add("navigation", false, true, "/");
447 locator.add("group", true, false, "group");
448 Map locators = new HashMap();
449 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
450 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
451 assertNotNull(requestContext);
452 Page requestPageProxy = requestContext.getPage();
453 assertNotNull(requestPageProxy);
454 assertEquals("page2.psml", requestPageProxy.getName());
455 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
456 Folder requestFolderProxy = requestContext.getFolder();
457 assertNotNull(requestFolderProxy);
458 assertEquals("/", requestFolderProxy.getName());
459 assertEquals("/_user/user", extractFileSystemPathFromId(requestFolderProxy.getId()));
460 NodeSet requestSiblingPageProxies = requestContext.getSiblingPages();
461 assertNotNull(requestSiblingPageProxies);
462 assertEquals(3, requestSiblingPageProxies.size());
463 assertNotNull(requestSiblingPageProxies.get("page0.psml"));
464 assertEquals("/page0.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page0.psml").getId()));
465 assertNotNull(requestSiblingPageProxies.get("page1.psml"));
466 assertEquals("/page1.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page1.psml").getId()));
467 assertNotNull(requestSiblingPageProxies.get("page2.psml"));
468 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestSiblingPageProxies.get("page2.psml").getId()));
469 Folder requestParentFolderProxy = requestContext.getParentFolder();
470 assertNull(requestParentFolderProxy);
471 NodeSet requestSiblingFolderProxies = requestContext.getSiblingFolders();
472 assertNotNull(requestSiblingFolderProxies);
473 assertEquals(3, requestSiblingFolderProxies.size());
474 assertNotNull(requestSiblingFolderProxies.get("folder0"));
475 assertEquals("/folder0", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder0").getId()));
476 assertNotNull(requestSiblingFolderProxies.get("folder1"));
477 assertEquals("/_user/user/folder1", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder1").getId()));
478 assertNotNull(requestSiblingFolderProxies.get("folder2"));
479 assertEquals("/folder2", extractFileSystemPathFromId(requestSiblingFolderProxies.get("folder2").getId()));
480 Folder requestRootFolderProxy = requestContext.getRootFolder();
481 assertNotNull(requestRootFolderProxy);
482 assertEquals("/", requestRootFolderProxy.getName());
483 assertEquals("/_user/user", extractFileSystemPathFromId(requestRootFolderProxy.getId()));
484 NodeSet requestRootLinkProxies = requestContext.getRootLinks();
485 assertNotNull(requestRootLinkProxies);
486 assertEquals(2, requestRootLinkProxies.size());
487 assertNotNull(requestRootLinkProxies.get("link0.link"));
488 assertEquals("/_group/group/link0.link", extractFileSystemPathFromId(requestRootLinkProxies.get("link0.link").getId()));
489 assertNotNull(requestRootLinkProxies.get("link1.link"));
490 assertEquals("/link1.link", extractFileSystemPathFromId(requestRootLinkProxies.get("link1.link").getId()));
491 }
492
493 /***
494 * testPortalSiteRequests - Test PortalSite request path logic
495 *
496 * @throws Exception
497 */
498 public void testPotalSiteRequests() throws Exception
499 {
500 assertNotNull(portalSite);
501 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
502 assertNotNull(sessionContext);
503 JetspeedProfileLocator locator = new JetspeedProfileLocator();
504 locator.init(null, "/");
505 locator.add("page", false, false, "default-page");
506 locator.add("user", true, false, "user");
507 Map locators = new HashMap();
508 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
509 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
510 assertNotNull(requestContext);
511 Page requestPageProxy = requestContext.getPage();
512 assertNotNull(requestPageProxy);
513 assertEquals("page2.psml", requestPageProxy.getName());
514 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
515
516 locator = new JetspeedProfileLocator();
517 locator.init(null, "/");
518 locator.add("page", false, false, null);
519 locator.add("user", true, false, "user");
520 locators = new HashMap();
521 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
522 requestContext = sessionContext.newRequestContext(locators);
523 assertNotNull(requestContext);
524 requestPageProxy = requestContext.getPage();
525 assertNotNull(requestPageProxy);
526 assertEquals("page2.psml", requestPageProxy.getName());
527 assertEquals("/_user/user/page2.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
528
529 locator = new JetspeedProfileLocator();
530 locator.init(null, "/");
531 locator.add("page", false, false, "page1");
532 locator.add("user", true, false, "user");
533 locators = new HashMap();
534 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
535 requestContext = sessionContext.newRequestContext(locators);
536 assertNotNull(requestContext);
537 requestPageProxy = requestContext.getPage();
538 assertNotNull(requestPageProxy);
539 assertEquals("page1.psml", requestPageProxy.getName());
540 assertEquals("/page1.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
541
542 locator = new JetspeedProfileLocator();
543 locator.init(null, "/");
544 locator.add("page", false, false, "folder1/");
545 locator.add("user", true, false, "user");
546 locators = new HashMap();
547 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
548 requestContext = sessionContext.newRequestContext(locators);
549 assertNotNull(requestContext);
550 requestPageProxy = requestContext.getPage();
551 assertNotNull(requestPageProxy);
552 assertEquals("page0.psml", requestPageProxy.getName());
553 assertEquals("/_user/user/folder1/page0.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
554
555 locator = new JetspeedProfileLocator();
556 locator.init(null, "/");
557 locator.add("page", false, false, "/folder0/");
558 locator.add("user", true, false, "user");
559 locators = new HashMap();
560 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
561 requestContext = sessionContext.newRequestContext(locators);
562 assertNotNull(requestContext);
563 requestPageProxy = requestContext.getPage();
564 assertNotNull(requestPageProxy);
565 assertEquals("page0.psml", requestPageProxy.getName());
566 assertEquals("/folder0/page0.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
567
568 locator = new JetspeedProfileLocator();
569 locator.init(null, "/");
570 locator.add("page", false, false, "/folder3/default-folder0/");
571 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
572 requestContext = sessionContext.newRequestContext(locators);
573 assertNotNull(requestContext);
574 requestPageProxy = requestContext.getPage();
575 assertNotNull(requestPageProxy);
576 assertEquals("page1.psml", requestPageProxy.getName());
577 assertEquals("/folder3/default-folder1/page1.psml", extractFileSystemPathFromId(requestPageProxy.getId()));
578 }
579
580 /***
581 * testPortalSiteMenus - Test PortalSite menu generation
582 *
583 * @throws Exception
584 */
585 public void testPotalSiteMenus() throws Exception
586 {
587 assertNotNull(portalSite);
588 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
589 assertNotNull(sessionContext);
590
591
592 JetspeedProfileLocator locator = new JetspeedProfileLocator();
593 locator.init(null, "/");
594 locator.add("user", true, false, "user");
595 locator.add("mediatype", true, false, "html");
596 Map locators = new HashMap();
597 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
598 locator = new JetspeedProfileLocator();
599 locator.init(null, "/");
600 locator.add("role", true, false, "role0");
601 locators.put("role", locator);
602 locator = new JetspeedProfileLocator();
603 locator.init(null, "/");
604 locator.add("group", true, false, "group");
605 locators.put("group", locator);
606 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
607 assertNotNull(requestContext);
608 Set customMenuNames = requestContext.getCustomMenuNames();
609 assertNotNull(customMenuNames);
610 assertEquals(2, customMenuNames.size());
611 assertTrue(customMenuNames.contains("top"));
612 assertTrue(customMenuNames.contains("bread-crumbs"));
613 Menu topMenu = requestContext.getMenu("top");
614 assertNotNull(topMenu);
615 assertEquals(MenuElement.MENU_ELEMENT_TYPE, topMenu.getElementType());
616 assertNull(topMenu.getParentMenu());
617 assertEquals("user root", topMenu.getTitle());
618 assertEquals("user", topMenu.getShortTitle());
619 assertEquals("dhtml-pull-down", topMenu.getSkin());
620 assertEquals("top", topMenu.getName());
621 assertEquals("/", topMenu.getUrl());
622 assertFalse(topMenu.isEmpty());
623 List topMenuElements = topMenu.getElements();
624 assertNotNull(topMenuElements);
625 assertEquals(7, topMenuElements.size());
626 Iterator menuElementsIter = topMenuElements.iterator();
627 while (menuElementsIter.hasNext())
628 {
629 MenuElement element = (MenuElement)menuElementsIter.next();
630 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("folder0"))
631 {
632 assertTrue(element instanceof Menu);
633 assertEquals("/folder0", ((Menu)element).getUrl());
634 assertTrue(((Menu)element).getParentMenu() == topMenu);
635 assertFalse(((Menu)element).isEmpty());
636 List elements = ((Menu)element).getElements();
637 assertNotNull(elements);
638 assertEquals(1, elements.size());
639 assertTrue(elements.get(0) instanceof MenuOption);
640 assertEquals("/folder0/page0.psml", ((MenuOption)elements.get(0)).getUrl());
641 assertEquals("dhtml-pull-down", element.getSkin());
642 }
643 else if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("group folder1"))
644 {
645 assertTrue(element instanceof Menu);
646 assertEquals("/folder1", ((Menu)element).getUrl());
647 assertTrue(((Menu)element).getParentMenu() == topMenu);
648 assertFalse(((Menu)element).isEmpty());
649 List elements = ((Menu)element).getElements();
650 assertNotNull(elements);
651 assertEquals(2, elements.size());
652 assertTrue(elements.get(0) instanceof MenuOption);
653 assertEquals("/folder1/page0.psml", ((MenuOption)elements.get(0)).getTitle());
654 assertTrue(elements.get(1) instanceof MenuOption);
655 assertEquals("/folder1/page1.psml", ((MenuOption)elements.get(1)).getTitle());
656 }
657 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
658 {
659 assertTrue(element instanceof MenuOption);
660 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
661 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
662 }
663 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
664 {
665 assertTrue(element instanceof MenuOption);
666 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
667 }
668 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page0.psml"))
669 {
670 assertTrue(element instanceof MenuOption);
671 assertEquals("/page0.psml", ((MenuOption)element).getUrl());
672 }
673 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
674 {
675 assertTrue(element instanceof MenuOption);
676 assertEquals("http://link1", ((MenuOption)element).getUrl());
677 assertEquals("top", ((MenuOption)element).getTarget());
678 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
679 }
680 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
681 {
682 assertTrue(element instanceof MenuOption);
683 assertEquals("http://link0", ((MenuOption)element).getUrl());
684 assertNull(((MenuOption)element).getTarget());
685 assertEquals("dhtml-pull-down", element.getSkin());
686 }
687 else
688 {
689 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
690 }
691 }
692 assertTrue(topMenu.isSelected(requestContext));
693 MenuElement selected = topMenu.getSelectedElement(requestContext);
694 assertNotNull(selected);
695 assertEquals(MenuElement.OPTION_ELEMENT_TYPE, selected.getElementType());
696 assertTrue(selected instanceof MenuOption);
697 assertEquals("/page2.psml", ((MenuOption)selected).getUrl());
698 assertEquals("/page2.psml", selected.getTitle());
699 assertEquals("dhtml-pull-down", selected.getSkin());
700 assertFalse(((MenuImpl)topMenu).isElementRelative());
701 Menu breadCrumbsMenu = requestContext.getMenu("bread-crumbs");
702 assertNotNull(breadCrumbsMenu);
703 assertEquals("bread-crumbs", breadCrumbsMenu.getName());
704 assertEquals("/", breadCrumbsMenu.getUrl());
705 assertFalse(breadCrumbsMenu.isEmpty());
706 List breadCrumbsElements = breadCrumbsMenu.getElements();
707 assertNotNull(breadCrumbsElements);
708 assertEquals(1, breadCrumbsElements.size());
709 assertTrue(breadCrumbsElements.get(0) instanceof MenuOption);
710 assertEquals("/", ((MenuOption)breadCrumbsElements.get(0)).getUrl());
711 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(0)).getType());
712 assertTrue(((MenuImpl)breadCrumbsMenu).isElementRelative());
713
714
715 locator = new JetspeedProfileLocator();
716 locator.init(null, "/folder0");
717 locator.add("user", true, false, "user");
718 locator.add("mediatype", true, false, "html");
719 locators = new HashMap();
720 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
721 locator = new JetspeedProfileLocator();
722 locator.init(null, "/folder0");
723 locator.add("role", true, false, "role0");
724 locators.put("role", locator);
725 locator = new JetspeedProfileLocator();
726 locator.init(null, "/folder0");
727 locator.add("group", true, false, "group");
728 locators.put("group", locator);
729 requestContext = sessionContext.newRequestContext(locators);
730 assertNotNull(requestContext);
731 Menu topMenu2 = requestContext.getMenu("top");
732 assertNotNull(topMenu2);
733 assertTrue(topMenu == topMenu2);
734 Menu breadCrumbsMenu2 = requestContext.getMenu("bread-crumbs");
735 assertNotNull(breadCrumbsMenu2);
736 assertTrue(breadCrumbsMenu != breadCrumbsMenu2);
737 assertEquals("bread-crumbs", breadCrumbsMenu2.getName());
738 assertEquals("/folder0", breadCrumbsMenu2.getUrl());
739 assertFalse(breadCrumbsMenu2.isEmpty());
740 breadCrumbsElements = breadCrumbsMenu2.getElements();
741 assertNotNull(breadCrumbsElements);
742 assertEquals(2, breadCrumbsElements.size());
743 assertTrue(breadCrumbsElements.get(0) instanceof MenuOption);
744 assertEquals("/", ((MenuOption)breadCrumbsElements.get(0)).getUrl());
745 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(0)).getType());
746 assertEquals("/folder0", ((MenuOption)breadCrumbsElements.get(1)).getUrl());
747 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)breadCrumbsElements.get(1)).getType());
748 assertTrue(((MenuImpl)breadCrumbsMenu2).isElementRelative());
749 Menu hiddenMenu = requestContext.getMenu("override-hidden");
750 assertNotNull(hiddenMenu);
751 assertTrue(hiddenMenu.isEmpty());
752 Menu navigationsMenu = requestContext.getMenu("navigations");
753 assertNotNull(navigationsMenu);
754 assertTrue(navigationsMenu.isEmpty());
755
756
757 locator = new JetspeedProfileLocator();
758 locator.init(null, "/page1.psml");
759 locator.add("user", true, false, "user");
760 locator.add("mediatype", true, false, "html");
761 locators = new HashMap();
762 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
763 locator = new JetspeedProfileLocator();
764 locator.init(null, "/page1.psml");
765 locator.add("role", true, false, "role0");
766 locators.put("role", locator);
767 locator = new JetspeedProfileLocator();
768 locator.init(null, "/page1.psml");
769 locator.add("group", true, false, "group");
770 locators.put("group", locator);
771 requestContext = sessionContext.newRequestContext(locators);
772 assertNotNull(requestContext);
773 assertNull(requestContext.getMenu("no-such-menu"));
774 Menu topMenu3 = requestContext.getMenu("top");
775 assertNotNull(topMenu3);
776 assertTrue(topMenu == topMenu3);
777 Menu backMenu = requestContext.getMenu("back");
778 assertNotNull(backMenu);
779 assertTrue(backMenu.isEmpty());
780 assertNull(backMenu.getElements());
781 assertTrue(((MenuImpl)backMenu).isElementRelative());
782 assertEquals("back", backMenu.getName());
783 assertEquals("Back to", backMenu.getTitle());
784 assertEquals("Back to", backMenu.getShortTitle());
785 assertEquals("\u00bb", backMenu.getTitle(Locale.JAPANESE));
786 assertEquals("\u00bb", backMenu.getShortTitle(Locale.JAPANESE));
787 assertEquals("Back to", backMenu.getTitle(new Locale("xx")));
788 assertEquals("Back to", backMenu.getShortTitle(new Locale("xx")));
789 Menu breadcrumbsMenu = requestContext.getMenu("breadcrumbs");
790 assertNotNull(breadcrumbsMenu);
791 assertFalse(breadcrumbsMenu.isEmpty());
792 assertEquals("You are here:", breadcrumbsMenu.getTitle());
793 assertEquals("\u73fe\u5728\u30d1\u30b9\uff1a", breadcrumbsMenu.getTitle(Locale.JAPANESE));
794 navigationsMenu = requestContext.getMenu("navigations");
795 assertNotNull(navigationsMenu);
796 assertFalse(navigationsMenu.isEmpty());
797 List navigationsElements = navigationsMenu.getElements();
798 assertNotNull(navigationsElements);
799 assertEquals(6, navigationsElements.size());
800 menuElementsIter = navigationsElements.iterator();
801 while (menuElementsIter.hasNext())
802 {
803 MenuElement element = (MenuElement)menuElementsIter.next();
804 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
805 (element instanceof MenuSeparator) &&
806 ((MenuSeparator)element).getText().equals("Folders"))
807 {
808 }
809 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("folder0"))
810 {
811 assertTrue(element instanceof MenuOption);
812 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
813 }
814 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("group folder1"))
815 {
816 assertTrue(element instanceof MenuOption);
817 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
818 }
819 else if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
820 (element instanceof MenuSeparator) &&
821 ((MenuSeparator)element).getText().equals("Additional Links"))
822 {
823 }
824 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
825 {
826 assertTrue(element instanceof MenuOption);
827 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
828 }
829 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
830 {
831 assertTrue(element instanceof MenuOption);
832 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
833 assertEquals("left-navigations", element.getSkin());
834 }
835 else
836 {
837 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
838 }
839 }
840 assertEquals("left-navigations", navigationsMenu.getSkin());
841 assertTrue(((MenuImpl)navigationsMenu).isElementRelative());
842 Menu pagesMenu = requestContext.getMenu("pages");
843 assertNotNull(pagesMenu);
844 assertFalse(pagesMenu.isEmpty());
845 List pagesElements = pagesMenu.getElements();
846 assertNotNull(pagesElements);
847 assertEquals(3, pagesElements.size());
848 menuElementsIter = pagesElements.iterator();
849 while (menuElementsIter.hasNext())
850 {
851 MenuElement element = (MenuElement)menuElementsIter.next();
852 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
853 {
854 assertTrue(element instanceof MenuOption);
855 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
856 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
857 }
858 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
859 {
860 assertTrue(element instanceof MenuOption);
861 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
862 }
863 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page0.psml"))
864 {
865 assertTrue(element instanceof MenuOption);
866 assertEquals("/page0.psml", ((MenuOption)element).getUrl());
867 assertEquals("tabs", element.getSkin());
868 }
869 else
870 {
871 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
872 }
873 }
874 assertEquals("tabs", pagesMenu.getSkin());
875 assertTrue(((MenuImpl)pagesMenu).isElementRelative());
876
877
878 locator = new JetspeedProfileLocator();
879 locator.init(null, "/folder1");
880 locator.add("user", true, false, "user");
881 locator.add("mediatype", true, false, "html");
882 locators = new HashMap();
883 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
884 locator = new JetspeedProfileLocator();
885 locator.init(null, "/folder1");
886 locator.add("group", true, false, "group");
887 locators.put("group", locator);
888 requestContext = sessionContext.newRequestContext(locators);
889 assertNotNull(requestContext);
890 Menu backMenu2 = requestContext.getMenu("back");
891 assertNotNull(backMenu2);
892 assertFalse(backMenu2.isEmpty());
893 Menu topMenu4 = requestContext.getMenu("top");
894 assertNotNull(topMenu4);
895 assertTrue(topMenu != topMenu4);
896 Menu customMenu = requestContext.getMenu("custom");
897 assertNotNull(customMenu);
898 assertFalse(customMenu.isEmpty());
899 List customElements = customMenu.getElements();
900 assertNotNull(customElements);
901 assertEquals(12, customElements.size());
902 assertEquals("custom", customMenu.getName());
903 assertEquals("Top Menu", customMenu.getTitle());
904 assertEquals("Haut", customMenu.getTitle(Locale.FRENCH));
905 menuElementsIter = customElements.iterator();
906 for (int i = 0; ((i < 2) && menuElementsIter.hasNext()); i++)
907 {
908 MenuElement element = (MenuElement)menuElementsIter.next();
909 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link0.link"))
910 {
911 assertTrue(element instanceof MenuOption);
912 assertEquals("http://link0", ((MenuOption)element).getUrl());
913 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
914 }
915 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/folder1/page1.psml"))
916 {
917 assertTrue(element instanceof MenuOption);
918 assertEquals("/folder1/page1.psml", ((MenuOption)element).getUrl());
919 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
920 }
921 else
922 {
923 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
924 }
925 }
926 if (menuElementsIter.hasNext())
927 {
928 MenuElement element = (MenuElement)menuElementsIter.next();
929 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("user root"))
930 {
931 assertFalse(((Menu)element).isEmpty());
932 List nestedElements = ((Menu)element).getElements();
933 assertEquals(6, nestedElements.size());
934 Iterator nestedElementsIter = nestedElements.iterator();
935 if (nestedElementsIter.hasNext())
936 {
937 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
938 if (nestedElement.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
939 (nestedElement instanceof MenuSeparator) &&
940 ((MenuSeparator)nestedElement).getText().equals("=== Current Page ==="))
941 {
942 }
943 else
944 {
945 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
946 }
947 }
948 if (nestedElementsIter.hasNext())
949 {
950 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
951 if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
952 nestedElement.getTitle().equals("/folder1/page1.psml"))
953 {
954 assertTrue(nestedElement instanceof MenuOption);
955 assertEquals("/folder1/page1.psml", ((MenuOption)nestedElement).getUrl());
956 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
957 }
958 else
959 {
960 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
961 }
962 }
963 if (nestedElementsIter.hasNext())
964 {
965 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
966 if (nestedElement.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
967 (nestedElement instanceof MenuSeparator) &&
968 ((MenuSeparator)nestedElement).getText().equals("=== Top Pages ==="))
969 {
970 assertEquals("Top Pages", nestedElement.getTitle());
971 }
972 else
973 {
974 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
975 }
976 }
977 for (int i = 0; ((i < 3) && nestedElementsIter.hasNext()); i++)
978 {
979 MenuElement nestedElement = (MenuElement)nestedElementsIter.next();
980 if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
981 nestedElement.getTitle().equals("/page2.psml"))
982 {
983 assertTrue(nestedElement instanceof MenuOption);
984 assertEquals("/page2.psml", ((MenuOption)nestedElement).getUrl());
985 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
986 }
987 else if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
988 nestedElement.getTitle().equals("/page1.psml"))
989 {
990 assertTrue(nestedElement instanceof MenuOption);
991 assertEquals("/page1.psml", ((MenuOption)nestedElement).getUrl());
992 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
993 }
994 else if (nestedElement.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) &&
995 nestedElement.getTitle().equals("/page0.psml"))
996 {
997 assertTrue(nestedElement instanceof MenuOption);
998 assertEquals("/page0.psml", ((MenuOption)nestedElement).getUrl());
999 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)nestedElement).getType());
1000 }
1001 else
1002 {
1003 fail("Unexpected nested menu element type/title: "+nestedElement.getElementType()+"/"+nestedElement.getTitle());
1004 }
1005 }
1006 }
1007 else
1008 {
1009 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1010 }
1011 }
1012 if (menuElementsIter.hasNext())
1013 {
1014 MenuElement element = (MenuElement)menuElementsIter.next();
1015 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
1016 (element instanceof MenuSeparator) &&
1017 ((MenuSeparator)element).getText().equals("=== More Options ==="))
1018 {
1019 }
1020 else
1021 {
1022 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1023 }
1024 }
1025 for (int i = 0; ((i < 4) && menuElementsIter.hasNext()); i++)
1026 {
1027 MenuElement element = (MenuElement)menuElementsIter.next();
1028 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/link1.link"))
1029 {
1030 assertTrue(element instanceof MenuOption);
1031 assertEquals("http://link1", ((MenuOption)element).getUrl());
1032 assertEquals(MenuOption.LINK_OPTION_TYPE, ((MenuOption)element).getType());
1033 }
1034 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page2.psml"))
1035 {
1036 assertTrue(element instanceof MenuOption);
1037 assertEquals("/page2.psml", ((MenuOption)element).getUrl());
1038 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1039 }
1040 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/page1.psml"))
1041 {
1042 assertTrue(element instanceof MenuOption);
1043 assertEquals("/page1.psml", ((MenuOption)element).getUrl());
1044 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1045 }
1046 else if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/folder1/page1.psml"))
1047 {
1048 assertTrue(element instanceof MenuOption);
1049 assertEquals("/folder1/page1.psml", ((MenuOption)element).getUrl());
1050 assertEquals(MenuOption.PAGE_OPTION_TYPE, ((MenuOption)element).getType());
1051 }
1052 else
1053 {
1054 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1055 }
1056 }
1057 if (menuElementsIter.hasNext())
1058 {
1059 MenuElement element = (MenuElement)menuElementsIter.next();
1060 if (element.getElementType().equals(MenuElement.SEPARATOR_ELEMENT_TYPE) &&
1061 (element instanceof MenuSeparator) &&
1062 ((MenuSeparator)element).getText().equals("=== Standard Menus ==="))
1063 {
1064 }
1065 else
1066 {
1067 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1068 }
1069 }
1070 if (menuElementsIter.hasNext())
1071 {
1072 MenuElement element = (MenuElement)menuElementsIter.next();
1073 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("user root"))
1074 {
1075 assertTrue(element instanceof MenuOption);
1076 assertEquals("/", ((MenuOption)element).getUrl());
1077 assertEquals(MenuOption.FOLDER_OPTION_TYPE, ((MenuOption)element).getType());
1078 }
1079 else
1080 {
1081 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1082 }
1083 }
1084 if (menuElementsIter.hasNext())
1085 {
1086 MenuElement element = (MenuElement)menuElementsIter.next();
1087 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("navigations"))
1088 {
1089 assertTrue(element instanceof Menu);
1090 assertEquals("navigations", ((Menu)element).getName());
1091 }
1092 else
1093 {
1094 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1095 }
1096 }
1097 if (menuElementsIter.hasNext())
1098 {
1099 MenuElement element = (MenuElement)menuElementsIter.next();
1100 if (element.getElementType().equals(MenuElement.MENU_ELEMENT_TYPE) && element.getTitle().equals("pages"))
1101 {
1102 assertTrue(element instanceof Menu);
1103 assertEquals("pages", ((Menu)element).getName());
1104 }
1105 else
1106 {
1107 fail("Unexpected menu element type/title: "+element.getElementType()+"/"+element.getTitle());
1108 }
1109 }
1110 }
1111
1112 /***
1113 * testPortalSiteHiddenPageMenus - Test PortalSite menu generation for hidden pages
1114 *
1115 * @throws Exception
1116 */
1117 public void testPotalSiteHiddenPageMenus() throws Exception
1118 {
1119 assertNotNull(portalSite);
1120 PortalSiteSessionContext sessionContext = portalSite.newSessionContext();
1121 assertNotNull(sessionContext);
1122
1123
1124 JetspeedProfileLocator locator = new JetspeedProfileLocator();
1125 locator.init(null, "/");
1126 locator.add("user", true, false, "user");
1127 Map locators = new HashMap();
1128 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1129 PortalSiteRequestContext requestContext = sessionContext.newRequestContext(locators);
1130 assertNotNull(requestContext);
1131 Menu topMenu = requestContext.getMenu("top");
1132 assertNotNull(topMenu);
1133 assertFalse(topMenu.isEmpty());
1134 List topMenuElements = topMenu.getElements();
1135 assertNotNull(topMenuElements);
1136 Iterator menuElementsIter = topMenuElements.iterator();
1137 boolean hiddenElement = false;
1138 while (menuElementsIter.hasNext())
1139 {
1140 MenuElement element = (MenuElement)menuElementsIter.next();
1141 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1142 {
1143 hiddenElement = true;
1144 }
1145 }
1146 assertFalse(hiddenElement);
1147 Menu pagesMenu = requestContext.getMenu("pages");
1148 assertNotNull(pagesMenu);
1149 assertFalse(pagesMenu.isEmpty());
1150 List pagesElements = pagesMenu.getElements();
1151 assertNotNull(pagesElements);
1152 menuElementsIter = pagesElements.iterator();
1153 hiddenElement = false;
1154 while (menuElementsIter.hasNext())
1155 {
1156 MenuElement element = (MenuElement)menuElementsIter.next();
1157 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1158 {
1159 hiddenElement = true;
1160 }
1161 }
1162 assertFalse(hiddenElement);
1163
1164
1165 locator = new JetspeedProfileLocator();
1166 locator.init(null, "/hidden.psml");
1167 locator.add("user", true, false, "user");
1168 locators = new HashMap();
1169 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1170 requestContext = sessionContext.newRequestContext(locators);
1171 assertNotNull(requestContext);
1172 topMenu = requestContext.getMenu("top");
1173 assertNotNull(topMenu);
1174 assertFalse(topMenu.isEmpty());
1175 topMenuElements = topMenu.getElements();
1176 assertNotNull(topMenuElements);
1177 menuElementsIter = topMenuElements.iterator();
1178 hiddenElement = false;
1179 while (menuElementsIter.hasNext())
1180 {
1181 MenuElement element = (MenuElement)menuElementsIter.next();
1182 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1183 {
1184 hiddenElement = true;
1185 }
1186 }
1187 assertTrue(hiddenElement);
1188 pagesMenu = requestContext.getMenu("pages");
1189 assertNotNull(pagesMenu);
1190 assertFalse(pagesMenu.isEmpty());
1191 pagesElements = pagesMenu.getElements();
1192 assertNotNull(pagesElements);
1193 menuElementsIter = pagesElements.iterator();
1194 hiddenElement = false;
1195 while (menuElementsIter.hasNext())
1196 {
1197 MenuElement element = (MenuElement)menuElementsIter.next();
1198 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1199 {
1200 hiddenElement = true;
1201 }
1202 }
1203 assertTrue(hiddenElement);
1204
1205
1206 locator = new JetspeedProfileLocator();
1207 locator.init(null, "/");
1208 locator.add("user", true, false, "user");
1209 locators = new HashMap();
1210 locators.put(ProfileLocator.PAGE_LOCATOR, locator);
1211 requestContext = sessionContext.newRequestContext(locators);
1212 assertNotNull(requestContext);
1213 topMenu = requestContext.getMenu("top");
1214 assertNotNull(topMenu);
1215 assertFalse(topMenu.isEmpty());
1216 topMenuElements = topMenu.getElements();
1217 assertNotNull(topMenuElements);
1218 menuElementsIter = topMenuElements.iterator();
1219 hiddenElement = false;
1220 while (menuElementsIter.hasNext())
1221 {
1222 MenuElement element = (MenuElement)menuElementsIter.next();
1223 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1224 {
1225 hiddenElement = true;
1226 }
1227 }
1228 assertFalse(hiddenElement);
1229 pagesMenu = requestContext.getMenu("pages");
1230 assertNotNull(pagesMenu);
1231 assertFalse(pagesMenu.isEmpty());
1232 pagesElements = pagesMenu.getElements();
1233 assertNotNull(pagesElements);
1234 menuElementsIter = pagesElements.iterator();
1235 hiddenElement = false;
1236 while (menuElementsIter.hasNext())
1237 {
1238 MenuElement element = (MenuElement)menuElementsIter.next();
1239 if (element.getElementType().equals(MenuElement.OPTION_ELEMENT_TYPE) && element.getTitle().equals("/hidden.psml"))
1240 {
1241 hiddenElement = true;
1242 }
1243 }
1244 assertFalse(hiddenElement);
1245 }
1246
1247 /***
1248 * extractFileSystemPathFromId - utility to convert proxy ids to file system paths
1249 *
1250 * @param id proxy node id
1251 * @return files system path
1252 */
1253 private String extractFileSystemPathFromId(String id)
1254 {
1255 if ((id != null) && !id.equals(Folder.PATH_SEPARATOR) && id.endsWith(Folder.PATH_SEPARATOR))
1256 {
1257 return id.substring(0, id.length() - 1);
1258 }
1259 return id;
1260 }
1261
1262 /***
1263 * extractLocatorNameFromProxy - utility to access profile locator name from proxy
1264 *
1265 * @param proxy site view node proxy
1266 * @return locator name
1267 */
1268 private String extractLocatorNameFromProxy(Object proxy) throws Exception
1269 {
1270 return ((NodeProxy)Proxy.getInvocationHandler(proxy)).getLocatorName();
1271 }
1272 }