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 */
016package org.kuali.rice.kcb.service.impl;
017
018import org.junit.Test;
019import org.kuali.rice.kcb.bo.Message;
020import org.kuali.rice.kcb.bo.MessageDelivery;
021import org.kuali.rice.kcb.bo.MessageDeliveryStatus;
022import org.kuali.rice.kcb.service.GlobalKCBServiceLocator;
023import org.kuali.rice.kcb.service.MessageDeliveryService;
024import org.kuali.rice.kcb.service.MessageService;
025import org.kuali.rice.kcb.test.KCBTestCase;
026import org.kuali.rice.kcb.test.KCBTestData;
027import org.kuali.rice.krad.data.PersistenceOption;
028import org.kuali.rice.krad.service.KRADServiceLocator;
029import org.springframework.dao.DataAccessException;
030
031import java.util.Collection;
032
033import static org.junit.Assert.*;
034
035
036/**
037 * Tests MessageDeliveryService
038 * 
039 * @author Kuali Rice Team (rice.collab@kuali.org)
040 *
041 */
042public class MessageDeliveryServiceTest extends KCBTestCase {
043    private MessageService messageService;
044    private MessageDeliveryService messageDeliveryService;
045    private Message MESSAGE;
046    private MessageDelivery MESSAGE_DELIV;
047
048    @Override
049    public void setUp() throws Exception {
050        super.setUp();
051
052        messageService = GlobalKCBServiceLocator.getInstance().getMessageService();
053        messageDeliveryService = GlobalKCBServiceLocator.getInstance().getMessageDeliveryService();
054
055        MESSAGE = KCBTestData.getMessage1();
056        MESSAGE = messageService.saveMessage(MESSAGE);
057        
058        MESSAGE_DELIV = KCBTestData.getMessageDelivery1();
059        MESSAGE_DELIV.setMessage(MESSAGE);
060        
061        MESSAGE_DELIV = messageDeliveryService.saveMessageDelivery(MESSAGE_DELIV);
062    }
063
064    @Test
065    public void testCreate() {
066        MessageDelivery md = new MessageDelivery();
067        md.setDelivererTypeName("pigeon");
068        md.setMessage(MESSAGE);
069        
070        md = messageDeliveryService.saveMessageDelivery(md);
071
072        assertNotNull(md.getId());
073        Collection<MessageDelivery> ms = messageDeliveryService.getAllMessageDeliveries();
074        assertNotNull(ms);
075        assertEquals(2, ms.size());
076        
077        MessageDelivery md2 = messageDeliveryService.getMessageDelivery(md.getId());
078        assertNotNull(md2);
079        
080        assertEqualsMD(md, md2);
081    }
082
083    @Test
084    public void testDelete() {
085        messageDeliveryService.deleteMessageDelivery(MESSAGE_DELIV);
086
087        Collection<MessageDelivery> ms = messageDeliveryService.getAllMessageDeliveries();
088        assertNotNull(ms);
089        assertEquals(0, ms.size());
090        
091        assertNull(messageDeliveryService.getMessageDelivery(MESSAGE_DELIV.getId()));
092    }
093
094    @Test(expected = DataAccessException.class)
095    public void testDuplicateCreate() {
096        // violates messageid-deliverer constraint
097        final MessageDelivery md = new MessageDelivery();
098        md.setId(KCBTestData.FAKE_ID);
099        md.setDelivererSystemId(MESSAGE_DELIV.getDelivererSystemId());
100        md.setDelivererTypeName(MESSAGE_DELIV.getDelivererTypeName());
101        md.setDeliveryStatus(MESSAGE_DELIV.getDeliveryStatus());
102        md.setLockVerNbr(MESSAGE_DELIV.getLockVerNbr());
103        md.setMessage(MESSAGE);
104        KRADServiceLocator.getDataObjectService().save(md, PersistenceOption.FLUSH);
105    }
106
107    @Test(expected = DataAccessException.class)
108    public void testInvalidCreate() {
109        final MessageDelivery m = new MessageDelivery();
110        messageDeliveryService.saveMessageDelivery(m);
111        KRADServiceLocator.getDataObjectService().save(m, PersistenceOption.FLUSH);
112    }
113
114    @Test
115    public void testInvalidRead() {
116        MessageDelivery m = messageDeliveryService.getMessageDelivery(Long.valueOf(-1));
117        assertNull(m);
118    }
119
120
121    @Test(expected = DataAccessException.class)
122    public void testInvalidUpdate() {
123        final MessageDelivery m = messageDeliveryService.getMessageDelivery(MESSAGE_DELIV.getId());
124        m.setDelivererTypeName(null);
125        m.setDelivererSystemId(null);
126        KRADServiceLocator.getDataObjectService().save(m, PersistenceOption.FLUSH);
127    }
128
129    @Test
130    public void testReadById() {
131        MessageDelivery m = messageDeliveryService.getMessageDelivery(MESSAGE_DELIV.getId());
132
133        assertEqualsMD(MESSAGE_DELIV, m);
134    }
135
136    @Test
137    public void testUpdate() {
138        MessageDelivery m = messageDeliveryService.getMessageDelivery(MESSAGE_DELIV.getId());
139        m.setDelivererTypeName("eagle");
140        m.setDeliveryStatus(MessageDeliveryStatus.UNDELIVERED);
141        m.setDelivererSystemId("1234");
142        messageDeliveryService.saveMessageDelivery(m);
143        
144        MessageDelivery m2 = messageDeliveryService.getMessageDelivery(m.getId());
145        assertNotNull(m2);
146        
147        assertEqualsMD(m, m2);
148    }
149    
150    private void assertEqualsMD(MessageDelivery expected, MessageDelivery actual) {
151        assertEquals(expected.getId(), actual.getId());
152        assertEquals(expected.getDelivererSystemId(), actual.getDelivererSystemId());
153        assertEquals(expected.getDelivererTypeName(), actual.getDelivererTypeName());
154        assertEquals(expected.getDeliveryStatus(), actual.getDeliveryStatus());
155        assertEquals(expected.getMessage().getId(), actual.getMessage().getId());
156    }
157}