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.Person;
10 import org.collectionspace.hello.Persons;
11 import org.collectionspace.hello.client.PersonClient;
12 import org.jboss.resteasy.client.ClientResponse;
13 import org.testng.Assert;
14 import org.testng.annotations.Test;
17 * A PersonServiceTest.
19 * @version $Revision:$
21 public class PersonServiceTest {
23 private PersonClient personClient = PersonClient.getInstance();
24 private Long updateId = 0L;
27 public void createPerson() {
28 Person person = createPerson("Chris", "Hoffman");
29 ClientResponse<Response> res = personClient.createPerson(person);
30 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
31 //store updateId locally
32 updateId = extractId(res);
36 public void createPersons() {
37 Person person = createPerson("Aron", "Roberts");
38 ClientResponse<Response> res = personClient.createPerson(person);
39 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
40 person = createPerson("Dan", "Sheppard");
41 res = personClient.createPerson(person);
42 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
45 @Test(dependsOnMethods = {"createPerson"})
46 public void updatePerson() {
47 Person touPerson = personClient.getPerson(updateId).getEntity();
48 verbose("got person to update", touPerson, Person.class);
49 touPerson.setFirstName("Richard");
50 touPerson.setLastName("Millet");
51 int initialVersion = touPerson.getVersion();
52 Person uPerson = personClient.updatePerson(updateId, touPerson).getEntity();
53 verbose("updated person", uPerson, Person.class);
54 Assert.assertNotSame(uPerson.getVersion(), initialVersion);
55 Assert.assertEquals(uPerson.getFirstName(), "Richard");
58 @Test(dependsOnMethods = {"createPerson"})
59 public void getPersons() {
60 //the resource method is expected to return at least an empty list
61 Persons persons = personClient.getPersons().getEntity();
62 List<Persons.PersonListItem> list = persons.getPersonListItem();
64 for (Persons.PersonListItem pli : list) {
65 verbose("list-item[" + i + "] firstName=" + pli.getFirstName());
66 verbose("list-item[" + i + "] lastName=" + pli.getLastName());
67 verbose("list-item[" + i + "] uri=" + pli.getUri());
73 public void getNonExistingPerson() {
74 ClientResponse<Person> res = personClient.getPerson(999L);
76 Response.Status status = res.getResponseStatus();
77 verbose(this.getClass().getName() + ": " +
78 "getNonExistingPerson: Status: code=" + status.getStatusCode() +
79 " message=" + status.toString());
80 verbose("getNonExistingPerson: Metadata:");
81 verboseMap(res.getMetadata());
82 verbose("getNonExistingPerson: Headers:");
83 verboseMap(res.getHeaders());
84 if (status.equals(Response.Status.NOT_FOUND)) {
85 String msg = res.getEntity(String.class, String.class);
86 verbose("getNonExistingPerson: error message=" + msg);
91 public void updateWrongPerson() {
92 Person touPerson = personClient.getPerson(updateId).getEntity();
93 verbose("updateWrongPerson: got person to update", touPerson, Person.class);
94 touPerson.setFirstName("Richard");
95 touPerson.setLastName("Millet");
96 //use non existing person to update
97 ClientResponse<Person> res = personClient.updatePerson(9999L, touPerson);
98 if (res.getResponseStatus().equals(Response.Status.NOT_FOUND)) {
99 verbose("updateWrongPerson: Status=" + res.getResponseStatus().toString());
100 String msg = res.getEntity(String.class, String.class);
101 verbose("updateWrongPerson: application error message=" + msg);
105 private Person createPerson(String firstName, String lastName) {
106 Person person = new Person();
107 person.setFirstName(firstName);
108 person.setLastName(lastName);
109 person.setStreet("2195 Hearst Ave.");
110 person.setCity("Berkeley");
111 person.setState("CA");
112 person.setZip("94704");
113 person.setCountry("US");
117 private Long extractId(ClientResponse<Response> res) {
118 MultivaluedMap mvm = res.getMetadata();
119 String uri = (String) ((ArrayList) mvm.get("Location")).get(0);
120 String[] segments = uri.split("/");
121 verbose("id=" + segments[segments.length - 1]);
122 return Long.valueOf(segments[segments.length - 1]);
125 private void verbose(String msg) {
126 System.out.println("PersonServiceTest : " + msg);
129 private void verbose(String msg, Object o, Class clazz) {
132 JAXBContext jc = JAXBContext.newInstance(clazz);
133 Marshaller m = jc.createMarshaller();
134 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
136 m.marshal(o, System.out);
137 //m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out);
138 } catch (Exception e) {
143 private void verboseMap(MultivaluedMap map) {
144 for (Object entry : map.entrySet()) {
145 MultivaluedMap.Entry mentry = (MultivaluedMap.Entry) entry;
146 verbose(" name=" + mentry.getKey() + " value=" + mentry.getValue());