001: /*
002: * $Id: InterceptTest.java 459560 2006-03-01 15:22:39Z jcompagner $ $Revision: 459560 $ $Date: 2006-03-01 16:22:39 +0100 (Wed, 01 Mar 2006) $
003: *
004: * ====================================================================
005: * Copyright (c) 2005, Topicus B.V. All rights reserved.
006: */
007: package wicket.markup.html.form.login;
008:
009: import junit.framework.TestCase;
010: import wicket.Component;
011: import wicket.ISessionFactory;
012: import wicket.RestartResponseAtInterceptPageException;
013: import wicket.Session;
014: import wicket.authorization.Action;
015: import wicket.authorization.IAuthorizationStrategy;
016: import wicket.protocol.http.MockWebApplication;
017: import wicket.protocol.http.WebApplication;
018: import wicket.protocol.http.WebRequestCycle;
019: import wicket.protocol.http.WebSession;
020: import wicket.util.string.Strings;
021:
022: /**
023: * @author marrink
024: *
025: */
026: public class InterceptTest extends TestCase {
027: private MyMockWebApplication application;
028:
029: /**
030: * Constructor for InterceptTest.
031: *
032: * @param arg0
033: */
034: public InterceptTest(String arg0) {
035: super (arg0);
036: }
037:
038: /**
039: * @see TestCase#setUp()
040: */
041: protected void setUp() throws Exception {
042: super .setUp();
043: application = new MyMockWebApplication("src/test/"
044: + getClass().getPackage().getName().replace('.', '/'));
045: application.setHomePage(MockHomePage.class);
046: }
047:
048: /**
049: * @see TestCase#tearDown()
050: */
051: protected void tearDown() throws Exception {
052: super .tearDown();
053: }
054:
055: /**
056: *
057: */
058: public void testClickLink() {
059: application.setupRequestAndResponse();
060: application.processRequestCycle();
061: MockLoginPage loginPage = (MockLoginPage) application
062: .getLastRenderedPage();
063: assertEquals(application.getLoginPage(), loginPage.getClass());
064:
065: application.setupRequestAndResponse();
066: application.getServletRequest().setRequestToComponent(
067: loginPage.getForm());
068: application.getServletRequest().setParameter(
069: loginPage.getTextField().getInputName(), "admin");
070: application.processRequestCycle();
071:
072: // continueToInterceptPage seems to return the same call, causing it to
073: // login twice as a result the lastrendered page is null
074: assertEquals(application.getHomePage(), application
075: .getLastRenderedPage().getClass());
076:
077: application.setupRequestAndResponse();
078: application.getServletRequest().setRequestToComponent(
079: application.getLastRenderedPage().get("link"));
080: application.processRequestCycle();
081: assertEquals(PageA.class, application.getLastRenderedPage()
082: .getClass());
083: }
084:
085: /**
086: *
087: */
088: public void testClickLink2() {
089: // same as above but uses different technique to login
090: application.setupRequestAndResponse();
091: application.processRequestCycle();
092: MockLoginPage loginPage = (MockLoginPage) application
093: .getLastRenderedPage();
094: assertEquals(application.getLoginPage(), loginPage.getClass());
095:
096: // bypass form completely to login but continue to intercept page
097: application.setupRequestAndResponse();
098: WebRequestCycle requestCycle = application.createRequestCycle();
099: assertTrue(((MockLoginPage) application.getLastRenderedPage())
100: .login("admin"));
101: application.processRequestCycle(requestCycle);
102: assertEquals(application.getHomePage(), application
103: .getLastRenderedPage().getClass());
104:
105: application.setupRequestAndResponse();
106: application.getServletRequest().setRequestToComponent(
107: application.getLastRenderedPage().get("link"));
108: application.processRequestCycle();
109: assertEquals(PageA.class, application.getLastRenderedPage()
110: .getClass());
111: }
112:
113: /**
114: *
115: * @author
116: */
117: private static class MyMockWebApplication extends
118: MockWebApplication implements ISessionFactory {
119: private static final long serialVersionUID = 1L;
120:
121: /**
122: * @param path
123: */
124: public MyMockWebApplication(String path) {
125: super (path);
126: getSecuritySettings().setAuthorizationStrategy(
127: new MyAuthorizationStrategy());
128: }
129:
130: /**
131: *
132: * @return Class
133: */
134: public Class getLoginPage() {
135: return MockLoginPage.class;
136: }
137:
138: /**
139: *
140: * @see wicket.ISessionFactory#newSession()
141: */
142: public Session newSession() {
143: return new MySession(this );
144: }
145:
146: /**
147: *
148: * @see wicket.Application#getSessionFactory()
149: */
150: protected ISessionFactory getSessionFactory() {
151: return this ;
152: }
153: }
154:
155: /**
156: *
157: */
158: public static class MySession extends WebSession {
159: private static final long serialVersionUID = 1L;
160:
161: private String username;
162:
163: /**
164: * @param application
165: */
166: protected MySession(WebApplication application) {
167: super (application);
168: }
169:
170: protected final String getUsername() {
171: return username;
172: }
173:
174: protected final void setUsername(String username) {
175: this .username = username;
176: }
177:
178: /**
179: *
180: * @return boolean
181: */
182: public boolean isLoggedIn() {
183: return !Strings.isEmpty(username);
184: }
185: }
186:
187: /**
188: *
189: */
190: private static class MyAuthorizationStrategy implements
191: IAuthorizationStrategy {
192: /**
193: * @see wicket.authorization.IAuthorizationStrategy#isInstantiationAuthorized(java.lang.Class)
194: */
195: public boolean isInstantiationAuthorized(Class componentClass) {
196: if (MockHomePage.class.equals(componentClass)
197: && !((MySession) Session.get()).isLoggedIn()) {
198: throw new RestartResponseAtInterceptPageException(
199: MockLoginPage.class);
200: }
201: return true;
202: }
203:
204: /**
205: * @see wicket.authorization.IAuthorizationStrategy#isActionAuthorized(wicket.Component,
206: * wicket.authorization.Action)
207: */
208: public boolean isActionAuthorized(Component component,
209: Action action) {
210: return true;
211: }
212: }
213: }
|