package org.pac4j.http.client.direct;
import org.junit.Test;
import org.pac4j.core.context.MockWebContext;
import org.pac4j.core.context.Pac4jConstants;
import org.pac4j.core.credentials.authenticator.LocalCachingAuthenticator;
import org.pac4j.core.exception.HttpAction;
import org.pac4j.core.exception.TechnicalException;
import org.pac4j.core.profile.CommonProfile;
import org.pac4j.core.profile.ProfileHelper;
import org.pac4j.core.util.TestsConstants;
import org.pac4j.core.util.TestsHelper;
import org.pac4j.core.credentials.UsernamePasswordCredentials;
import org.pac4j.http.credentials.authenticator.test.SimpleTestUsernamePasswordAuthenticator;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.*;
/**
* This class tests the {@link DirectFormClient} class.
*
* @author Jerome Leleu
* @since 1.8.6
*/
public final class DirectFormClientTests implements TestsConstants {
@Test
public void testMissingUsernamePasswordAuthenticator() {
final DirectFormClient formClient = new DirectFormClient(null);
TestsHelper.expectException(() -> formClient.getCredentials(MockWebContext.create()), TechnicalException.class, "authenticator cannot be null");
}
@Test
public void testMissingProfileCreator() {
final DirectFormClient formClient = new DirectFormClient(new SimpleTestUsernamePasswordAuthenticator(), null);
TestsHelper.expectException(() -> formClient.getUserProfile(new UsernamePasswordCredentials(USERNAME, PASSWORD, CLIENT_NAME),
MockWebContext.create()), TechnicalException.class, "profileCreator cannot be null");
}
@Test
public void testHasDefaultProfileCreator() {
final DirectFormClient formClient = new DirectFormClient(new LocalCachingAuthenticator<>(new SimpleTestUsernamePasswordAuthenticator(), 10, 10, TimeUnit.DAYS));
formClient.init(null);
}
private DirectFormClient getFormClient() {
return new DirectFormClient(new SimpleTestUsernamePasswordAuthenticator());
}
@Test
public void testGetCredentialsMissingUsername() throws HttpAction {
final DirectFormClient formClient = getFormClient();
final MockWebContext context = MockWebContext.create();
assertNull(formClient.getCredentials(context.addRequestParameter(formClient.getUsernameParameter(), USERNAME)));
}
@Test
public void testGetCredentialsMissingPassword() throws HttpAction {
final DirectFormClient formClient = getFormClient();
final MockWebContext context = MockWebContext.create();
assertNull(formClient.getCredentials(context.addRequestParameter(formClient.getPasswordParameter(), PASSWORD)));
}
@Test
public void testGetBadCredentials() throws HttpAction {
final DirectFormClient formClient = getFormClient();
final MockWebContext context = MockWebContext.create();
assertNull(formClient.getCredentials(context.addRequestParameter(formClient.getUsernameParameter(), USERNAME)
.addRequestParameter(formClient.getPasswordParameter(), PASSWORD)));
}
@Test
public void testGetGoodCredentials() throws HttpAction {
final DirectFormClient formClient = getFormClient();
final UsernamePasswordCredentials credentials = formClient.getCredentials(MockWebContext.create()
.addRequestParameter(formClient.getUsernameParameter(), USERNAME)
.addRequestParameter(formClient.getPasswordParameter(), USERNAME));
assertEquals(USERNAME, credentials.getUsername());
assertEquals(USERNAME, credentials.getPassword());
}
@Test
public void testGetUserProfile() throws HttpAction {
final DirectFormClient formClient = getFormClient();
formClient.setProfileCreator((credentials, context) -> {
String username = credentials.getUsername();
final CommonProfile profile = new CommonProfile();
profile.setId(username);
profile.addAttribute(Pac4jConstants.USERNAME, username);
return profile;
});
final MockWebContext context = MockWebContext.create();
final CommonProfile profile = formClient.getUserProfile(new UsernamePasswordCredentials(USERNAME, USERNAME,
formClient.getName()), context);
assertEquals(USERNAME, profile.getId());
assertEquals(CommonProfile.class.getName() + CommonProfile.SEPARATOR + USERNAME, profile.getTypedId());
assertTrue(ProfileHelper.isTypedIdOf(profile.getTypedId(), CommonProfile.class));
assertEquals(USERNAME, profile.getUsername());
assertEquals(1, profile.getAttributes().size());
}
}