Added EmailChangedEvent (#1549)

* Added EmailChangedEvent

* Fix failing tests

Silly.

* Documented the EmailChangedEvent

* Separate messages for cancelled email event

* Added lang todos for all the languages I can't speak

I wish I could though.

* Checkstyle satisfaction

* Changed log level to info for cancelled events
This commit is contained in:
Tony
2018-04-03 09:45:27 -06:00
committed by Gabriele C
parent 106dea1611
commit 1f9bf38755
37 changed files with 259 additions and 8 deletions
@@ -4,7 +4,9 @@ import fr.xephi.authme.TestHelper;
import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.events.EmailChangedEvent;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.service.bungeecord.BungeeSender;
@@ -15,11 +17,13 @@ import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.function.Function;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
/**
@@ -49,6 +53,9 @@ public class AsyncAddEmailTest {
@Mock
private BungeeSender bungeeSender;
@Mock
private BukkitService bukkitService;
@BeforeClass
public static void setUp() {
TestHelper.setupLogger();
@@ -66,6 +73,8 @@ public class AsyncAddEmailTest {
given(dataSource.updateEmail(any(PlayerAuth.class))).willReturn(true);
given(validationService.validateEmail(email)).willReturn(true);
given(validationService.isEmailFreeForRegistration(email, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, null, email, false));
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
asyncAddEmail.addEmail(player, email);
@@ -89,6 +98,8 @@ public class AsyncAddEmailTest {
given(dataSource.updateEmail(any(PlayerAuth.class))).willReturn(false);
given(validationService.validateEmail(email)).willReturn(true);
given(validationService.isEmailFreeForRegistration(email, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, null, email, false));
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
asyncAddEmail.addEmail(player, email);
@@ -184,4 +195,27 @@ public class AsyncAddEmailTest {
verify(playerCache, never()).updatePlayer(any(PlayerAuth.class));
}
@Test
public void shouldNotAddOnCancelledEvent() {
// given
String email = "player@mail.tld";
given(player.getName()).willReturn("TestName");
given(playerCache.isAuthenticated("testname")).willReturn(true);
PlayerAuth auth = mock(PlayerAuth.class);
given(auth.getEmail()).willReturn(null);
given(playerCache.getAuth("testname")).willReturn(auth);
given(validationService.validateEmail(email)).willReturn(true);
given(validationService.isEmailFreeForRegistration(email, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, null, email, false));
event.setCancelled(true);
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
asyncAddEmail.addEmail(player, email);
// then
verify(service).send(player, MessageKey.EMAIL_ADD_NOT_ALLOWED);
verify(playerCache, never()).updatePlayer(any(PlayerAuth.class));
}
}
@@ -3,7 +3,9 @@ package fr.xephi.authme.process.email;
import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.events.EmailChangedEvent;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.service.bungeecord.BungeeSender;
@@ -14,10 +16,13 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.function.Function;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -48,6 +53,9 @@ public class AsyncChangeEmailTest {
@Mock
private BungeeSender bungeeSender;
@Mock
private BukkitService bukkitService;
@Test
public void shouldChangeEmail() {
// given
@@ -59,7 +67,9 @@ public class AsyncChangeEmailTest {
given(dataSource.updateEmail(auth)).willReturn(true);
given(validationService.validateEmail(newEmail)).willReturn(true);
given(validationService.isEmailFreeForRegistration(newEmail, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, "old@mail.tld", newEmail, false));
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
process.changeEmail(player, "old@mail.tld", newEmail);
@@ -81,6 +91,8 @@ public class AsyncChangeEmailTest {
given(dataSource.updateEmail(auth)).willReturn(true);
given(validationService.validateEmail(newEmail)).willReturn(true);
given(validationService.isEmailFreeForRegistration(newEmail, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, oldEmail, newEmail, false));
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
process.changeEmail(player, "old-mail@example.org", newEmail);
@@ -102,6 +114,8 @@ public class AsyncChangeEmailTest {
given(dataSource.updateEmail(auth)).willReturn(false);
given(validationService.validateEmail(newEmail)).willReturn(true);
given(validationService.isEmailFreeForRegistration(newEmail, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, "old@mail.tld", newEmail, false));
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
process.changeEmail(player, "old@mail.tld", newEmail);
@@ -219,6 +233,30 @@ public class AsyncChangeEmailTest {
verify(service).send(player, MessageKey.REGISTER_MESSAGE);
}
@Test
public void shouldNotChangeOnCancelledEvent() {
// given
String newEmail = "new@example.com";
String oldEmail = "old@example.com";
given(player.getName()).willReturn("Username");
given(playerCache.isAuthenticated("username")).willReturn(true);
PlayerAuth auth = authWithMail(oldEmail);
given(playerCache.getAuth("username")).willReturn(auth);
given(validationService.validateEmail(newEmail)).willReturn(true);
given(validationService.isEmailFreeForRegistration(newEmail, player)).willReturn(true);
EmailChangedEvent event = spy(new EmailChangedEvent(player, oldEmail, newEmail, false));
event.setCancelled(true);
given(bukkitService.createAndCallEvent(any(Function.class))).willReturn(event);
// when
process.changeEmail(player, oldEmail, newEmail);
// then
verify(dataSource, never()).updateEmail(any(PlayerAuth.class));
verify(playerCache, never()).updatePlayer(any(PlayerAuth.class));
verify(service).send(player, MessageKey.EMAIL_CHANGE_NOT_ALLOWED);
}
private static PlayerAuth authWithMail(String email) {
PlayerAuth auth = mock(PlayerAuth.class);
when(auth.getEmail()).thenReturn(email);