From 307cbd8a621da6a2874661d20471198a6b728153 Mon Sep 17 00:00:00 2001 From: Steffen Nitschke Date: Sun, 31 Jan 2021 02:32:43 +0100 Subject: [PATCH] add ChangeUserNameEvent and add UserServiceTest --- .../java/de/fd/fh/server/user/UserId.java | 1 - .../de/fd/fh/server/user/UserService.java | 19 +++++++--- .../user/events/ChangeUserNameEvent.java | 14 +++++++ .../fh/server/user/web/ChangeUserRequest.java | 10 +++-- .../de/fd/fh/server/user/UserServiceTest.java | 38 ++++++++++++++++--- 5 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 fh.fd.ci.server/src/main/java/de/fd/fh/server/user/events/ChangeUserNameEvent.java diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserId.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserId.java index d978069..e6599af 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserId.java +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserId.java @@ -6,7 +6,6 @@ import org.bson.types.ObjectId; @Getter @Embedded -@NoArgsConstructor @AllArgsConstructor(access = AccessLevel.PRIVATE) @EqualsAndHashCode(of = {"identifier"}) public class UserId diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java index 268e695..930a807 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserService.java @@ -1,6 +1,7 @@ package de.fd.fh.server.user; import de.fd.fh.server.user.events.ChangePasswordEvent; +import de.fd.fh.server.user.events.ChangeUserNameEvent; import de.fd.fh.server.user.web.ChangeUserRequest; import de.fd.fh.server.user.web.UserRequest; import lombok.RequiredArgsConstructor; @@ -14,8 +15,6 @@ public class UserService extends Observable public User changePlayer(final UserId userId, final ChangeUserRequest message) { - System.out.println("changePlayer: " + message); - User user = userRepository.findUserById(userId); if (message.getPassword() != null) @@ -24,9 +23,19 @@ public class UserService extends Observable notifyObservers(new ChangePasswordEvent(userId, message.getPassword())); } - userRepository.save(user); + if (message.getName() != null) + { + if (userRepository.findUserByName(message.getName()) == null) + { + user.rename(message.getName()); + userRepository.save(user); + + setChanged(); + notifyObservers(new ChangeUserNameEvent(userId, message.getName())); + } + } - return userRepository.findUserById(userId); + return user; } public User getPlayer(final UserId id) @@ -45,4 +54,4 @@ public class UserService extends Observable return new UserRequest(user.getId().getIdentifier(), user.getName()); } -} +} \ No newline at end of file diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/events/ChangeUserNameEvent.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/events/ChangeUserNameEvent.java new file mode 100644 index 0000000..e30a175 --- /dev/null +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/events/ChangeUserNameEvent.java @@ -0,0 +1,14 @@ +package de.fd.fh.server.user.events; + +import de.fd.fh.server.user.UserId; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public class ChangeUserNameEvent +{ + private final UserId userId; + + private final String newName; +} \ No newline at end of file diff --git a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java index 82fbe76..a41e949 100644 --- a/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java +++ b/fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java @@ -1,13 +1,15 @@ package de.fd.fh.server.user.web; +import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.RequiredArgsConstructor; +import lombok.NoArgsConstructor; -@RequiredArgsConstructor +@NoArgsConstructor +@AllArgsConstructor @Getter public class ChangeUserRequest { - private final String name; + private String name; - private final String password; + private String password; } diff --git a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java index 1c3bcbf..357ef0e 100644 --- a/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java +++ b/fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserServiceTest.java @@ -9,8 +9,10 @@ import org.mockito.ArgumentCaptor; import java.util.Observable; import java.util.Observer; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.then; import static org.mockito.Mockito.*; class UserServiceTest implements Observer @@ -29,19 +31,45 @@ class UserServiceTest implements Observer final User user = User.of("testName"); final ChangeUserRequest request = - new ChangeUserRequest("testName", "newPassword"); + new ChangeUserRequest(null, "newPassword"); final UserRepository repository = mock(UserRepository.class); when(repository.findUserById(any(UserId.class))) .thenReturn(user); - final UserService service = new UserService(repository); + final de.fd.fh.server.user.UserService service = new de.fd.fh.server.user.UserService(repository); + service.addObserver(this); + + service.changePlayer(UserId.of("12345"), request); + + assertNotNull(event); + } + + @Test + void given_storedUser_when_changeUserName_should_renameAndFireEvent() + { + final User user = + User.of("testName"); + final ChangeUserRequest request = + new ChangeUserRequest("newTestName", null); + final UserRepository repository = mock(UserRepository.class); + when(repository.findUserById(any(UserId.class))) + .thenReturn(user); + when(repository.findUserByName(any())) + .thenReturn(null); + + final de.fd.fh.server.user.UserService service = new de.fd.fh.server.user.UserService(repository); service.addObserver(this); final ArgumentCaptor captor = ArgumentCaptor.forClass(User.class); service.changePlayer(UserId.of("12345"), request); - verify(repository).save(captor.capture()); + then(repository).should().findUserById(any(UserId.class)); + then(repository).should().findUserByName(any()); + verify(repository).save(captor.capture()); + then(repository).should().save(any()); + then(repository).shouldHaveNoMoreInteractions(); assertNotNull(captor.getValue(), "Should be saved"); + assertEquals(captor.getValue().getName(), "newTestName", "User should have new name"); assertNotNull(event); } @@ -68,7 +96,7 @@ class UserServiceTest implements Observer when(repository.findUserById(any(UserId.class))) .thenReturn(user); - final UserRequest result = new UserService(repository).getSmallPlayer(UserId.of("12345")); + final UserRequest result = new de.fd.fh.server.user.UserService(repository).getSmallPlayer(UserId.of("12345")); assertNotNull(result); assertEquals("12345", result.getId(), "Wrong UserId");