package org.collectionspace.hello.client.test;
import java.util.ArrayList;
+import java.util.List;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import org.collectionspace.hello.Person;
+import org.collectionspace.hello.Persons;
import org.collectionspace.hello.client.PersonClient;
import org.jboss.resteasy.client.ClientResponse;
import org.testng.Assert;
public class PersonServiceTest {
private PersonClient personClient = PersonClient.getInstance();
- private Long id = 0L;
+ private Long updateId = 0L;
@Test
public void createPerson() {
- Person person = new Person();
- person.setFirstName("Chris");
- person.setLastName("Hoffman");
- person.setStreet("2195 Hearst Ave.");
- person.setCity("Berkeley");
- person.setState("CA");
- person.setZip("94704");
- person.setCountry("US");
+ Person person = createPerson("Chris", "Hoffman");
ClientResponse<Response> res = personClient.createPerson(person);
Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
- //store id locally
- id = extractId(res);
+ //store updateId locally
+ updateId = extractId(res);
+ }
+
+ @Test
+ public void createPersons() {
+ Person person = createPerson("Aron", "Roberts");
+ ClientResponse<Response> res = personClient.createPerson(person);
+ Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
+ person = createPerson("Dan", "Sheppard");
+ res = personClient.createPerson(person);
+ Assert.assertEquals(res.getStatus(), Response.Status.CREATED.getStatusCode());
}
@Test(dependsOnMethods = {"createPerson"})
public void updatePerson() {
- Person touPerson = personClient.getPerson(id).getEntity();
- verbose("got person to update", touPerson);
+ Person touPerson = personClient.getPerson(updateId).getEntity();
+ verbose("got person to update", touPerson, Person.class);
touPerson.setFirstName("Richard");
touPerson.setLastName("Millet");
int initialVersion = touPerson.getVersion();
- Person uPerson = personClient.updatePerson(id, touPerson).getEntity();
- verbose("updated person", uPerson);
+ Person uPerson = personClient.updatePerson(updateId, touPerson).getEntity();
+ verbose("updated person", uPerson, Person.class);
Assert.assertNotSame(uPerson.getVersion(), initialVersion);
Assert.assertEquals(uPerson.getFirstName(), "Richard");
}
+ @Test(dependsOnMethods = {"createPerson"})
+ public void getPersons() {
+ //the resource method is expected to return at least an empty list
+ Persons persons = personClient.getPersons().getEntity();
+ List<Persons.PersonListItem> list = persons.getPersonListItem();
+ int i = 0;
+ for (Persons.PersonListItem pli : list) {
+ verbose("list-item[" + i + "] firstName=" + pli.getFirstName());
+ verbose("list-item[" + i + "] lastName=" + pli.getLastName());
+ verbose("list-item[" + i + "] uri=" + pli.getUri());
+ i++;
+ }
+ }
+
@Test
public void getNonExistingPerson() {
ClientResponse<Person> res = personClient.getPerson(999L);
}
}
-
@Test
public void updateWrongPerson() {
- Person touPerson = personClient.getPerson(id).getEntity();
- verbose("updateWrongPerson: got person to update", touPerson);
+ Person touPerson = personClient.getPerson(updateId).getEntity();
+ verbose("updateWrongPerson: got person to update", touPerson, Person.class);
touPerson.setFirstName("Richard");
touPerson.setLastName("Millet");
//use non existing person to update
}
}
+ private Person createPerson(String firstName, String lastName) {
+ Person person = new Person();
+ person.setFirstName(firstName);
+ person.setLastName(lastName);
+ person.setStreet("2195 Hearst Ave.");
+ person.setCity("Berkeley");
+ person.setState("CA");
+ person.setZip("94704");
+ person.setCountry("US");
+ return person;
+ }
+
private Long extractId(ClientResponse<Response> res) {
MultivaluedMap mvm = res.getMetadata();
String uri = (String) ((ArrayList) mvm.get("Location")).get(0);
System.out.println("PersonServiceTest : " + msg);
}
- private void verbose(String msg, Person p) {
+ private void verbose(String msg, Object o, Class clazz) {
try {
verbose(msg);
- JAXBContext jc = JAXBContext.newInstance(Person.class);
+ JAXBContext jc = JAXBContext.newInstance(clazz);
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
- m.marshal(p, System.out);
+ m.marshal(o, System.out);
//m.marshal(new JAXBElement(new QName("uri", "local"), Person.class, p), System.out);
} catch (Exception e) {
e.printStackTrace();
package org.collectionspace.hello.services;
+import java.net.URI;
+import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicLong;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import org.collectionspace.hello.Person;
+import org.collectionspace.hello.Persons.PersonListItem;
+import org.collectionspace.hello.Persons;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
return current;
}
+ @GET
+ public Persons getPersons(@Context UriInfo ui) {
+ Persons persons = new Persons();
+ List<Persons.PersonListItem> list = persons.getPersonListItem();
+ // builder starts with current URI and has appended path of getPerson method
+ UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getPerson");
+ for (Person p : personDB.values()) {
+ PersonListItem pli = new PersonListItem();
+ pli.setFirstName(p.getFirstName());
+ pli.setLastName(p.getLastName());
+ pli.setId(p.getId());
+ // builder has {id} variable that must be filled in for each customer
+ URI uri = ub.build(p.getId());
+ pli.setUri(uri.toString());
+ list.add(pli);
+ }
+ return persons;
+ }
+
+ @DELETE
+ @Path("/{id}")
+ public void deletePerson(@PathParam("id") Long id) {
+ Person removed = personDB.remove(id);
+ if (removed == null) {
+ Response response = Response.status(Response.Status.NOT_FOUND).entity(
+ "Delete failed, the person ID:" + id + ": was not found.").type("text/plain").build();
+ throw new WebApplicationException(response);
+ }
+ verbose("deleted person", removed);
+ }
+
private void verbose(String msg, Person p) {
try {
System.out.println("PersonResource : " + msg);