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("getPersons: list-item[" + i + "] firstName=" + pli.getFirstName());
66 verbose("getPersons: list-item[" + i + "] lastName=" + pli.getLastName());
67 verbose("getPersons: list-item[" + i + "] uri=" + pli.getUri());
74 public void getNonExistingPerson() {
75 ClientResponse<Person> res = personClient.getPerson(999L);
77 Response.Status status = res.getResponseStatus();
78 verbose(this.getClass().getName() + ": " +
79 "getNonExistingPerson: Status: code=" + status.getStatusCode() +
80 " message=" + status.toString());
81 verbose("getNonExistingPerson: Metadata:");
82 verboseMap(res.getMetadata());
83 verbose("getNonExistingPerson: Headers:");
84 verboseMap(res.getHeaders());
85 if (status.equals(Response.Status.NOT_FOUND)) {
86 String msg = res.getEntity(String.class, String.class);
87 verbose("getNonExistingPerson: error message=" + msg);
91 @Test(dependsOnMethods = {"updatePerson"})
92 public void updateWrongPerson() {
93 Person touPerson = personClient.getPerson(updateId).getEntity();
94 verbose("updateWrongPerson: got person to update", touPerson, Person.class);
95 touPerson.setFirstName("Richard");
96 touPerson.setLastName("Millet");
97 //use non existing person to update
98 ClientResponse<Person> res = personClient.updatePerson(9999L, touPerson);
99 if (res.getResponseStatus().equals(Response.Status.NOT_FOUND)) {
100 verbose("updateWrongPerson: Status=" + res.getResponseStatus().toString());
101 String msg = res.getEntity(String.class, String.class);
102 verbose("updateWrongPerson: application error message=" + msg);
107 @Test(dependsOnMethods = {"updateWrongPerson"})
108 public void deletePerson() {
109 ClientResponse<Response> res = personClient.deletePerson(updateId);
110 verbose("deletePerson: id=" + updateId);
111 verbose("deletePerson: status = " + res.getStatus());
112 Assert.assertEquals(res.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
115 private Person createPerson(String firstName, String lastName) {
116 Person person = new Person();
117 person.setFirstName(firstName);
118 person.setLastName(lastName);
119 person.setStreet("2195 Hearst Ave.");
120 person.setCity("Berkeley");
121 person.setState("CA");
122 person.setZip("94704");
123 person.setCountry("US");
127 private Long extractId(ClientResponse<Response> res) {
128 MultivaluedMap mvm = res.getMetadata();
129 String uri = (String) ((ArrayList) mvm.get("Location")).get(0);
130 String[] segments = uri.split("/");
131 verbose("id=" + segments[segments.length - 1]);
132 return Long.valueOf(segments[segments.length - 1]);
135 private void verbose(String msg) {
136 System.out.println("PersonServiceTest : " + msg);
139 private void verbose(String msg, Object o, Class clazz) {
142 JAXBContext jc = JAXBContext.newInstance(clazz);
143 Marshaller m = jc.createMarshaller();
144 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
146 m.marshal(o, System.out);
147 //m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out);
148 } catch (Exception e) {
153 private void verboseMap(MultivaluedMap map) {
154 for (Object entry : map.entrySet()) {
155 MultivaluedMap.Entry mentry = (MultivaluedMap.Entry) entry;
156 verbose(" name=" + mentry.getKey() + " value=" + mentry.getValue());