package org.jooby.internal.pac4j;
import static org.easymock.EasyMock.expect;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.jooby.Err;
import org.jooby.Request;
import org.jooby.Response;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.pac4j.core.authorization.authorizer.Authorizer;
import org.pac4j.core.authorization.checker.AuthorizationChecker;
import org.pac4j.core.config.Config;
import org.pac4j.core.context.WebContext;
import org.pac4j.core.profile.CommonProfile;
@SuppressWarnings("rawtypes")
public class AuthorizerFilterTest {
Map<String, Authorizer> authorizers = new HashMap<>();
private MockUnit.Block config = unit -> {
Config config = unit.get(Config.class);
Request req = unit.get(Request.class);
expect(req.require(Config.class)).andReturn(config);
expect(config.getAuthorizers()).andReturn(authorizers);
};
private MockUnit.Block ctx = unit -> {
WebContext ctx = unit.get(WebContext.class);
Request req = unit.get(Request.class);
expect(req.require(WebContext.class)).andReturn(ctx);
};
private MockUnit.Block profile = unit -> {
CommonProfile profile = unit.get(CommonProfile.class);
Request req = unit.get(Request.class);
expect(req.require(CommonProfile.class)).andReturn(profile);
};
private MockUnit.Block authorizerChecker = unit -> {
AuthorizationChecker checker = unit.get(AuthorizationChecker.class);
Request req = unit.get(Request.class);
expect(req.require(AuthorizationChecker.class)).andReturn(checker);
};
private MockUnit.Block pass = unit -> {
AuthorizationChecker checker = unit.get(AuthorizationChecker.class);
expect(checker.isAuthorized(unit.get(WebContext.class), Arrays.asList(unit.get(CommonProfile.class)), "admin",
authorizers)).andReturn(true);
};
private MockUnit.Block forbidden = unit -> {
AuthorizationChecker checker = unit.get(AuthorizationChecker.class);
expect(checker.isAuthorized(unit.get(WebContext.class), Arrays.asList(unit.get(CommonProfile.class)), "admin",
authorizers)).andReturn(false);
};
@Test
public void pass() throws Exception {
new MockUnit(Request.class, Response.class, Config.class, WebContext.class, CommonProfile.class,
AuthorizationChecker.class)
.expect(config)
.expect(ctx)
.expect(profile)
.expect(authorizerChecker)
.expect(pass)
.run(unit -> {
new AuthorizerFilter("admin")
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
@Test(expected = Err.class)
public void forbidden() throws Exception {
new MockUnit(Request.class, Response.class, Config.class, WebContext.class, CommonProfile.class,
AuthorizationChecker.class)
.expect(config)
.expect(ctx)
.expect(profile)
.expect(authorizerChecker)
.expect(forbidden)
.run(unit -> {
new AuthorizerFilter("admin")
.handle(unit.get(Request.class), unit.get(Response.class));
});
}
}