/*******************************************************************************
* Copyright (c) 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Holger Staudacher - initial API and implementation
******************************************************************************/
package com.eclipsesource.jaxrs.consumer;
import static com.eclipsesource.jaxrs.consumer.test.TestUtil.createResource;
import static com.github.restdriver.clientdriver.ClientDriverRequest.Method.GET;
import static com.github.restdriver.clientdriver.RestClientDriver.giveResponse;
import static com.github.restdriver.clientdriver.RestClientDriver.onRequestTo;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
import static org.junit.Assert.assertEquals;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import org.junit.Rule;
import org.junit.Test;
import com.github.restdriver.clientdriver.ClientDriverRule;
public class AdvancedGetRequestsTest {
@Rule
public ClientDriverRule driver = new ClientDriverRule();
@Path( "/test" )
private interface FakeResource {
@GET
@Path( "/foo" )
String getContent();
@GET
String getContent( @QueryParam( "foo" ) String param );
@GET
@Path( "/{foo}/{foo2}" )
String getContent( @PathParam( "foo" ) String foo, @PathParam( "foo2" ) String foo2 );
@GET
String getContent( @MatrixParam( "foo" ) String foo,
@MatrixParam( "foo1" ) String foo1,
@MatrixParam( "foo2" ) String foo2 );
}
@Test
public void testGetWithSubPath() {
driver.addExpectation( onRequestTo( "/test/foo" ).withMethod( GET ), giveResponse( "get", TEXT_PLAIN ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
assertEquals( "get", resource.getContent() );
}
@Test
public void testGetWithQueryParam() {
driver.addExpectation( onRequestTo( "/test" ).withMethod( GET ).withParam( "foo", "bar" ),
giveResponse( "get", TEXT_PLAIN ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
assertEquals( "get", resource.getContent( "bar" ) );
}
@Test
public void testGetWithPathParam() {
driver.addExpectation( onRequestTo( "/test/bar/bar2" ).withMethod( GET ), giveResponse( "get", TEXT_PLAIN ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
assertEquals( "get", resource.getContent( "bar", "bar2" ) );
}
@Test
public void testGetWithMatrixParams() {
// TODO: Extend ClientDriver to not strip of the matrix paramters. See HttpRealRequest contructor.
// driver.addExpectation( onRequestTo( "/test;foo=bar;foo1=bar1;foo2=bar2" ).withMethod( GET ), giveResponse( "get" ) );
driver.addExpectation( onRequestTo( "/test" ).withMethod( GET ), giveResponse( "get", TEXT_PLAIN ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
assertEquals( "get", resource.getContent( "bar", "bar1", "bar2" ) );
}
@Test( expected = RequestException.class )
public void testThrowsRequestExceptionWith4xx() {
driver.addExpectation( onRequestTo( "/test" ).withMethod( GET ), giveResponse( "get", TEXT_PLAIN ).withStatus( 404 ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
resource.getContent( "bar", "bar1", "bar2" );
}
@Test( expected = RequestException.class )
public void testThrowsRequestExceptionWith5xx() {
driver.addExpectation( onRequestTo( "/test" ).withMethod( GET ), giveResponse( "get", TEXT_PLAIN ).withStatus( 500 ) );
FakeResource resource = createResource( FakeResource.class, driver.getBaseUrl() );
resource.getContent( "bar", "bar1", "bar2" );
}
}