package org.testfun.jee.examples;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.skyscreamer.jsonassert.JSONAssert;
import org.skyscreamer.jsonassert.JSONCompareMode;
import org.testfun.jee.EjbWithMockitoRunner;
import org.testfun.jee.JaxRsServer;
import org.testfun.jee.real.SomeDao;
import org.testfun.jee.real.SomeEntity;
import javax.ws.rs.core.Response;
import java.util.Arrays;
import static com.jayway.jsonassert.JsonAssert.with;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;
@RunWith(EjbWithMockitoRunner.class)
public class JaxRsExampleTest {
@Mock
private SomeDao someDao;
@Rule
public JaxRsServer jaxRsServer = JaxRsServer.forResources(ExampleResource.class);
@Test
public void get() throws Exception {
JSONAssert.assertEquals(
"{\"key\":1,\"data\":\"Got 1\"}",
jaxRsServer.jsonRequest("/example/data/1").get(),
JSONCompareMode.LENIENT
);
}
@Test
public void notFound() {
assertEquals(
"Data with ID 0 wasn't found",
jaxRsServer.jsonRequest("/example/data/0").expectStatus(Response.Status.NOT_FOUND).get()
);
}
@Test
public void getAll() {
String json = jaxRsServer.jsonRequest("/example/data").queryParam("min", 2).queryParam("max", 6).get();
with(json).assertThat("$[*].key", contains(2, 3, 4, 5));
}
@Test
public void create() {
jaxRsServer
.jsonRequest("/example/data")
.body(new RestData(12, "data..."))
.expectStatus(Response.Status.CREATED)
.expectLocation("/example/data/12")
.post();
}
@Test
public void withMock() {
when(someDao.getAll()).thenReturn(Arrays.<SomeEntity>asList(new SomeEntity(0, "n1", "a1"), new SomeEntity(0, "n2", "a2")));
assertEquals("n1", jaxRsServer.jsonRequest("/example/use_ejb").header("index", 0).get());
assertEquals("n2", jaxRsServer.jsonRequest("/example/use_ejb").header("index", 1).get());
}
}