package org.jooby.internal.pac4j;
import static org.easymock.EasyMock.expect;
import java.util.Optional;
import org.jooby.Mutant;
import org.jooby.Request;
import org.jooby.Response;
import org.jooby.Session;
import org.jooby.pac4j.Auth;
import org.jooby.pac4j.AuthStore;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.pac4j.core.profile.CommonProfile;
public class AuthLogoutTest {
@SuppressWarnings("rawtypes")
@Test
public void unset() throws Exception {
new MockUnit(Request.class, Response.class, Session.class, AuthStore.class, CommonProfile.class)
.expect(unit -> {
Session session = unit.get(Session.class);
Request req = unit.get(Request.class);
expect(req.ifSession()).andReturn(Optional.of(session));
expect(req.require(AuthStore.class)).andReturn(unit.get(AuthStore.class));
expect(req.ifGet("auth.logout.redirectTo")).andReturn(Optional.empty());
})
.expect(unit -> {
Optional<String> id = Optional.of("1");
CommonProfile profile = unit.get(CommonProfile.class);
AuthStore store = unit.get(AuthStore.class);
expect(store.unset("1")).andReturn(Optional.of(profile));
Mutant attr = unit.mock(Mutant.class);
expect(attr.toOptional()).andReturn(id);
Session session = unit.get(Session.class);
expect(session.unset(Auth.ID)).andReturn(attr);
})
.expect(unit -> {
Response rsp = unit.get(Response.class);
rsp.redirect("/");
})
.run(unit -> {
new AuthLogout("/")
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
@Test
public void unsetIgnore() throws Exception {
new MockUnit(Request.class, Response.class, Session.class)
.expect(unit -> {
Session session = unit.get(Session.class);
Request req = unit.get(Request.class);
expect(req.ifSession()).andReturn(Optional.of(session));
expect(req.ifGet("auth.logout.redirectTo")).andReturn(Optional.empty());
})
.expect(unit -> {
Optional<String> id = Optional.empty();
Mutant attr = unit.mock(Mutant.class);
expect(attr.toOptional()).andReturn(id);
Session session = unit.get(Session.class);
expect(session.unset(Auth.ID)).andReturn(attr);
})
.expect(unit -> {
Response rsp = unit.get(Response.class);
rsp.redirect("/");
})
.run(unit -> {
new AuthLogout("/")
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
@Test
public void unsetNoSession() throws Exception {
new MockUnit(Request.class, Response.class)
.expect(unit -> {
Request req = unit.get(Request.class);
expect(req.ifSession()).andReturn(Optional.empty());
expect(req.ifGet("auth.logout.redirectTo")).andReturn(Optional.empty());
})
.expect(unit -> {
Response rsp = unit.get(Response.class);
rsp.redirect("/");
})
.run(unit -> {
new AuthLogout("/")
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
}