]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
9fac408be3f95e77c4e04f8fdb742d7e6a37acf1
[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("list-item[" + i + "] firstName=" + pli.getFirstName());
66             verbose("list-item[" + i + "] lastName=" + pli.getLastName());
67             verbose("list-item[" + i + "] uri=" + pli.getUri());
68             i++;
69         }
70     }
71
72     @Test
73     public void getNonExistingPerson() {
74         ClientResponse<Person> res = personClient.getPerson(999L);
75
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);
87         }
88     }
89
90     @Test
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);
102         }
103     }
104
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");
114         return person;
115     }
116
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]);
123     }
124
125     private void verbose(String msg) {
126         System.out.println("PersonServiceTest : " + msg);
127     }
128
129     private void verbose(String msg, Object o, Class clazz) {
130         try {
131             verbose(msg);
132             JAXBContext jc = JAXBContext.newInstance(clazz);
133             Marshaller m = jc.createMarshaller();
134             m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
135                     Boolean.TRUE);
136             m.marshal(o, System.out);
137         //m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out);
138         } catch (Exception e) {
139             e.printStackTrace();
140         }
141     }
142
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());
147         }
148     }
149 }