package de.fd.fh.server.user; import de.fd.fh.server.user.web.ChangeUserRequest; import de.fd.fh.server.user.web.UserRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import java.util.Observable; import java.util.Observer; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; class UserServiceTest implements Observer { private Object event; @BeforeEach void before() { event = null; } @Test void given_storedUser_when_changePassword_should_changePassword() { final User user = User.of("testName"); final ChangeUserRequest request = new ChangeUserRequest("testName", "newPassword"); final UserRepository repository = mock(UserRepository.class); when(repository.findUserById(any(UserId.class))) .thenReturn(user); final UserService service = new UserService(repository); service.addObserver(this); final ArgumentCaptor captor = ArgumentCaptor.forClass(User.class); service.changePlayer(UserId.of("12345"), request); verify(repository).save(captor.capture()); assertNotNull(captor.getValue(), "Should be saved"); assertNotNull(event); } @Test void given_storedUser_when_getPlayer_should_returnPlayer() { final User user = User.of("testName"); final UserRepository repository = mock(UserRepository.class); when(repository.findUserById(any(UserId.class))) .thenReturn(user); final User result = new UserService(repository).getPlayer(UserId.of("12345")); assertNotNull(result); } @Test void given_storedUser_when_getSmallPlayer_should_returnSmallPlayer() { final User user = new User(UserId.of("12345"), "testName"); final UserRepository repository = mock(UserRepository.class); when(repository.findUserById(any(UserId.class))) .thenReturn(user); final UserRequest result = new UserService(repository).getSmallPlayer(UserId.of("12345")); assertNotNull(result); assertEquals("12345", result.getId(), "Wrong UserId"); assertEquals("testName", result.getName(), "Wrong Name"); } @Override public void update(Observable o, Object arg) { event = arg; } }