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