package org.jooby.issues; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Map; import java.util.Optional; import org.jooby.FlashScope; import org.jooby.mvc.Flash; import org.jooby.mvc.GET; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class Issue397b extends ServerFeature { @Path("/397") public static class Resource { @GET @Path("/flash") public Object flash(@Flash final Map<String, String> flash) { flash.put("foo", "bar"); return flash; } @GET @Path("/flash/attr") public Object flash(@Flash final String foo) { return foo; } @GET @Path("/flash/attr/optional") public Object flash(@Flash final Optional<String> foo) { return foo.orElse("empty"); } } { use(new FlashScope()); use(Resource.class); err((req, rsp, err) -> { err.printStackTrace(); rsp.send(err.statusCode() + ": " + err.getCause().getMessage()); }); } @Test public void flashScopeOnMvc() throws Exception { request() .get("/397/flash") .expect("{foo=bar}") .header("Set-Cookie", setCookie -> { assertEquals("jooby.flash=foo=bar;Version=1;Path=/;HttpOnly", setCookie); request() .get("/397/flash/attr") .expect("bar") .header("Set-Cookie", clearCookie -> { assertTrue(clearCookie.startsWith("jooby.flash=;Version=1;Path=/;HttpOnly;Max-Age=0;")); }); }); } @Test public void optionalFlashScope() throws Exception { request() .get("/397/flash/attr/optional") .header("Cookie", "") .expect("empty"); } }