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.ksb.messaging;
017
018 import static org.junit.Assert.assertFalse;
019 import static org.junit.Assert.assertNotNull;
020 import static org.junit.Assert.assertTrue;
021 import static org.junit.Assert.fail;
022
023 import java.util.List;
024
025 import javax.xml.namespace.QName;
026
027 import org.junit.Test;
028 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
029 import org.kuali.rice.ksb.api.messaging.ResourceFacade;
030 import org.kuali.rice.ksb.messaging.remotedservices.BaseballCard;
031 import org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService;
032 import org.kuali.rice.ksb.messaging.remotedservices.Inbox;
033 import org.kuali.rice.ksb.messaging.remotedservices.InboxResource;
034 import org.kuali.rice.ksb.messaging.remotedservices.Message;
035 import org.kuali.rice.ksb.messaging.remotedservices.MessageResource;
036 import org.kuali.rice.ksb.test.KSBTestCase;
037
038
039 /**
040 * Test that RESTful services work over the KSB
041 *
042 * @author Kuali Rice Team (rice.collab@kuali.org)
043 */
044 public class RESTServiceTest extends KSBTestCase {
045
046 private static final String BBCARD_SERVICE = "baseballCardCollectionService";
047 private static final String KMS_SERVICE = "kms";
048 private static final String NAMESPACE = "test";
049
050
051 public boolean startClient1() {
052 return true;
053 }
054
055 @Test
056 public void testMessagingService() throws Exception {
057 ResourceFacade kmsService =
058 (ResourceFacade) GlobalResourceLoader.getService(
059 new QName(NAMESPACE, KMS_SERVICE));
060
061 // Get service by resource name
062 InboxResource inboxResource = kmsService.getResource("inbox");
063 // kmsService.getRe...
064 // Get service by resource class
065 MessageResource messageResource = kmsService.getResource(MessageResource.class);
066
067 exerciseMessagingService(inboxResource, messageResource);
068 }
069
070 /**
071 * This method ...
072 *
073 * @param inboxResource
074 * @param messageResource
075 */
076 private void exerciseMessagingService(InboxResource inboxResource,
077 MessageResource messageResource) {
078 Inbox inbox = new Inbox();
079 inbox.setOwner("Joe Q. Tester");
080
081 inbox = inboxResource.createInbox(inbox);
082
083 Message message = new Message();
084 message.setRecipient("Joe Q. Tester");
085 message.setSubject("Hello new world!");
086 message.setText("This is a test message.");
087
088 Message createdMessage = messageResource.createMessage(message);
089
090 List<String> messages = inbox.getMessages();
091 messages.add(createdMessage.getId());
092
093 inboxResource.updateInbox(inbox);
094
095 inbox = inboxResource.retrieveInbox(inbox.getId());
096
097 List<String> updatedMessages = inbox.getMessages();
098
099 String updatedMessageId = updatedMessages.get(0);
100
101 Message retrievedMessage = messageResource.retrieve(updatedMessageId);
102
103 assertTrue(retrievedMessage.getSubject().equals("Hello new world!"));
104 }
105
106 /**
107 * Exercise our RESTful {@link BaseballCardCollectionService} over the KSB
108 */
109 @Test
110 public void testBaseballCardCollectionService() {
111 BaseballCard cardA = new BaseballCard("Mickey Mantle", "Topps", 1952);
112 BaseballCard cardB = new BaseballCard("Ted Williams", "Bowman", 1954);
113 BaseballCard cardC = new BaseballCard("Willie Mays", "Bowman", 1951);
114 BaseballCard cardD = new BaseballCard("Willie Mays Hayes", "Bogus", 1989);
115
116 BaseballCardCollectionService service =
117 (BaseballCardCollectionService) GlobalResourceLoader.getService(
118 new QName(NAMESPACE, BBCARD_SERVICE)
119 );
120
121 // test @POST
122 service.add(cardA);
123 service.add(cardB);
124 Integer willieMaysId = service.add(cardC);
125
126 // test @GET
127 List<BaseballCard> allCards = service.getAll();
128 assertNotNull(allCards);
129 assertTrue(allCards.size() == 3);
130 assertTrue(allCards.contains(cardA));
131 assertTrue(allCards.contains(cardB));
132 assertTrue(allCards.contains(cardC));
133
134 // test @PUT
135 service.update(willieMaysId, cardD); // replace Willie Mays w/ Willie Mays Hayes
136 allCards = service.getAll();
137 assertNotNull(allCards);
138 assertTrue(allCards.size() == 3);
139 assertFalse(allCards.contains(cardC)); // this one was replaced
140 assertTrue(allCards.contains(cardD)); // this was the replacement
141
142 // test @DELETE
143 service.delete(willieMaysId); // delete Willie
144 allCards = service.getAll();
145 assertNotNull(allCards);
146 assertTrue(allCards.size() == 2);
147 assertFalse(allCards.contains(cardD)); // should be gone
148
149 // test that adding a card already in the collection in fact adds to the collection.
150 service.add(cardA);
151 service.add(cardA);
152 service.add(cardA);
153 allCards = service.getAll();
154 assertTrue(allCards.size() == 5);
155
156 try {
157 service.unannotatedMethod();
158 fail("Magic? You can't remotely invoke a method that doesn't have JAX-RS annotations in the resource class!");
159 } catch (Exception e) {
160 // I expect this to throw an exception
161 e.printStackTrace();
162 }
163 }
164
165
166 /**
167 * By defualt, CXF has a special Service List page that you can see by
168 * appending /services to a RESTful service URL. We've purposefully disabled it,
169 * so let's verify that it isn't there.
170 *
171 * @throws Exception
172 */
173 /* @Test
174 public void testCXFServiceListIsDisabled() throws Exception {
175 // if CXF's service list is enabled, this URL will return the service list
176 URL url = new URL(getEndpointUrl()+"/services");
177
178 try {
179 InputStream contentStream = (InputStream)url.getContent();
180 fail("the service list shouldn't be available!");
181 } catch (IOException e) {
182 // this is what should happen
183 }
184 }*/
185
186 }