]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
cf60e22bfa9159e09facd6cbff8c1101bc5e0492
[tmp/jakarta-migration.git] /
1 package org.collectionspace.hello.client.test;
2
3 import java.util.ArrayList;
4 import java.util.List;
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;
15
16 /**
17  * A PersonServiceTest.
18  * 
19  * @version $Revision:$
20  */
21 public class PersonServiceTest {
22
23     private PersonClient personClient = PersonClient.getInstance();
24     private Long updateId = 0L;
25
26     @Test
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);
33     }
34
35     @Test
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());
43     }
44
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");
56     }
57
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();
63         int i = 0;
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());
68             i++;
69         }
70     }
71
72
73     @Test
74     public void getNonExistingPerson() {
75         ClientResponse<Person> res = personClient.getPerson(999L);
76
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);
88         }
89     }
90
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);
103         }
104     }
105
106
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());
113     }
114     
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");
124         return person;
125     }
126
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]);
133     }
134
135     private void verbose(String msg) {
136         System.out.println("PersonServiceTest : " + msg);
137     }
138
139     private void verbose(String msg, Object o, Class clazz) {
140         try {
141             verbose(msg);
142             JAXBContext jc = JAXBContext.newInstance(clazz);
143             Marshaller m = jc.createMarshaller();
144             m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
145                     Boolean.TRUE);
146             m.marshal(o, System.out);
147         //m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out);
148         } catch (Exception e) {
149             e.printStackTrace();
150         }
151     }
152
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());
157         }
158     }
159 }