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.integration;
019
020
021import com.hp.hpl.jena.query.ResultSet;
022import org.glassfish.grizzly.http.util.HttpStatus;
023import org.glassfish.jersey.test.JerseyTest;
024import org.junit.Test;
025
026import javax.ws.rs.POST;
027import javax.ws.rs.Path;
028import javax.ws.rs.Produces;
029import javax.ws.rs.client.Entity;
030import javax.ws.rs.client.WebTarget;
031import javax.ws.rs.core.Application;
032import javax.ws.rs.core.Response;
033
034import static org.apache.jena.riot.WebContent.contentTypeNTriples;
035import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
036import static org.apache.jena.riot.WebContent.contentTypeResultsBIO;
037import static org.apache.jena.riot.WebContent.contentTypeResultsJSON;
038import static org.apache.jena.riot.WebContent.contentTypeResultsXML;
039import static org.apache.jena.riot.WebContent.contentTypeTextCSV;
040import static org.apache.jena.riot.WebContent.contentTypeTextTSV;
041import static org.apache.jena.riot.WebContent.contentTypeTurtle;
042import static org.junit.Assert.assertEquals;
043import static org.mockito.Mockito.mock;
044
045/**
046 * Tests custom MessageBodyWriter
047 * @author osmandin
048 */
049public class ResultSetStreamingOutputIT extends JerseyTest {
050
051    @Test
052    public void testContentType() {
053        final WebTarget target = target("test/point");
054
055        Response response = target.request(contentTypeTextCSV).post(Entity.text("test")
056                , Response.class);
057        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
058
059        response = target.request(contentTypeTextTSV).post(Entity.text("test"), Response.class);
060        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
061
062        response = target.request(contentTypeRDFXML).post(Entity.text("test"), Response.class);
063        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
064
065        response = target.request(contentTypeTurtle).post(Entity.text("test"), Response.class);
066        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
067
068        response = target.request(contentTypeNTriples).post(Entity.text("test"), Response.class);
069        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
070
071        response = target.request(contentTypeResultsXML).post(Entity.text("test"), Response.class);
072        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
073
074        response = target.request(contentTypeResultsJSON).post(Entity.text("test"), Response.class);
075        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
076
077        response = target.request(contentTypeResultsBIO).post(Entity.text("test"), Response.class);
078        assertEquals(response.getStatus(), HttpStatus.OK_200.getStatusCode());
079
080        response = target.request("gamma-rays").post(Entity.text("self-test"), Response.class);
081        assertEquals(response.getStatus(), HttpStatus.NOT_ACCEPTABLE_406.getStatusCode());
082    }
083
084    @Override
085    protected Application configure() {
086        return new TestResourceConfig()
087                .property("contextConfigLocation",
088                        "classpath:spring-test/test-config.xml");
089    }
090
091    @Path("test")
092    public static class TestHttpResource {
093
094        @POST
095        @Path("/point")
096        @Produces({contentTypeTextTSV, contentTypeTextCSV, contentTypeResultsJSON,
097                contentTypeResultsXML, contentTypeResultsBIO, contentTypeTurtle,
098                contentTypeNTriples, contentTypeRDFXML})
099        public ResultSet content() {
100            return mock(ResultSet.class);
101        }
102
103    }
104}