package org.jooby.cookies; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.List; import org.jooby.Cookie; import org.jooby.Mutant; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class CookiesFeature extends ServerFeature { @Path("r") public static class Resource { @org.jooby.mvc.GET @Path("cookies") public String list(final List<Cookie> cookies) { return cookies.toString(); } } { get("/set", (req, rsp) -> { Cookie cookie = new Cookie.Definition("X", "x").path("/set").toCookie(); rsp.cookie(cookie).send(cookie); }); get("/get", (req, rsp) -> { // no path for netty assertTrue(req.cookies().toString().startsWith("[X=x;Version=1")); Mutant cookie = req.cookie("X"); rsp.send(cookie.isSet() ? "present" : "deleted"); }); get("/nocookies", (req, rsp) -> { rsp.send(req.cookies().toString()); }); get("/clear", (req, rsp) -> { rsp.clearCookie("X"); rsp.status(200); }); use(Resource.class); } @Test public void responseCookie() throws Exception { request() .get("/set") .expect("X=x;Version=1;Path=/set") .header("Set-Cookie", setCookie -> { assertEquals("X=x;Version=1;Path=/set", setCookie); request() .get("/get") .header("Cookie", "$Version=1; X=x; $Path=/set;") .expect(200) .expect("present"); }); } @Test public void noCookies() throws Exception { request() .get("/nocookies") .expect(200) .expect("[]"); } @Test public void clearCookie() throws Exception { request() .get("/set") .expect("X=x;Version=1;Path=/set") .header("Set-Cookie", setCookie -> { assertEquals(setCookie, "X=x;Version=1;Path=/set"); request() .get("/clear") .header("Cookie", "X=x; $Path=/clear; $Version=1") .expect(200) .header("Set-Cookie", "X=;Version=1;Path=/;Max-Age=0;Expires=Thu, 01-Jan-1970 00:00:00 GMT"); }); } @Test public void listCookies() throws Exception { request() .get("/r/cookies") .header("Cookie", "X=x") .expect(200) .expect("[X=x;Version=1]"); } }