94 lines
3.7 KiB
Java
94 lines
3.7 KiB
Java
package fr.xephi.authme.data.captcha;
|
|
|
|
import fr.xephi.authme.ReflectionTestUtils;
|
|
import fr.xephi.authme.settings.Settings;
|
|
import fr.xephi.authme.settings.properties.SecuritySettings;
|
|
import fr.xephi.authme.util.expiring.ExpiringMap;
|
|
import org.bukkit.entity.Player;
|
|
import org.junit.Test;
|
|
|
|
import static fr.xephi.authme.AuthMeMatchers.stringWithLength;
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
import static org.hamcrest.MatcherAssert.assertThat;
|
|
import static org.mockito.BDDMockito.given;
|
|
import static org.mockito.Mockito.mock;
|
|
|
|
/**
|
|
* Test for {@link RegistrationCaptchaManager}.
|
|
*/
|
|
public class RegistrationCaptchaManagerTest {
|
|
|
|
@Test
|
|
public void shouldBeDisabled() {
|
|
// given
|
|
Settings settings = mock(Settings.class);
|
|
// Return false first time, and true after that
|
|
given(settings.getProperty(SecuritySettings.ENABLE_CAPTCHA_FOR_REGISTRATION))
|
|
.willReturn(false).willReturn(true);
|
|
given(settings.getProperty(SecuritySettings.CAPTCHA_LENGTH)).willReturn(12);
|
|
|
|
// when
|
|
RegistrationCaptchaManager captchaManager1 = new RegistrationCaptchaManager(settings);
|
|
RegistrationCaptchaManager captchaManager2 = new RegistrationCaptchaManager(settings);
|
|
|
|
// then
|
|
assertThat(captchaManager1.isCaptchaRequired("bob"), equalTo(false));
|
|
assertThat(captchaManager2.isCaptchaRequired("bob"), equalTo(true));
|
|
}
|
|
|
|
@Test
|
|
public void shouldVerifyCodeSuccessfully() {
|
|
// given
|
|
Settings settings = mock(Settings.class);
|
|
given(settings.getProperty(SecuritySettings.ENABLE_CAPTCHA_FOR_REGISTRATION)).willReturn(true);
|
|
given(settings.getProperty(SecuritySettings.CAPTCHA_LENGTH)).willReturn(12);
|
|
|
|
String captcha = "abc3";
|
|
RegistrationCaptchaManager captchaManager = new RegistrationCaptchaManager(settings);
|
|
getCodeMap(captchaManager).put("test", captcha);
|
|
|
|
Player player = mock(Player.class);
|
|
given(player.getName()).willReturn("TeSt");
|
|
|
|
// when
|
|
boolean isSuccessful = captchaManager.checkCode(player, captcha);
|
|
|
|
// then
|
|
assertThat(isSuccessful, equalTo(true));
|
|
assertThat(getCodeMap(captchaManager).isEmpty(), equalTo(true));
|
|
assertThat(captchaManager.isCaptchaRequired("test"), equalTo(false));
|
|
}
|
|
|
|
@Test
|
|
public void shouldGenerateAndRetrieveCode() {
|
|
// given
|
|
Settings settings = mock(Settings.class);
|
|
given(settings.getProperty(SecuritySettings.ENABLE_CAPTCHA_FOR_REGISTRATION)).willReturn(true);
|
|
int captchaLength = 9;
|
|
given(settings.getProperty(SecuritySettings.CAPTCHA_LENGTH)).willReturn(captchaLength);
|
|
RegistrationCaptchaManager captchaManager = new RegistrationCaptchaManager(settings);
|
|
|
|
// when
|
|
String captcha1 = captchaManager.getCaptchaCodeOrGenerateNew("toast");
|
|
String captcha2 = captchaManager.getCaptchaCodeOrGenerateNew("Toast");
|
|
|
|
// then
|
|
assertThat(captcha1, equalTo(captcha2));
|
|
assertThat(captcha1, stringWithLength(captchaLength));
|
|
|
|
// given (2)
|
|
Player player = mock(Player.class);
|
|
given(player.getName()).willReturn("toast");
|
|
|
|
// when (2) / then (2)
|
|
assertThat(captchaManager.checkCode(player, captcha1), equalTo(true));
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
private static ExpiringMap<String, String> getCodeMap(RegistrationCaptchaManager captchaManager) {
|
|
CaptchaCodeStorage captchaStorage = ReflectionTestUtils.getFieldValue(
|
|
RegistrationCaptchaManager.class, captchaManager, "captchaCodeStorage");
|
|
return ReflectionTestUtils.getFieldValue(CaptchaCodeStorage.class, captchaStorage, "captchaCodes");
|
|
}
|
|
}
|