View Javadoc

1   /*
2    * Copyright 2007-2008 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License"); you may not use this file except in
5    * compliance with the License. You may obtain a copy of the License at
6    * 
7    * http://www.opensource.org/licenses/ecl2.php
8    * 
9    * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS
10   * IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific
11   * language governing permissions and limitations under the License.
12   */
13  package org.kuali.test;
14  
15  import java.util.List;
16  
17  import org.kuali.rice.core.lifecycle.BaseLifecycle;
18  import org.kuali.rice.core.lifecycle.Lifecycle;
19  import org.kuali.rice.kew.batch.KEWXmlDataLoaderLifecycle;
20  import org.kuali.rice.kns.service.KNSServiceLocator;
21  import org.kuali.rice.kns.util.GlobalVariables;
22  import org.kuali.rice.kns.util.MessageMap;
23  import org.kuali.rice.test.RiceInternalSuiteDataTestCase;
24  import org.kuali.rice.test.TransactionalLifecycle;
25  import org.kuali.rice.test.lifecycles.JettyServerLifecycle;
26  import org.kuali.rice.test.lifecycles.SQLDataLoaderLifecycle;
27  import org.kuali.rice.test.web.HtmlUnitUtil;
28  
29  
30  /**
31   * Default test base for a full KNS enabled unit test.
32   * 
33   * @author Kuali Rice Team (rice.collab@kuali.org)
34   */
35  public abstract class KNSTestCase extends RiceInternalSuiteDataTestCase {
36  
37  	private static final String SQL_FILE = "classpath:org/kuali/rice/kns/test/DefaultSuiteTestData.sql";
38  	private static final String XML_FILE = "classpath:org/kuali/rice/kns/test/DefaultSuiteTestData.xml";
39  	
40  	private String contextName = "/knstest";
41  	private String relativeWebappRoot = "/../kns/src/test/webapp";
42      
43  	
44  	private TransactionalLifecycle transactionalLifecycle;
45  	
46  	@Override
47  	protected void loadSuiteTestData() throws Exception {
48  		super.loadSuiteTestData();
49  		new SQLDataLoaderLifecycle(SQL_FILE, ";").start();
50  	}
51  
52  	@Override
53  	protected List<Lifecycle> getSuiteLifecycles() {
54  		List<Lifecycle> suiteLifecycles = super.getSuiteLifecycles();
55  		suiteLifecycles.add(new KEWXmlDataLoaderLifecycle(XML_FILE));
56  		return suiteLifecycles;
57  	}
58  
59  	@Override
60  	protected Lifecycle getLoadApplicationLifecycle() {
61  		return new BaseLifecycle() {
62  			public void start() throws Exception {
63  				new JettyServerLifecycle(getPort(), getContextName(), getRelativeWebappRoot()).start();
64  				super.start();
65  			}
66  		};	
67  	}
68  
69  	public void setUp() throws Exception {
70  		super.setUp();
71  		final boolean needsSpring = getClass().isAnnotationPresent(KNSWithTestSpringContext.class);
72  		GlobalVariables.setMessageMap(new MessageMap());
73  		if (needsSpring) {
74  			transactionalLifecycle = new TransactionalLifecycle();
75  			transactionalLifecycle.setTransactionManager(KNSServiceLocator.getTransactionManager());
76  			transactionalLifecycle.start();
77  		}
78  	}
79  	
80  	public void tearDown() throws Exception {
81  		final boolean needsSpring = getClass().isAnnotationPresent(KNSWithTestSpringContext.class);
82  		if (needsSpring) {
83  		    if ( (transactionalLifecycle != null) && (transactionalLifecycle.isStarted()) ) {
84  		        transactionalLifecycle.stop();
85  		    }
86  		}
87  		GlobalVariables.setMessageMap(new MessageMap());
88  		super.tearDown();
89  	}
90  
91  
92  	@Override
93  	protected String getModuleName() {
94  		return "kns";
95  	}
96  
97  	protected String getContextName() {
98  		return contextName;
99  	}
100 
101 	protected void setContextName(String contextName) {
102 		this.contextName = contextName;
103 	}
104 
105 	protected int getPort() {
106 		return HtmlUnitUtil.getPort();
107 	}
108 
109 	protected String getRelativeWebappRoot() {
110 		return relativeWebappRoot;
111 	}
112 
113 	protected void setRelativeWebappRoot(String relativeWebappRoot) {
114 		this.relativeWebappRoot = relativeWebappRoot;
115 	}
116 
117 }