001/*
002 * Licensed to DuraSpace under one or more contributor license agreements.
003 * See the NOTICE file distributed with this work for additional information
004 * regarding copyright ownership.
005 *
006 * DuraSpace licenses this file to you under the Apache License,
007 * Version 2.0 (the "License"); you may not use this file except in
008 * compliance with the License.  You may obtain a copy of the License at
009 *
010 *     http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018package org.fcrepo.http.commons.exceptionhandlers;
019
020import static org.junit.Assert.assertEquals;
021import static org.junit.Assert.assertNull;
022
023import javax.ws.rs.WebApplicationException;
024import javax.ws.rs.core.Response;
025
026import org.junit.Before;
027import org.junit.Test;
028
029import java.util.stream.Stream;
030
031/**
032 * <p>WebApplicationExceptionMapperTest class.</p>
033 *
034 * @author lsitu
035 * @author awoods
036 */
037public class WebApplicationExceptionMapperTest {
038
039    private WebApplicationExceptionMapper testObj;
040
041    @Before
042    public void setUp() {
043        testObj = new WebApplicationExceptionMapper();
044    }
045
046    @Test
047    public void testToResponse() {
048        final WebApplicationException input = new WebApplicationException();
049        final Response actual = testObj.toResponse(input);
050        assertEquals(input.getResponse().getStatus(), actual.getStatus());
051    }
052
053    /**
054     * Insures that the WebApplicationExceptionMapper does not provide an entity body to 204, 205, or 304 responses.
055     * Entity bodies on other responses are mapped appropriately.
056     */
057    @Test
058    public void testNoEntityBody() {
059        Stream.of(204, 205, 304).forEach(status -> {
060                    final WebApplicationException input = new WebApplicationException("Error message", status);
061                    final Response actual = testObj.toResponse(input);
062                    assertNull("Responses with a " + status + " status code MUST NOT carry an entity body.",
063                            actual.getEntity());
064                }
065        );
066
067        final WebApplicationException input = new WebApplicationException("Error message", 500);
068        final Response actual = testObj.toResponse(input);
069        assertEquals("Error message", actual.getEntity());
070    }
071}