/*
* Copyright (c) 2013-2014 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.werval.runtime.http;
import io.werval.api.http.Cookies.Cookie;
import io.werval.api.outcomes.Outcome;
import io.werval.runtime.routes.RoutesParserProvider;
import io.werval.test.WervalHttpRule;
import org.junit.ClassRule;
import org.junit.Test;
import static com.jayway.restassured.RestAssured.expect;
import static com.jayway.restassured.RestAssured.given;
import static io.werval.api.context.CurrentContext.builders;
import static io.werval.api.context.CurrentContext.outcomes;
import static io.werval.api.context.CurrentContext.request;
import static io.werval.api.context.CurrentContext.response;
public class CookiesTest
{
public static class Controller
{
public Outcome setCookie( String name, String value )
{
response().cookies().set( name, value );
return outcomes().ok().build();
}
public Outcome removeCookie( String name )
{
response().cookies().invalidate( name );
return outcomes().ok().build();
}
public Outcome mirrorCookies()
{
for( Cookie cookie : request().cookies() )
{
response().cookies().set( cookie.name(), cookie.value() );
}
return outcomes().ok().build();
}
public Outcome builderCookie()
{
response().cookies().set(
builders().newCookieBuilder()
.name( "empty" )
.build()
);
response().cookies().set(
builders().newCookieBuilder()
.name( "valued" )
.value( "value" )
.build()
);
return outcomes().ok().build();
}
}
@ClassRule
public static final WervalHttpRule WERVAL = new WervalHttpRule( new RoutesParserProvider(
"GET /set/:name/:value io.werval.runtime.http.CookiesTest$Controller.setCookie( String name, String value )\n"
+ "GET /remove/:name io.werval.runtime.http.CookiesTest$Controller.removeCookie( String name )\n"
+ "GET /mirror io.werval.runtime.http.CookiesTest$Controller.mirrorCookies\n"
+ "GET /builder io.werval.runtime.http.CookiesTest$Controller.builderCookie"
) );
@Test
public void setCookie()
{
expect()
.statusCode( 200 )
.cookie( "foo", "bar" )
.when()
.get( "/set/foo/bar" );
}
@Test
public void removeCookie()
{
expect()
.statusCode( 200 )
.cookie( "foo", "" )
.when()
.get( "/remove/foo" );
}
@Test
public void mirrorCookies()
{
given()
.cookie( "bazar", "cathedral" )
.cookie( "binz", "bridge" )
.expect()
.statusCode( 200 )
.cookie( "bazar", "cathedral" )
.cookie( "binz", "bridge" )
.when()
.get( "/mirror" );
}
@Test
public void builderCookie()
{
expect()
.statusCode( 200 )
.cookie( "empty", "" )
.cookie( "valued", "value" )
.when()
.get( "/builder" );
}
}