001 /**
002 * Copyright 2005-2011 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 package org.kuali.rice.ken.dao;
017
018 import org.kuali.rice.ken.bo.NotificationChannel;
019 import org.kuali.rice.ken.bo.NotificationChannelReviewer;
020 import org.kuali.rice.ken.bo.NotificationProducer;
021 import org.kuali.rice.ken.test.util.MockObjectsUtil;
022 import org.kuali.rice.ken.util.NotificationConstants;
023 import org.kuali.rice.kim.api.KimConstants.KimGroupMemberTypes;
024 import org.kuali.rice.test.BaselineTestCase.BaselineMode;
025 import org.kuali.rice.test.BaselineTestCase.Mode;
026
027 import java.util.HashMap;
028
029 import static org.junit.Assert.assertEquals;
030 import static org.junit.Assert.assertNotNull;
031
032 /**
033 * This class test basic persistence for the NotificationChannel business object.
034 *
035 * @author Kuali Rice Team (rice.collab@kuali.org)
036 */
037 @BaselineMode(Mode.CLEAR_DB) // this test can't run in a transaction because of how it is using ojb
038 public class NotificationChannelDaoTest extends BusinessObjectPersistenceTestCaseBase {
039 NotificationChannel channel1 = MockObjectsUtil.getTestChannel1();
040 NotificationChannel channel2 = MockObjectsUtil.getTestChannel2();
041
042 NotificationProducer mockProducer1 = MockObjectsUtil.getTestProducer1();
043
044 private String[] updatedDescriptions = {"Test 1 - updated description", "Test 2 - updated description"};
045 private boolean[] updatedSubscribables = {false, true};
046
047 /**
048 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#setup()
049 */
050 @Override
051 protected void setup() {
052 super.setup();
053 businessObjectDao.save(mockProducer1);
054 }
055
056 /**
057 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#delete()
058 */
059 @Override
060 protected boolean delete() {
061 NotificationChannel mockChannel1 = MockObjectsUtil.getTestChannel1();
062 NotificationChannel mockChannel2 = MockObjectsUtil.getTestChannel2();
063
064 channel1 = new NotificationChannel();
065 channel2 = new NotificationChannel();
066
067 HashMap criteria = new HashMap();
068
069 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel1.getName());
070 channel1 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
071
072 criteria.clear();
073
074 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel2.getName());
075 channel2 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
076
077 try {
078 businessObjectDao.delete(channel1);
079 businessObjectDao.delete(channel2);
080 } catch(Exception e) {
081 return false;
082 }
083 return true;
084 }
085
086 /**
087 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#retrieve()
088 */
089 @Override
090 protected boolean retrieve() {
091 NotificationChannel mockChannel1 = MockObjectsUtil.getTestChannel1();
092 NotificationChannel mockChannel2 = MockObjectsUtil.getTestChannel2();
093
094 channel1 = new NotificationChannel();
095 channel2 = new NotificationChannel();
096
097 HashMap criteria = new HashMap();
098
099 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel1.getName());
100 channel1 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
101
102 criteria.clear();
103
104 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel2.getName());
105 channel2 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
106
107 boolean success = true;
108
109 success &= channel1 != null;
110 success &= channel1.getDescription().equals(mockChannel1.getDescription());
111 success &= (channel1.isSubscribable()==mockChannel1.isSubscribable());
112 success &= channel1.getProducers().size() == 1;
113
114 success &= channel2 != null;
115 success &= channel2.getDescription().equals(mockChannel2.getDescription());
116 success &= (channel2.isSubscribable()==mockChannel2.isSubscribable());
117 success &= channel2.getProducers().size() == 1;
118
119 return success;
120 }
121
122 /**
123 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#insert()
124 */
125 @Override
126 protected boolean insert() {
127 // add in a notification channel producer join object
128 try {
129 channel1.getProducers().add(mockProducer1);
130 businessObjectDao.save(channel1);
131
132 // reload for collections
133 mockProducer1 = (NotificationProducer) businessObjectDao.findById(NotificationProducer.class, mockProducer1.getId());
134
135 channel2.getProducers().add(mockProducer1);
136 businessObjectDao.save(channel2);
137 assertEquals(1, channel2.getProducers().size());
138
139 mockProducer1 = (NotificationProducer) businessObjectDao.findById(NotificationProducer.class, mockProducer1.getId());
140 assertEquals(2, mockProducer1.getChannels().size());
141
142 channel2 = (NotificationChannel) businessObjectDao.findById(NotificationChannel.class, channel2.getId());
143 assertEquals(1, channel2.getProducers().size());
144 } catch(Exception e) {
145 return false;
146 }
147 return true;
148 }
149
150 /**
151 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#update()
152 */
153 @Override
154 protected boolean update() {
155 try {
156
157 channel2 = (NotificationChannel) businessObjectDao.findById(NotificationChannel.class, channel2.getId());
158 assertEquals(1, channel2.getProducers().size());
159
160 channel1.setDescription(updatedDescriptions[0]);
161 channel1.setSubscribable(updatedSubscribables[0]);
162 channel1.getProducers().clear();
163
164 businessObjectDao.save(channel1);
165
166 mockProducer1 = (NotificationProducer) businessObjectDao.findById(NotificationProducer.class, mockProducer1.getId());
167 assertNotNull(mockProducer1);
168 assertEquals(1, mockProducer1.getChannels().size());
169
170 channel2 = (NotificationChannel) businessObjectDao.findById(NotificationChannel.class, channel2.getId());
171 assertEquals(1, channel2.getProducers().size());
172
173 channel2.setDescription(updatedDescriptions[1]);
174 channel2.setSubscribable(updatedSubscribables[1]);
175 NotificationChannelReviewer reviewer = MockObjectsUtil.buildTestNotificationChannelReviewer(KimGroupMemberTypes.PRINCIPAL_MEMBER_TYPE, "aReviewer");
176 reviewer.setChannel(channel2);
177 channel2.getReviewers().add(reviewer);
178
179 businessObjectDao.save(channel2);
180
181 } catch(Exception e) {
182 return false;
183 }
184 return true;
185 }
186
187 /**
188 * @see org.kuali.rice.ken.dao.BusinessObjectPersistenceTestCaseBase#validateChanges()
189 */
190 @Override
191 protected boolean validateChanges() {
192 //retrieve fresh again
193 NotificationChannel mockChannel1 = MockObjectsUtil.getTestChannel1();
194 NotificationChannel mockChannel2 = MockObjectsUtil.getTestChannel2();
195
196 channel1 = new NotificationChannel();
197 channel2 = new NotificationChannel();
198
199 HashMap criteria = new HashMap();
200
201 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel1.getName());
202 channel1 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
203
204 criteria.clear();
205
206 criteria.put(NotificationConstants.BO_PROPERTY_NAMES.NAME, mockChannel2.getName());
207 channel2 = (NotificationChannel) (businessObjectDao.findMatching(NotificationChannel.class, criteria)).iterator().next();
208
209 boolean success = true;
210
211 success &= channel1.getDescription().equals(updatedDescriptions[0]);
212 success &= (channel1.isSubscribable()==updatedSubscribables[0]);
213 success &= channel1.getProducers().size() == 0;
214
215 success &= channel2.getDescription().equals(updatedDescriptions[1]);
216 success &= (channel2.isSubscribable()==updatedSubscribables[1]);
217 success &= channel2.getProducers().size() == 1;
218 success &= channel2.getReviewers().size() == 1;
219
220 return success;
221 }
222 }