1 package org.collectionspace.hello.client.test;
3 import java.util.ArrayList;
4 import javax.ws.rs.core.MediaType;
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.PersonNuxeo;
10 import org.collectionspace.hello.client.MultipartClient;
11 import org.collectionspace.world.DublincoreNuxeo;
12 import org.jboss.resteasy.client.ClientResponse;
13 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
14 import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput;
15 import org.testng.Assert;
16 import org.testng.annotations.Test;
21 * @version $Revision:$
23 public class MultipartServiceTest {
25 private MultipartClient multipartClient = MultipartClient.getInstance();
26 private String updateId = "";
27 private String deleteId = "";
30 public void createPerson() {
31 MultipartFormDataOutput multipartPerson = createPerson("Mr.", "Chris", "Hoffman");
32 ClientResponse<Response> res = multipartClient.createPerson(multipartPerson);
33 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
34 //store updateId locally
35 updateId = extractId(res);
39 public void createTeam() {
40 MultipartFormDataOutput multipartPerson = createPerson("Mr.", "Sanjay", "Dalal");
41 ClientResponse<Response> res = multipartClient.createPerson(multipartPerson);
42 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
43 deleteId = extractId(res);
45 multipartPerson = createPerson("Mr.", "Aron", "Roberts");
46 res = multipartClient.createPerson(multipartPerson);
47 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
49 multipartPerson = createPerson("Mr.", "Richard", "Millet");
50 res = multipartClient.createPerson(multipartPerson);
51 Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
54 @Test(dependsOnMethods = {"createPerson"})
55 public void updatePerson() throws Exception {
56 MultipartFormDataInput mdip = multipartClient.getPerson(updateId).getEntity();
57 PersonNuxeo touPerson = mdip.getFormDataPart("hello", PersonNuxeo.class, null);
58 touPerson.setId(updateId);
59 verbose("got person to update", touPerson, PersonNuxeo.class);
60 touPerson.setFirstName("Patrick");
61 touPerson.setLastName("Schmitz");
62 PersonNuxeo uPerson = multipartClient.updatePerson(updateId, touPerson).getEntity();
63 verbose("updated person", uPerson, PersonNuxeo.class);
64 //Assert.assertNotSame(uPerson.getVersion(), initialVersion);
65 Assert.assertEquals(uPerson.getFirstName(), "Patrick");
68 @Test(dependsOnMethods = {"createTeam"})
69 public void deletePerson() {
70 ClientResponse<Response> res = multipartClient.deletePerson(deleteId);
71 verbose("deletePerson: id=" + deleteId);
72 verbose("deletePerson: status = " + res.getStatus());
73 Assert.assertEquals(res.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
76 private MultipartFormDataOutput createPerson(String title, String firstName, String lastName) {
77 PersonNuxeo person = new PersonNuxeo();
79 person.setFirstName(firstName);
80 person.setLastName(lastName);
81 person.setStreet("2195 Hearst Ave.");
82 person.setCity("Berkeley");
83 person.setState("CA");
84 person.setZip("94704");
85 person.setCountry("US");
86 person.setVersion("1.0");
88 DublincoreNuxeo dublin = new DublincoreNuxeo();
89 dublin.setTitle(title);
90 MultipartFormDataOutput multipartPerson = new MultipartFormDataOutput();
91 multipartPerson.addFormData("hello", person, MediaType.APPLICATION_XML_TYPE);
92 multipartPerson.addFormData("dublincore", dublin, MediaType.APPLICATION_XML_TYPE);
93 return multipartPerson;
96 private String extractId(ClientResponse<Response> res) {
97 MultivaluedMap mvm = res.getMetadata();
98 String uri = (String) ((ArrayList) mvm.get("Location")).get(0);
99 String[] segments = uri.split("/");
100 String id = segments[segments.length - 1];
101 verbose("extractId: id=" + id);
105 private void verbose(String msg) {
106 System.out.println("MultipartServiceTest : " + msg);
109 private void verbose(String msg, Object o, Class clazz) {
112 JAXBContext jc = JAXBContext.newInstance(clazz);
113 Marshaller m = jc.createMarshaller();
114 m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
116 m.marshal(o, System.out);
122 private void verboseMap(MultivaluedMap map) {
123 for(Object entry : map.entrySet()){
124 MultivaluedMap.Entry mentry = (MultivaluedMap.Entry) entry;
125 verbose(" name=" + mentry.getKey() + " value=" + mentry.getValue());