001 /*
002 * Copyright 2006-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.kuali.test;
018
019 import org.junit.Assert;
020 import org.junit.Before;
021 import org.junit.Test;
022 import org.kuali.rice.kew.api.exception.WorkflowException;
023 import org.kuali.rice.krad.UserSession;
024 import org.kuali.rice.krad.maintenance.MaintenanceDocument;
025 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
026 import org.kuali.rice.krad.util.GlobalVariables;
027 import org.kuali.rice.krad.util.KRADConstants;
028 import org.kuali.test.KRADTestCase;
029
030 import static org.junit.Assert.assertEquals;
031
032 /**
033 * BaseMaintenanceDocumentTest is a base class for testing maintenance documents
034 *
035 * <p>It provides test methods for setting up, editing, saving and copying a maintenance document</p>
036 *
037 * @author Kuali Rice Team (rice.collab@kuali.org)
038 */
039 public abstract class BaseMaintenanceDocumentTest extends KRADTestCase {
040 private MaintenanceDocument document;
041 private String documentTypeName;
042 private String initiatorPrincipalName;
043
044 @Override
045 public void setUp() throws Exception {
046 super.setUp();
047 GlobalVariables.setUserSession(new UserSession(getInitiatorPrincipalName()));
048 MaintenanceDocument maintenanceDocument =
049 (MaintenanceDocument) KRADServiceLocatorWeb.getDocumentService().getNewDocument(getDocumentTypeName());
050 maintenanceDocument.getDocumentHeader().setDocumentDescription("test maintenance document");
051 setDocument(maintenanceDocument);
052 }
053
054 @Before
055 public void setUpBeforeTest() {
056 GlobalVariables.getMessageMap().clearErrorMessages();
057 }
058
059 /**
060 * Override this method to provide different value
061 *
062 * @return the document type name to use
063 */
064 protected String getDocumentTypeName() {
065 return documentTypeName;
066 }
067
068 /**
069 * Override this method to provide different initiator
070 *
071 * @return the principal name to use as the initiator for the specified document type
072 */
073 protected String getInitiatorPrincipalName() {
074 return initiatorPrincipalName;
075 }
076
077 /**
078 * setup a new maintenance document
079 *
080 * @param document - the maintenance document being tested
081 */
082 protected void setupNewAccountMaintDoc(MaintenanceDocument document) {
083
084 Object am = getNewMaintainableObject();
085
086 document.getOldMaintainableObject().setDataObject(null);
087 document.getOldMaintainableObject().setDataObjectClass(am.getClass());
088 document.getNewMaintainableObject().setDataObject(am);
089 document.getNewMaintainableObject().setDataObjectClass(am.getClass());
090
091 document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_NEW_ACTION);
092 }
093
094 /**
095 *
096 * @return an object to set as the new maintainable object
097 */
098 protected abstract Object getNewMaintainableObject();
099
100 /**
101 *
102 * @return an object to set as the old maintainable object
103 */
104 protected abstract Object getOldMaintainableObject();
105
106 /**
107 * populate maintenance document with objects for editing
108 *
109 * @param document - the maintenance document being tested
110 */
111 protected void setupEditAccountMaintDoc(MaintenanceDocument document) {
112
113 Object newAm = getNewMaintainableObject();
114 Object oldAm = getOldMaintainableObject();
115
116 document.getOldMaintainableObject().setDataObject(oldAm);
117 document.getOldMaintainableObject().setDataObjectClass(oldAm.getClass());
118 document.getNewMaintainableObject().setDataObject(newAm);
119 document.getNewMaintainableObject().setDataObjectClass(newAm.getClass());
120
121 document.getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_EDIT_ACTION);
122 }
123
124 @Test
125 /**
126 * test creating a new maintenance document
127 */
128 public void test_NewDoc() {
129
130 setupNewAccountMaintDoc(getDocument());
131
132 Assert.assertEquals("Document should indicate New.", true, getDocument().isNew());
133 Assert.assertEquals("Document should not indicate Edit.", false, getDocument().isEdit());
134 Assert.assertEquals("Old BO should not be present.", false, getDocument().isOldDataObjectInDocument());
135 }
136
137 @Test
138 /**
139 * test editing a maintenance document
140 */
141 public void test_EditDoc() {
142
143 setupEditAccountMaintDoc(getDocument());
144
145 Assert.assertEquals("Document should not indicate New.", false, getDocument().isNew());
146 Assert.assertEquals("Document should indicate Edit.", true, getDocument().isEdit());
147 Assert.assertEquals("Old BO should be present.", true, getDocument().isOldDataObjectInDocument());
148
149 }
150
151 @Test
152 /**
153 * test copying a maintenance document
154 */
155 public void test_CopyDoc() {
156
157 setupEditAccountMaintDoc(getDocument());
158 getDocument().getNewMaintainableObject().setMaintenanceAction(KRADConstants.MAINTENANCE_COPY_ACTION);
159
160 Assert.assertEquals("Document should indicate New.", true, getDocument().isNew());
161 Assert.assertEquals("Document should not indicate Edit.", false, getDocument().isEdit());
162 Assert.assertEquals("Old BO should be present.", true, getDocument().isOldDataObjectInDocument());
163
164 }
165
166 @Test
167 /**
168 * test saving a maintenance document
169 */
170 public void test_SaveNewDoc() throws WorkflowException {
171 setupNewAccountMaintDoc(getDocument());
172 KRADServiceLocatorWeb.getDocumentService().saveDocument(getDocument());
173 Assert.assertTrue(getDocument().getDocumentHeader().getWorkflowDocument().isSaved());
174 }
175
176 /**
177 * gets the maintenance document that is created in the constructor
178 *
179 * @return a maintenance document of the type returned by {@link #getDocumentTypeName()}
180 */
181 public MaintenanceDocument getDocument() {
182 return document;
183 }
184
185 /**
186 * set the maintenance document to use in the test
187 * @param document - the maintenance document
188 */
189 public void setDocument(MaintenanceDocument document) {
190 this.document = document;
191 }
192 }