/**
*
*/
package org.minnal.instrument.resource.metadata.handler;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import org.minnal.instrument.resource.metadata.ResourceMetaData;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/**
* @author ganeshs
*
*/
public class PathAnnotationHandlerTest {
private PathAnnotationHandler handler;
private ResourceMetaData metaData;
@BeforeMethod
public void setup() {
handler = new PathAnnotationHandler();
metaData = new ResourceMetaData(DummyResource.class, "/dummy");
}
@Test
public void shouldGetAnnotationType() {
assertEquals(handler.getAnnotationType(), Path.class);
}
@Test
public void shouldAddSubResourceLocatorToResource() throws Exception {
Path path = mock(Path.class);
when(path.value()).thenReturn("/sub");
handler.handle(metaData, path, DummyResource.class.getMethod("subResource"));
assertTrue(! metaData.getSubResources().isEmpty());
assertEquals(metaData.getSubResources().iterator().next(), new ResourceMetaData(DummySubResource.class, "/dummy/sub"));
}
@Test
public void shouldNotAddSubResourceMethodToResource() throws Exception {
Path path = mock(Path.class);
when(path.value()).thenReturn("/sub1");
handler.handle(metaData, path, DummyResource.class.getMethod("methodWithHttpMethodAnnotation"));
assertTrue(metaData.getSubResources().isEmpty());
}
@Path("/dummy")
public static class DummyResource {
@Path("/sub")
public DummySubResource subResource() {return null;}
@GET
@Path("/sub1")
public void methodWithHttpMethodAnnotation() {}
}
public static class DummySubResource {
}
}