package org.jboss.resteasy.test.util; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.specimpl.ResponseBuilderImpl; import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.test.util.resource.ResponseBuilderRequest; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import javax.ws.rs.core.Link; import javax.ws.rs.core.Response; import javax.ws.rs.ext.RuntimeDelegate; import java.net.URI; import java.net.URISyntaxException; import java.util.Set; /** * @tpSubChapter Util tests * @tpChapter Unit tests * @tpTestCaseDetails Test for javax.ws.rs.core.Response#ResponseBuilder class. * @tpSince RESTEasy 3.0.16 */ public class ResponseBuilderTest { private static final URI BASE_URI = URI.create("http://localhost/"); private static final URI REQUEST_URI = URI.create("http://localhost/path/to/resource"); private static final String ERROR_MSG = "ResponseBuilder works incorrectly"; private Response.ResponseBuilder builder; @Before public void before() throws URISyntaxException { HttpRequest httpRequest = MockHttpRequest.create("GET", REQUEST_URI, BASE_URI); ResteasyProviderFactory.getContextDataMap().put(HttpRequest.class, httpRequest); builder = new ResponseBuilderImpl(); } @After public void after() throws Exception { ResteasyProviderFactory.removeContextDataLevel(); } /** * @tpTestDetails Complex test for all relevant functions of ResponseBuilder * @tpSince RESTEasy 3.0.16 */ @Test public void responseBuilderTest() { // testLocationSimple { Response r = builder.location(URI.create("/res")).build(); String actualUri = r.getMetadata().getFirst("Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res", actualUri); } // testAllowed { Response response = Response.status(Response.Status.OK).allow("GET", "POST", "DELETE").build(); Set<String> allowedMethods = response.getAllowedMethods(); Assert.assertEquals(ERROR_MSG, allowedMethods.size(), 3); Assert.assertTrue(ERROR_MSG, allowedMethods.contains("GET")); Assert.assertTrue(ERROR_MSG, allowedMethods.contains("POST")); Assert.assertTrue(ERROR_MSG, allowedMethods.contains("DELETE")); } // testLocationPath { Response r = builder.location(URI.create("/a/res")).build(); String actualUri = r.getMetadata().getFirst("Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/a/res", actualUri); } // testLocationQueryString { Response r = builder.location(URI.create("/res?query")).build(); String actualUri = r.getMetadata().getFirst("Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res?query", actualUri); } // testLocationFragment { Response r = builder.location(URI.create("/res#frag")).build(); String actualUri = r.getMetadata().getFirst("Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res#frag", actualUri); } // testContentLocationSimple { Response r = builder.contentLocation(URI.create("/res")).build(); String actualUri = r.getMetadata().getFirst("Content-Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res", actualUri); } // testContentLocationPath { Response r = builder.contentLocation(URI.create("/a/res")).build(); String actualUri = r.getMetadata().getFirst("Content-Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/a/res", actualUri); } // testContentLocationQueryString { Response r = builder.location(URI.create("/res?query")).build(); String actualUri = r.getMetadata().getFirst("Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res?query", actualUri); } // testContentLocationFragment { Response r = builder.contentLocation(URI.create("/res#frag")).build(); String actualUri = r.getMetadata().getFirst("Content-Location").toString(); Assert.assertEquals(ERROR_MSG, "http://localhost/res#frag", actualUri); } // testReplace { String[] headers = {"header1", "header2", "header3"}; Response response = Response.ok().header(headers[0], headers[0]) .header(headers[1], headers[1]).header(headers[2], headers[2]) .replaceAll(null).build(); for (String header : headers) { Assert.assertTrue(ERROR_MSG, response.getHeaderString(header) == null); } } // allowStringArrayTruncateDuplicatesTest { String[] methods = {ResponseBuilderRequest.OPTIONS.name(), ResponseBuilderRequest.OPTIONS.name()}; Response.ResponseBuilder rb = RuntimeDelegate.getInstance() .createResponseBuilder(); Response response = rb.allow(methods).build(); Set<String> set = response.getAllowedMethods(); Assert.assertEquals(ERROR_MSG, 1, set.size()); Assert.assertEquals(ERROR_MSG, set.iterator().next(), ResponseBuilderRequest.OPTIONS.name()); } // testLinkHeaders { Response r1 = Response.ok() .link("Link1", "rel1") .links( Link.fromUri("Link2").rel("rel2").build(), Link.fromUri("Link3").rel("rel3").build() ) .link("Link4", "rel4").build(); Assert.assertEquals(ERROR_MSG, 4, r1.getLinks().size()); Assert.assertNotNull("Link-Header 'Link1' missing", r1.getLink("rel1")); Assert.assertNotNull("Link-Header 'Link2' missing", r1.getLink("rel2")); Assert.assertNotNull("Link-Header 'Link3' missing", r1.getLink("rel3")); Assert.assertNotNull("Link-Header 'Link4' missing", r1.getLink("rel4")); @SuppressWarnings(value = "unchecked") Response r2 = Response.ok() .link("Link1", "rel1") .links((Link[]) null) .link("Link2", "rel2").build(); Assert.assertEquals(ERROR_MSG, 1, r2.getLinks().size()); Assert.assertNull("Link-Header 'Link1' was not removed", r2.getLink("rel1")); Assert.assertNotNull("Link-Header 'Link2' missing", r2.getLink("rel2")); } } }