ComponentEventDispatcher implements Dispatcher { public boolean dispatch(Request request, Response response) throws IOException { ComponentEventRequestParameters parameters = linkEncoder.decodeComponentEventRequest(request); if (parameters == null) return false; componentRequestHandler.handleComponentEvent(parameters); if (request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND) != null) { return false; } return true; } ComponentEventDispatcher(ComponentRequestHandler componentRequestHandler,
                                    ComponentEventLinkEncoder linkEncoder); boolean dispatch(Request request, Response response);  }
@Test public void no_dot_or_colon_in_path() throws Exception { Request request = mockRequest(); Response response = mockResponse(); LocalizationSetter ls = mockLocalizationSetter(); expect(ls.isSupportedLocaleName("foo")).andReturn(false); train_getPath(request, "/foo/bar/baz"); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(null, new ComponentEventLinkEncoderImpl(null, contextPathEncoder, ls, response, null, null, null, true, null, "", null, null)); assertFalse(dispatcher.dispatch(request, response)); verify(); }
@Test public void page_activation_context_in_request() throws Exception { ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter ls = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( "mypage", "mypage", "", "eventname", new URLEventContext(contextValueEncoder, new String[] {"alpha", "beta"}), new EmptyEventContext()); train_getPath(request, "/mypage:eventname"); expect(ls.isSupportedLocaleName("mypage:eventname")).andReturn(false); train_isPageName(resolver, "mypage", true); train_canonicalizePageName(resolver, "mypage", "mypage"); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, "alpha/beta"); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); train_for_request_locale(request, ls); handler.handleComponentEvent(expectedParameters); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", metaDataLocator, null)); assertTrue(dispatcher.dispatch(request, response)); verify(); }
@Test public void different_active_and_containing_pages() throws Exception { ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter ls = mockLocalizationSetter(); MetaDataLocator metaDataLocator = neverWhitelistProtected(); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( "activepage", "mypage", "", "eventname", new EmptyEventContext(), new EmptyEventContext()); train_getPath(request, "/activepage:eventname"); expect(ls.isSupportedLocaleName("activepage:eventname")).andReturn(false); train_isPageName(resolver, "activepage", true); train_canonicalizePageName(resolver, "activepage", "activepage"); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, "mypage"); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); train_canonicalizePageName(resolver, "mypage", "mypage"); train_for_request_locale(request, ls); handler.handleComponentEvent(expectedParameters); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", metaDataLocator, null)); assertTrue(dispatcher.dispatch(request, response)); verify(); }
@Test public void request_path_reference_non_existent_page() throws Exception { Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter ls = mockLocalizationSetter(); expect(ls.isSupportedLocaleName("en")).andReturn(true); train_getPath(request, "/en/mypage.foo"); train_isPageName(resolver, "mypage", false); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(null, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, ls, response, null, null, null, true, null, "", null, null)); assertFalse(dispatcher.dispatch(request, response)); verify(); }
@Test public void request_for_whitelist_only_page_from_valid_client() throws IOException { String containerPageName = "foo/MyPage"; ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter localizationSetter = mockLocalizationSetter(); MetaDataLocator metaDataLocator = newMock(MetaDataLocator.class); ClientWhitelist whitelist = newMock(ClientWhitelist.class); ComponentEventRequestParameters expectedParameters = new ComponentEventRequestParameters( containerPageName, containerPageName, "", "anevent", new EmptyEventContext(), new EmptyEventContext()); train_getPath(request, "/foo/MyPage:anevent"); expect(localizationSetter.isSupportedLocaleName("foo")).andReturn(false); train_isPageName(resolver, containerPageName, true); train_canonicalizePageName(resolver, containerPageName, containerPageName); expect(metaDataLocator.findMeta(MetaDataConstants.WHITELIST_ONLY_PAGE, containerPageName, boolean.class)).andReturn(true); expect(whitelist.isClientRequestOnWhitelist()).andReturn(true); train_getParameter(request, InternalConstants.PAGE_CONTEXT_NAME, null); train_getParameter(request, InternalConstants.CONTAINER_PAGE_NAME, null); expect(request.getAttribute(InternalConstants.REFERENCED_COMPONENT_NOT_FOUND)).andStubReturn(null); train_for_request_locale(request, localizationSetter); handler.handleComponentEvent(expectedParameters); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter, response, null, null, null, true, null, "", metaDataLocator, whitelist)); assertTrue(dispatcher.dispatch(request, response)); verify(); }
@Test public void request_for_whitelist_only_page_from_client_not_on_whitelist() throws IOException { String requestPath = "/foo/MyPage:anevent"; String localeName = "foo"; String containerPageName = "foo/MyPage"; ComponentRequestHandler handler = mockComponentRequestHandler(); Request request = mockRequest(); Response response = mockResponse(); ComponentClassResolver resolver = mockComponentClassResolver(); LocalizationSetter localizationSetter = mockLocalizationSetter(); MetaDataLocator metaDataLocator = newMock(MetaDataLocator.class); ClientWhitelist whitelist = newMock(ClientWhitelist.class); train_getPath(request, requestPath); expect(localizationSetter.isSupportedLocaleName("foo")).andReturn(false); train_isPageName(resolver, containerPageName, true); train_canonicalizePageName(resolver, containerPageName, containerPageName); expect(metaDataLocator.findMeta(MetaDataConstants.WHITELIST_ONLY_PAGE, containerPageName, boolean.class)).andReturn(true); expect(whitelist.isClientRequestOnWhitelist()).andReturn(false); replay(); Dispatcher dispatcher = new ComponentEventDispatcher(handler, new ComponentEventLinkEncoderImpl(resolver, contextPathEncoder, localizationSetter, response, null, null, null, true, null, "", metaDataLocator, whitelist)); assertFalse(dispatcher.dispatch(request, response)); verify(); }