Steffen Nitschke
4 years ago
7 changed files with 255 additions and 0 deletions
-
28fh.fd.ci.server/src/main/java/de/fd/fh/server/access/AccessContextEventListener.java
-
43fh.fd.ci.server/src/main/java/de/fd/fh/server/user/UserContextEventListener.java
-
18fh.fd.ci.server/src/main/java/de/fd/fh/server/user/events/ChangePasswordEvent.java
-
13fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/ChangeUserRequest.java
-
89fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserController.java
-
13fh.fd.ci.server/src/main/java/de/fd/fh/server/user/web/UserRequest.java
-
51fh.fd.ci.server/src/test/java/de/fd/fh/server/user/UserContextEventListenerTest.java
@ -0,0 +1,28 @@ |
|||||
|
package de.fd.fh.server.access; |
||||
|
|
||||
|
import de.fd.fh.server.user.events.ChangePasswordEvent; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
|
||||
|
import java.util.Observable; |
||||
|
import java.util.Observer; |
||||
|
|
||||
|
@RequiredArgsConstructor |
||||
|
public class AccessContextEventListener implements Observer |
||||
|
{ |
||||
|
private final AccessRepository accessRepository; |
||||
|
|
||||
|
@Override |
||||
|
public void update(Observable observable, Object o) |
||||
|
{ |
||||
|
if(o instanceof ChangePasswordEvent) |
||||
|
{ |
||||
|
final ChangePasswordEvent event = (ChangePasswordEvent) o; |
||||
|
|
||||
|
final Access access = accessRepository.findByUserId(event.getUserId()); |
||||
|
|
||||
|
access.updatePassword(event.getNewPassword()); |
||||
|
|
||||
|
accessRepository.save(access); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
package de.fd.fh.server.user; |
||||
|
|
||||
|
import de.fd.fh.server.access.events.AccountCreatedEvent; |
||||
|
import de.fd.fh.server.access.events.AccountDeletedEvent; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
|
||||
|
import java.util.Observable; |
||||
|
import java.util.Observer; |
||||
|
|
||||
|
@RequiredArgsConstructor |
||||
|
public class UserContextEventListener implements Observer |
||||
|
{ |
||||
|
private final UserRepository userRepository; |
||||
|
|
||||
|
@Override |
||||
|
public void update( |
||||
|
final Observable observable, |
||||
|
final Object event) |
||||
|
{ |
||||
|
System.out.println("UserContextEventListener " + event); |
||||
|
if (event instanceof AccountCreatedEvent) { |
||||
|
handleAccountCreatedEvent((AccountCreatedEvent) event); |
||||
|
} |
||||
|
if (event instanceof AccountDeletedEvent) { |
||||
|
handleAccountDeletedEvent((AccountDeletedEvent) event); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void handleAccountDeletedEvent(final AccountDeletedEvent event) |
||||
|
{ |
||||
|
userRepository.deleteUserById(event.getUserId()); |
||||
|
} |
||||
|
|
||||
|
private void handleAccountCreatedEvent(final AccountCreatedEvent event) |
||||
|
{ |
||||
|
System.out.println("handleAccountCreatedEvent " + event); |
||||
|
final User user = new User(event.getUserId(), event.getName()); |
||||
|
System.out.println("User: " + user); |
||||
|
|
||||
|
userRepository.save(user); |
||||
|
System.out.println("UserId: " + user.getId()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
package de.fd.fh.server.user.events; |
||||
|
|
||||
|
import de.fd.fh.server.user.UserId; |
||||
|
import lombok.Getter; |
||||
|
|
||||
|
@Getter |
||||
|
public class ChangePasswordEvent |
||||
|
{ |
||||
|
private final String newPassword; |
||||
|
|
||||
|
private final UserId userId; |
||||
|
|
||||
|
public ChangePasswordEvent(final UserId userId, final String password) |
||||
|
{ |
||||
|
this.newPassword = password; |
||||
|
this.userId = userId; |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package de.fd.fh.server.user.web; |
||||
|
|
||||
|
import lombok.Getter; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
|
||||
|
@RequiredArgsConstructor |
||||
|
@Getter |
||||
|
public class ChangeUserRequest |
||||
|
{ |
||||
|
private final String name; |
||||
|
|
||||
|
private final String password; |
||||
|
} |
@ -0,0 +1,89 @@ |
|||||
|
package de.fd.fh.server.user.web; |
||||
|
|
||||
|
import com.fasterxml.jackson.databind.ObjectMapper; |
||||
|
import de.fd.fh.server.access.AccessToken; |
||||
|
import de.fd.fh.server.user.User; |
||||
|
import de.fd.fh.server.user.UserId; |
||||
|
import de.fd.fh.server.user.UserService; |
||||
|
|
||||
|
import static spark.Spark.get; |
||||
|
import static spark.Spark.post; |
||||
|
|
||||
|
public class UserController |
||||
|
{ |
||||
|
private ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
|
||||
|
public UserController(final UserService service) |
||||
|
{ |
||||
|
post("/users", |
||||
|
((request, response) -> |
||||
|
{ |
||||
|
final UserId userId = |
||||
|
((AccessToken) request.session() |
||||
|
.attribute("userId")) |
||||
|
.getUserId(); |
||||
|
|
||||
|
final ChangeUserRequest message = objectMapper.readValue(request.body(), |
||||
|
ChangeUserRequest.class); |
||||
|
|
||||
|
final User user = service.changePlayer( |
||||
|
userId, |
||||
|
message); |
||||
|
|
||||
|
if (user == null) |
||||
|
{ |
||||
|
response.status(400); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
response.status(200); |
||||
|
response.type("application/json"); |
||||
|
|
||||
|
return objectMapper.writeValueAsString(user); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
)); |
||||
|
|
||||
|
get("/users", |
||||
|
(request, response) -> |
||||
|
{ |
||||
|
final UserId userId = |
||||
|
((AccessToken) request.session() |
||||
|
.attribute("userId")) |
||||
|
.getUserId(); |
||||
|
|
||||
|
final User user = service.getPlayer(userId); |
||||
|
|
||||
|
if (user == null) |
||||
|
{ |
||||
|
response.status(400); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
response.status(200); |
||||
|
response.type("application/json"); |
||||
|
|
||||
|
return objectMapper.writeValueAsString(user); |
||||
|
} |
||||
|
|
||||
|
return response; |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
get("/users/:user_id", |
||||
|
(request, response) -> |
||||
|
{ |
||||
|
final UserId userId = UserId.of(request.params(":user_id")); |
||||
|
final UserRequest user = service.getSmallPlayer(userId); |
||||
|
|
||||
|
if (user == null) |
||||
|
{ |
||||
|
response.status(404); |
||||
|
} |
||||
|
response.body(objectMapper.writeValueAsString(user)); |
||||
|
return response; |
||||
|
}); |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
package de.fd.fh.server.user.web; |
||||
|
|
||||
|
import lombok.Getter; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
|
||||
|
@RequiredArgsConstructor |
||||
|
@Getter |
||||
|
public class UserRequest |
||||
|
{ |
||||
|
private final String id; |
||||
|
|
||||
|
private final String name; |
||||
|
} |
@ -0,0 +1,51 @@ |
|||||
|
package de.fd.fh.server.user; |
||||
|
|
||||
|
import de.fd.fh.server.access.events.AccountCreatedEvent; |
||||
|
import de.fd.fh.server.access.events.AccountDeletedEvent; |
||||
|
import org.junit.jupiter.api.Test; |
||||
|
import org.mockito.ArgumentCaptor; |
||||
|
|
||||
|
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.mock; |
||||
|
import static org.mockito.Mockito.verify; |
||||
|
|
||||
|
class UserContextEventListenerTest |
||||
|
{ |
||||
|
@Test |
||||
|
void given_accountCreatedEvent_when_accountWasCreated_should_createUser() |
||||
|
{ |
||||
|
final AccountCreatedEvent event = new AccountCreatedEvent("testName", UserId.of("12345")); |
||||
|
final UserRepository repository = mock(UserRepository.class); |
||||
|
|
||||
|
final ArgumentCaptor<User> captor = ArgumentCaptor.forClass(User.class); |
||||
|
|
||||
|
new UserContextEventListener(repository).update(null, event); |
||||
|
verify(repository).save(captor.capture()); |
||||
|
|
||||
|
assertNotNull(captor.getValue()); |
||||
|
assertEquals("testName", captor.getValue().getName(), "Should have the correct name"); |
||||
|
assertEquals("12345", captor.getValue().getId().getIdentifier(), "Should have the correct userId"); |
||||
|
then(repository).should().save(any()); |
||||
|
then(repository).shouldHaveNoMoreInteractions(); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
void given_accountDeletedEvent_when_accountWasDeleted_should_deleteUser() |
||||
|
{ |
||||
|
final AccountDeletedEvent event = new AccountDeletedEvent(UserId.of("12345")); |
||||
|
final UserRepository repository = mock(UserRepository.class); |
||||
|
|
||||
|
final ArgumentCaptor<UserId> captor = ArgumentCaptor.forClass(UserId.class); |
||||
|
|
||||
|
new UserContextEventListener(repository).update(null, event); |
||||
|
verify(repository).deleteUserById(captor.capture()); |
||||
|
|
||||
|
assertNotNull(captor.getValue()); |
||||
|
assertEquals("12345", captor.getValue().getIdentifier(), "No correct userId"); |
||||
|
then(repository).should().deleteUserById(any(UserId.class)); |
||||
|
then(repository).shouldHaveNoMoreInteractions(); |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue