1 package org.collectionspace.hello.client.test;
3 import java.util.ArrayList;
5 import javax.ws.rs.core.MultivaluedMap;
6 import javax.ws.rs.core.Response;
7 import javax.xml.bind.JAXBContext;
8 import javax.xml.bind.Marshaller;
9 import org.collectionspace.hello.CollectionObject;
10 import org.collectionspace.hello.CollectionObjectList;
11 import org.collectionspace.hello.client.CollectionObjectClient;
12 import org.jboss.resteasy.client.ClientResponse;
13 import org.testng.Assert;
14 import org.testng.annotations.Test;
17 * A CollectionObjectTest.
19 * @version $Revision:$
21 public class CollectionObjectTest {
23 private CollectionObjectClient client = CollectionObjectClient.getInstance();
24 private String updateId = "1";
28 public void createCollectionObject() {
29 CollectionObject CollectionObject = createCollectionObject("Chris", "Hoffman");
30 ClientResponse<Response> res = CollectionObjectClient.createCollectionObject(CollectionObject);
31 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
32 //store updateId locally
33 updateId = extractId(res);
37 public void createCollectionObjectList() {
38 CollectionObject CollectionObject = createCollectionObject("Aron", "Roberts");
39 ClientResponse<Response> res = CollectionObjectClient.createCollectionObject(CollectionObject);
40 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
41 CollectionObject = createCollectionObject("Dan", "Sheppard");
42 res = CollectionObjectClient.createCollectionObject(CollectionObject);
43 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
46 @Test(dependsOnMethods = {"createCollectionObject"})
47 public void updateCollectionObject() {
48 CollectionObject touCollectionObject = CollectionObjectClient.getCollectionObject(updateId).getEntity();
49 verbose("got CollectionObject to update", touCollectionObject, CollectionObject.class);
50 touCollectionObject.setFirstName("Richard");
51 touCollectionObject.setLastName("Millet");
52 int initialVersion = touCollectionObject.getVersion();
53 CollectionObject uCollectionObject = CollectionObjectClient.updateCollectionObject(updateId, touCollectionObject).getEntity();
54 verbose("updated CollectionObject", uCollectionObject, CollectionObject.class);
55 Assert.assertNotSame(uCollectionObject.getVersion(), initialVersion);
56 Assert.assertEquals(uCollectionObject.getFirstName(), "Richard");
59 @Test(dependsOnMethods = {"createCollectionObject"})
60 public void getCollectionObjectList() {
61 //the resource method is expected to return at least an empty list
62 CollectionObjectList CollectionObjectList = CollectionObjectClient.getCollectionObjectList().getEntity();
63 List<CollectionObjectList.CollectionObjectListItem> list = CollectionObjectList.getCollectionObjectListItem();
65 for (CollectionObjectList.CollectionObjectListItem pli : list) {
66 verbose("getCollectionObjectList: list-item[" + i + "] firstName=" + pli.getFirstName());
67 verbose("getCollectionObjectList: list-item[" + i + "] lastName=" + pli.getLastName());
68 verbose("getCollectionObjectList: list-item[" + i + "] uri=" + pli.getUri());
75 public void getNonExistingCollectionObject() {
76 ClientResponse<CollectionObject> res = client.getCollectionObject("foo");
78 Response.Status status = res.getResponseStatus();
79 verbose(this.getClass().getName() + ": " +
80 "getNonExistingCollectionObject: Status: code=" + status.getStatusCode() +
81 " message=" + status.toString());
82 verbose("getNonExistingCollectionObject: Metadata:");
83 verboseMap(res.getMetadata());
84 verbose("getNonExistingCollectionObject: Headers:");
85 verboseMap(res.getHeaders());
86 if (status.equals(Response.Status.NOT_FOUND)) {
87 String msg = res.getEntity(String.class, String.class);
88 verbose("getNonExistingCollectionObject: error message=" + msg);
93 @Test(dependsOnMethods = {"updateCollectionObject"})
94 public void updateWrongCollectionObject() {
95 CollectionObject touCollectionObject = CollectionObjectClient.getCollectionObject(updateId).getEntity();
96 verbose("updateWrongCollectionObject: got CollectionObject to update", touCollectionObject, CollectionObject.class);
97 touCollectionObject.setFirstName("Richard");
98 touCollectionObject.setLastName("Millet");
99 //use non existing CollectionObject to update
100 ClientResponse<CollectionObject> res = CollectionObjectClient.updateCollectionObject(9999L, touCollectionObject);
101 if (res.getResponseStatus().equals(Response.Status.NOT_FOUND)) {
102 verbose("updateWrongCollectionObject: Status=" + res.getResponseStatus().toString());
103 String msg = res.getEntity(String.class, String.class);
104 verbose("updateWrongCollectionObject: application error message=" + msg);
109 @Test(dependsOnMethods = {"updateWrongCollectionObject"})
110 public void deleteCollectionObject() {
111 ClientResponse<Response> res = CollectionObjectClient.deleteCollectionObject(updateId);
112 verbose("deleteCollectionObject: id=" + updateId);
113 verbose("deleteCollectionObject: status = " + res.getStatus());
114 Assert.assertEquals(res.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
117 private CollectionObject createCollectionObject(String firstName, String lastName) {
118 CollectionObject CollectionObject = new CollectionObject();
119 CollectionObject.setFirstName(firstName);
120 CollectionObject.setLastName(lastName);
121 CollectionObject.setStreet("2195 Hearst Ave.");
122 CollectionObject.setCity("Berkeley");
123 CollectionObject.setState("CA");
124 CollectionObject.setZip("94704");
125 CollectionObject.setCountry("US");
126 return CollectionObject;
129 private Long extractId(ClientResponse<Response> res) {
130 MultivaluedMap mvm = res.getMetadata();
131 String uri = (String) ((ArrayList) mvm.get("Location")).get(0);
132 String[] segments = uri.split("/");
133 verbose("id=" + segments[segments.length - 1]);
134 return Long.valueOf(segments[segments.length - 1]);
139 private void verbose(String msg) {
140 System.out.println("CollectionObjectListerviceTest : " + msg);
143 private void verbose(String msg, Object o, Class clazz) {
146 JAXBContext jc = JAXBContext.newInstance(clazz);
147 Marshaller m = jc.createMarshaller();
148 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
150 m.marshal(o, System.out);
151 //m.marshal(new JAXBElement(new QName("uri", "local"), CollectionObject.class, p), System.out);
152 } catch (Exception e) {
157 private void verboseMap(MultivaluedMap map) {
158 for (Object entry : map.entrySet()) {
159 MultivaluedMap.Entry mentry = (MultivaluedMap.Entry) entry;
160 verbose(" name=" + mentry.getKey() + " value=" + mentry.getValue());