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.services.impl;
017
018 import org.apache.commons.io.IOUtils;
019 import org.junit.Test;
020 import org.kuali.rice.core.api.util.xml.XmlException;
021 import org.kuali.rice.ken.bo.Notification;
022 import org.kuali.rice.ken.bo.NotificationRecipient;
023 import org.kuali.rice.ken.bo.NotificationResponse;
024 import org.kuali.rice.ken.bo.NotificationSender;
025 import org.kuali.rice.ken.service.NotificationMessageContentService;
026 import org.kuali.rice.ken.test.KENTestCase;
027 import org.kuali.rice.ken.test.TestConstants;
028 import org.kuali.rice.ken.util.NotificationConstants;
029 import org.kuali.rice.test.BaselineTestCase.BaselineMode;
030 import org.kuali.rice.test.BaselineTestCase.Mode;
031
032 import java.io.InputStream;
033 import java.sql.Timestamp;
034 import java.util.List;
035
036 import static org.junit.Assert.*;
037
038 /**
039 * Tests NotificationMessageContentService
040 * @author Kuali Rice Team (rice.collab@kuali.org)
041 */
042 @BaselineMode(Mode.ROLLBACK_CLEAR_DB)
043 public class NotificationMessageContentServiceImplTest extends KENTestCase {
044 private static final String SAMPLE_EVENT_MESSAGE = "sample_message_event_type.xml";
045 private static final String SAMPLE_SIMPLE_MESSAGE = "sample_message_simple_type.xml";
046 private static final String SAMPLE_MALFORMED_EVENT_MESSAGE = "sample_malformed_message_event_type.xml";
047 private static final String SAMPLE_MALFORMED_SIMPLE_MESSAGE = "sample_malformed_message_simple_type.xml";
048 private static final String SAMPLE_BADNAMESPACE_EVENT_MESSAGE = "badnamespace_message_event_type.xml";
049 private static final String SAMPLE_CHANNEL = TestConstants.VALID_CHANNEL_ONE;
050 private static final String VALID_CHANNEL = TestConstants.VALID_CHANNEL_TWO;
051 private static final String VALID_TYPE = NotificationConstants.DELIVERY_TYPES.FYI;
052 private static final String VALID_CONTENT = "<content xmlns=\"ns:notification/ContentTypeSimple\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
053 " xsi:schemaLocation=\"ns:notification/ContentTypeSimple resource:notification/ContentTypeSimple\">\n" +
054 " <message>Holiday-Ho-Out Starts Next Week - 11/20/2006!</message>\n" +
055 "</content>";
056
057 private static final String sampleEdlFile = "NotificationDocumentContent.xml";
058
059 public NotificationMessageContentServiceImplTest() {
060 //setDefaultRollback(false);
061 }
062
063 private void testParseNotificationRequestMessage(String samplePath) throws Exception {
064 NotificationMessageContentService impl = services.getNotificationMessageContentService();
065 InputStream is = this.getClass().getResourceAsStream(samplePath);
066 System.out.println(is);
067 Notification notification = impl.parseNotificationRequestMessage(is);
068 assertEquals(SAMPLE_CHANNEL, notification.getChannel().getName());
069 System.out.println(notification.getSenders());
070 System.out.println("notification id: " + notification.getId());
071 List<NotificationSender> sl = notification.getSenders();
072 assertTrue(sl.size() > 0);
073 for (NotificationSender s :sl) {
074 assertNotNull(s);
075 assertNotNull(s.getSenderName());
076 }
077 List<NotificationRecipient> rl = notification.getRecipients();
078 assertTrue(rl.size() > 0);
079 for (NotificationRecipient r : rl) {
080 assertNotNull(r);
081 assertNotNull(r.getRecipientId());
082 }
083 //fail("Not yet implemented");
084
085 notification.setCreationDateTime(new Timestamp(System.currentTimeMillis()));
086 services.getGenericDao().save(notification);
087 //setComplete();
088 }
089
090 @Test
091 public void testParseEventNotificationRequestMessage() throws Exception {
092 testParseNotificationRequestMessage(SAMPLE_EVENT_MESSAGE);
093 }
094
095 @Test
096 public void testParseSimpleNotificationRequestMessage() throws Exception {
097 testParseNotificationRequestMessage(SAMPLE_SIMPLE_MESSAGE);
098 }
099 @Test
100 public void testParseMalformedEventNotificationRequestMessage() throws Exception {
101 try {
102 testParseNotificationRequestMessage(SAMPLE_MALFORMED_EVENT_MESSAGE);
103 fail("malformed event message passed validation");
104 } catch (XmlException ixe) {
105 // expected
106 return;
107 }
108 }
109 @Test
110 public void testParseBadNamespaceEventNotificationRequestMessage() throws Exception {
111 try {
112 testParseNotificationRequestMessage(SAMPLE_BADNAMESPACE_EVENT_MESSAGE);
113 fail("malformed event message passed validation");
114 } catch (XmlException ixe) {
115 // expected
116 return;
117 }
118 }
119 @Test
120 public void testParseMalformedSimpleNotificationRequestMessage() throws Exception {
121 try {
122 testParseNotificationRequestMessage(SAMPLE_MALFORMED_SIMPLE_MESSAGE);
123 fail("malformed simple message passed validation");
124 } catch (XmlException ixe) {
125 // expected
126 }
127 }
128
129 @Test
130 public void testGenerateNotificationResponseMessage() throws Exception {
131 NotificationResponse response = new NotificationResponse();
132 response.setStatus("PASS");
133 response.setMessage("Here is your response");
134 NotificationMessageContentService impl = services.getNotificationMessageContentService();
135 String xml = impl.generateNotificationResponseMessage(response);
136 assertTrue(xml.length() == 89);
137 }
138
139 @Test
140 public void testGenerateNotificationMessage() throws Exception {
141 NotificationMessageContentService impl = services.getNotificationMessageContentService();
142 InputStream is = this.getClass().getResourceAsStream(SAMPLE_SIMPLE_MESSAGE);
143 System.out.println(is);
144 Notification notification = impl.parseNotificationRequestMessage(is);
145 String XML = impl.generateNotificationMessage(notification);
146 assertTrue(XML.length()>0);
147 }
148
149 @Test
150 public void testParseSerializedNotificationXml() throws Exception {
151 InputStream is = this.getClass().getResourceAsStream(sampleEdlFile);
152
153 byte[] bytes = IOUtils.toByteArray(is);
154
155 NotificationMessageContentService impl = services.getNotificationMessageContentService();
156
157 Notification notification = impl.parseSerializedNotificationXml(bytes);
158
159 assertNotNull(notification);
160 assertEquals(VALID_CHANNEL, notification.getChannel().getName());
161
162 assertEquals(VALID_TYPE, notification.getDeliveryType());
163
164 assertEquals(VALID_CONTENT.replaceAll("\\s+", " "), notification.getContent().replaceAll("\\s+", " "));
165 }
166 }