package org.jboss.resteasy.test.request; import org.jboss.resteasy.core.request.AcceptHeaders; import org.jboss.resteasy.core.request.QualityValue; import org.jboss.resteasy.spi.BadRequestException; import org.junit.Test; import javax.ws.rs.core.MediaType; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; /** * @tpSubChapter Requests * @tpChapter Unit tests * @tpTestCaseDetails Test for AcceptHeaders and QualityValue classes, media type. * @tpSince RESTEasy 3.0.16 */ public class MediaTypeQualityValueTest { private static void assertList(String header, MediaType[] fields, QualityValue[] qualities) { Map<MediaType, QualityValue> map = AcceptHeaders.getMediaTypeQualityValues(header); List<MediaType> expectedKeys = Arrays.asList(fields); List<QualityValue> expectedValues = Arrays.asList(qualities); assertEquals("Wrong keys in map", expectedKeys, new ArrayList<MediaType>(map.keySet())); assertEquals("Wrong values in map", expectedValues, new ArrayList<QualityValue>(map.values())); } /** * @tpTestDetails Test for simple values. * @tpSince RESTEasy 3.0.16 */ @Test public void simple() { String header = "audio/*; q=0.2, audio/basic"; MediaType[] fields = { MediaType.valueOf("audio/*"), MediaType.valueOf("audio/basic") }; QualityValue[] qualities = { QualityValue.valueOf("0.2"), QualityValue.DEFAULT }; assertList(header, fields, qualities); } /** * @tpTestDetails Test for special parameters. * @tpSince RESTEasy 3.0.16 */ @Test public void parameters() { String header = "text/html;level=\"1\", text/html;level=2;q=0.4"; MediaType[] fields = { MediaType.valueOf("text/html;level=1"), MediaType.valueOf("text/html;level=2") }; QualityValue[] qualities = { QualityValue.DEFAULT, QualityValue.valueOf("0.4") }; assertList(header, fields, qualities); } /** * @tpTestDetails Test for unsupported extension. * @tpSince RESTEasy 3.0.16 */ @Test public void unsupportedExtension() { String header = "plain/text; a=b; q=0.2; extension=unsupported"; MediaType[] fields = {MediaType.valueOf("plain/text;a=b")}; QualityValue[] qualities = {QualityValue.NOT_ACCEPTABLE}; assertList(header, fields, qualities); } /** * @tpTestDetails Test for bad requests. * @tpSince RESTEasy 3.0.16 */ @Test public void badRequests() { String[] badHeaders = { "a", "a,b", "a/b,", "a/b;", "a/b;p", "a/b;p=x,", "a/b;p=\"x\"y", "a/b;p=\"x\"y,c/d", "a/b;p=\"x,c/d", "a/b;p=\"x\\\",c/d" }; for (String header : badHeaders) { try { AcceptHeaders.getMediaTypeQualityValues(header); fail(header); } catch (BadRequestException e) { } } } /** * @tpTestDetails Test empty quality values. * @tpSince RESTEasy 3.0.16 */ @Test public void empty() { final String ERROR_MSG = "Local quality values should not be null"; assertNull(ERROR_MSG, AcceptHeaders.getMediaTypeQualityValues(null)); assertNull(ERROR_MSG, AcceptHeaders.getMediaTypeQualityValues("")); assertNull(ERROR_MSG, AcceptHeaders.getMediaTypeQualityValues(" ")); } }