package org.jooby.issues;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.jooby.FlashScope;
import org.jooby.Results;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class Issue397 extends ServerFeature {
{
get("/397/noflash", req -> req.flash());
use(new FlashScope());
get("/397/flash", req -> req.flash());
get("/397/discard", req -> req.flash().remove("success"));
post("/397/reset", req -> {
req.flash("foo", "bar");
return Results.redirect("/397");
});
post("/397/flash", req -> {
req.flash("success", "Thank you!");
return Results.redirect("/397");
});
get("/397/untouch", req -> "untouch");
err((req, rsp, err) -> {
rsp.send(err.getMessage());
});
}
@Test
public void noFlashScope() throws Exception {
request()
.get("/397/noflash")
.expect("Bad Request(400): Flash scope isn't available. Install via: use(new FlashScope());");
}
@Test
public void shouldCreateAndDestroyFlashCookie() throws Exception {
request()
.post("/397/flash")
.expect(302)
.header("Set-Cookie", setCookie -> {
assertEquals("jooby.flash=success=Thank+you%21;Version=1;Path=/;HttpOnly", setCookie);
request()
.get("/397/flash")
.header("Cookie", setCookie)
.expect("{success=Thank you!}")
.header("Set-Cookie", clearCookie -> {
assertTrue(clearCookie.startsWith("jooby.flash=;Version=1;Path=/;HttpOnly;Max-Age=0;"));
});
});
}
@Test
public void shouldNotCreateCookieWhenFlashStateDontChange() throws Exception {
request()
.get("/397/untouch")
.expect(200)
.header("Set-Cookie", setCookie -> {
assertEquals(null, setCookie);
});
}
@Test
public void shouldRecreateCookieOnReset() throws Exception {
request()
.post("/397/flash")
.expect(302)
.header("Set-Cookie", setCookie1 -> {
assertEquals("jooby.flash=success=Thank+you%21;Version=1;Path=/;HttpOnly", setCookie1);
request()
.post("/397/reset")
.header("Cookie", setCookie1)
.expect(302)
.header("Set-Cookie", setCookie2 -> {
assertEquals("jooby.flash=success=Thank+you%21&foo=bar;Version=1;Path=/;HttpOnly", setCookie2);
request()
.get("/397/flash")
.header("Cookie", setCookie2)
.expect("{success=Thank you!, foo=bar}")
.header("Set-Cookie", clearCookie -> {
assertTrue(clearCookie.startsWith("jooby.flash=;Version=1;Path=/;HttpOnly;Max-Age=0;"));
});
});
});
}
@Test
public void shouldClearFlashCookieWhenEmpty() throws Exception {
request()
.get("/397/discard")
.header("Cookie", "jooby.flash=success=OK;Version=1")
.expect(200)
.header("Set-Cookie", setCookie -> {
assertTrue(setCookie.startsWith("jooby.flash=;Version=1;Path=/;HttpOnly;Max-Age=0;"));
});
}
}