package sample.jersey; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.sun.net.httpserver.HttpServer; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.glassfish.jersey.jackson.JacksonFeature; import org.junit.After; import org.junit.Before; import org.junit.Test; import sample.jersey.providers.JsonResourceBodyReader; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import static org.junit.Assert.assertEquals; public class SampleResourceTest { private HttpServer server; private Client client; @Before public void setUp() throws Exception { server = Main.getServer(); server.start(); client = ClientBuilder.newClient() .register(new SampleBinder()) .register(JacksonFeature.class) .register(JsonResourceBodyReader.class); } @After public void tearDown() throws Exception { server.stop(0); } @Test public void testGet() throws Exception { WebTarget target = client.target(Main.uri + "u1"); Resource resource = target.request(MediaType.APPLICATION_JSON).get(Resource.class); assertEquals(1, resource.getContents().size()); EObject u1 = resource.getContents().get(0); assertEquals("User", u1.eClass().getName()); assertEquals("u1", u1.eGet(u1.eClass().getEStructuralFeature("name"))); } @Test public void testPost() { ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.createObjectNode() .put("name", "u2"); Response response = client.target(Main.uri) .request(MediaType.APPLICATION_JSON) .post(Entity.entity(node, MediaType.APPLICATION_JSON)); assertEquals(201, response.getStatus()); assertEquals("http://localhost:8080/u2", response.getLocation().toString()); WebTarget target = client.target(Main.uri + "u2"); Resource resource = target.request(MediaType.APPLICATION_JSON).get(Resource.class); assertEquals(1, resource.getContents().size()); EObject u1 = resource.getContents().get(0); assertEquals("User", u1.eClass().getName()); assertEquals("u2", u1.eGet(u1.eClass().getEStructuralFeature("name"))); } @Test public void testPut() { ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.createObjectNode() .put("name", "u3"); Response response = client.target(Main.uri + "u1") .request(MediaType.APPLICATION_JSON) .put(Entity.entity(node, MediaType.APPLICATION_JSON)); assertEquals(200, response.getStatus()); Resource resource = response.readEntity(Resource.class); assertEquals(1, resource.getContents().size()); EObject u1 = resource.getContents().get(0); assertEquals("User", u1.eClass().getName()); assertEquals("u3", u1.eGet(u1.eClass().getEStructuralFeature("name"))); } @Test public void testDelete() { Response response = client.target(Main.uri + "u1") .request() .delete(); assertEquals(204, response.getStatus()); } }