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.kcb.service.impl;
017
018 import org.junit.Test;
019 import org.kuali.rice.kcb.bo.RecipientPreference;
020 import org.kuali.rice.kcb.service.GlobalKCBServiceLocator;
021 import org.kuali.rice.kcb.service.RecipientPreferenceService;
022 import org.kuali.rice.kcb.test.BusinessObjectTestCase;
023 import org.kuali.rice.kcb.test.KCBTestData;
024 import org.springframework.dao.DataAccessException;
025 import org.springframework.dao.DataIntegrityViolationException;
026
027 import java.util.Map;
028
029 import static org.junit.Assert.*;
030
031 /**
032 * Tests recipient preferences
033 *
034 * @author Kuali Rice Team (rice.collab@kuali.org)
035 */
036 public class RecipientPreferenceTest extends BusinessObjectTestCase {
037 private RecipientPreference PREF;
038 private RecipientPreferenceService prefsvc;
039
040 @Override
041 public void setUp() throws Exception {
042 super.setUp();
043
044 prefsvc = GlobalKCBServiceLocator.getInstance().getRecipientPreferenceService();
045
046 PREF = new RecipientPreference();
047 PREF.setRecipientId("user1");
048 PREF.setProperty("property1");
049 PREF.setValue("value1");
050
051 prefsvc.saveRecipientPreference(PREF);
052 }
053
054 @Test
055 @Override
056 public void testCreate() {
057 RecipientPreference p2 = new RecipientPreference();
058 p2.setRecipientId("user1");
059 p2.setProperty("property2");
060 p2.setValue("value2");
061
062 prefsvc.saveRecipientPreference(p2);
063 assertNotNull(p2.getId());
064
065 Map<String, String> p = prefsvc.getRecipientPreferences("user1");
066 assertNotNull(p);
067 assertEquals(2, p.size());
068
069 assertTrue(p.containsKey("property1"));
070 assertTrue(p.containsKey("property2"));
071 }
072
073 @Test
074 @Override
075 public void testDelete() {
076 prefsvc.deleteRecipientPreference(PREF);
077
078 assertNull(prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty()));
079 assertEquals(0, prefsvc.getRecipientPreferences(PREF.getRecipientId()).size());
080 }
081
082 @Test(expected = DataIntegrityViolationException.class)
083 @Override
084 public void testDuplicateCreate() {
085 final RecipientPreference p = new RecipientPreference();
086 p.setId(KCBTestData.FAKE_ID);
087 p.setRecipientId(PREF.getRecipientId());
088 p.setProperty(PREF.getProperty());
089 p.setValue(PREF.getValue());
090
091 prefsvc.saveRecipientPreference(p);
092 }
093
094 @Test(expected = DataIntegrityViolationException.class)
095 @Override
096 public void testInvalidCreate() {
097 final RecipientPreference p = new RecipientPreference();
098 prefsvc.saveRecipientPreference(p);
099 }
100
101 @Test(expected = DataAccessException.class)
102 @Override
103 public void testInvalidDelete() {
104 final RecipientPreference p = new RecipientPreference();
105 p.setId(KCBTestData.INVALID_ID);
106 // OJB yields an org.springmodules.orm.ojb.OjbOperationException/OptimisticLockException and claims the object
107 // may have been deleted by somebody else
108 prefsvc.deleteRecipientPreference(p);
109 }
110
111 @Test
112 @Override
113 public void testInvalidRead() {
114 RecipientPreference p = prefsvc.getRecipientPreference("nobody", "nuthin'");
115 assertNull(p);
116 }
117
118 @Test(expected = DataAccessException.class)
119 @Override
120 public void testInvalidUpdate() {
121 RecipientPreference sample = new RecipientPreference();
122 sample.setRecipientId("user1");
123 sample.setProperty("uniqueproperty");
124 sample.setValue("value1");
125 prefsvc.saveRecipientPreference(sample);
126
127 // violates not null property constraint
128 final RecipientPreference p1 = prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty());
129 p1.setProperty(null);
130 prefsvc.saveRecipientPreference(p1);
131 }
132
133 @Test(expected = DataAccessException.class)
134 public void testInvalidUpdateUniqueConstraint() {
135 RecipientPreference sample = new RecipientPreference();
136 sample.setRecipientId("user1");
137 sample.setProperty("uniqueproperty");
138 sample.setValue("value1");
139 prefsvc.saveRecipientPreference(sample);
140
141 final RecipientPreference p2 = prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty());
142 p2.setProperty("uniqueproperty");
143 prefsvc.saveRecipientPreference(p2);
144 }
145
146
147 @Test
148 @Override
149 public void testReadByQuery() {
150 RecipientPreference p = prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty());
151 assertNotNull(p);
152 assertEquals(PREF, p);
153 }
154
155 @Test
156 @Override
157 public void testUpdate() {
158 RecipientPreference p = prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty());
159 p.setValue("different value");
160
161 prefsvc.saveRecipientPreference(p);
162
163 RecipientPreference p2 = prefsvc.getRecipientPreference(PREF.getRecipientId(), PREF.getProperty());
164 assertEquals(p, p2);
165 }
166 }