Commit 2ef29528 authored by Tomas Madeja's avatar Tomas Madeja
Browse files

feat: create new team manager

parent 67cdae5e
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@ public interface UserAuthService {
    Optional<User> authenticateUser(String username, String password);

    /**
     * Create new League Manager
     * Create new League Manager account
     * @param username username
     * @param password plaintext password
     * @return User if exists
@@ -24,4 +24,14 @@ public interface UserAuthService {
     * @throws UsernameTakenException if username is already taken by another user
     */
    User createLeagueManager(String username, String password);

    /**
     * Create new Team Manager account
     * @param username username
     * @param password plaintext password
     * @return User if exists
     *
     * @throws UsernameTakenException if username is already taken by another user
     */
    User createTeamManager(String username, String password);
}
+21 −7
Original line number Diff line number Diff line
@@ -44,13 +44,33 @@ public class UserAuthServiceImpl implements UserAuthService{
    }

    public User createLeagueManager(String username, String password) {
        return createUser(username, password, Roles.LEAGUE_MANAGER);
    }

    public User createTeamManager(String username, String password) {
        return createUser(username, password, Roles.TEAM_MANAGER);
    }

    private void requireNonEmpty(String argument, String paramName) {
        if (argument.isEmpty()) {
            throw new IllegalArgumentException(paramName);
        }
    }

    private User createUser(String username, String password, Roles role) {
        Objects.requireNonNull(username);
        Objects.requireNonNull(password);
        Objects.requireNonNull(role);
        requireNonEmpty(username, "username");
        requireNonEmpty(password, "password");

        // first get password, to introduce time cost of username lookup
        String encodedPassword = argonEncoder.encodePassword(password);

        var user = new User();
        user.setUsername(username);
        user.setPassword(encodedPassword);
        user.setRole(getRoleString(Roles.LEAGUE_MANAGER));
        user.setRole(getRoleString(role));
        try {
            userAuthDao.create(user);
        } catch (EntityExistsException e) {
@@ -59,12 +79,6 @@ public class UserAuthServiceImpl implements UserAuthService{
        return user;
    }

    private void requireNonEmpty(String argument, String paramName) {
        if (argument.isEmpty()) {
            throw new IllegalArgumentException(paramName);
        }
    }

    private String getRoleString(Roles role) {
        return role.name().toLowerCase();
    }
+29 −0
Original line number Diff line number Diff line
@@ -118,6 +118,35 @@ class UserAuthServiceImplTest {
                .isThrownBy(() -> authService.createLeagueManager(NEW_USERNAME, NEW_PASSWORD));
    }

    @Test
    public void createNewTeamManager() {
        ArgumentCaptor<User> valueCapture = ArgumentCaptor.forClass(User.class);
        doAnswer(
                (invocation) -> users.add(invocation.getArgument(0))
        ).when(userAuthDaoMock).create(valueCapture.capture());

        var user = authService.createTeamManager(NEW_USERNAME, NEW_PASSWORD);
        softly.assertThat(user).isEqualTo(valueCapture.getValue());
        softly.assertThat(user.getRole()).isEqualTo(roleToString(Roles.TEAM_MANAGER));

        var authenticatedUser = authService.authenticateUser(NEW_USERNAME, NEW_PASSWORD);
        assertThat(authenticatedUser).hasValue(user);
        assertThat(authenticatedUser.get().getRole()).isEqualTo(roleToString(Roles.TEAM_MANAGER));
    }

    @Test
    public void createNewTeamManagerUsernameExists() {
        ArgumentCaptor<User> valueCapture = ArgumentCaptor.forClass(User.class);
        doAnswer(
                (invocation) -> {
                    throw new EntityExistsException();
                }
        ).when(userAuthDaoMock).create(valueCapture.capture());

        assertThatExceptionOfType(UsernameTakenException.class)
                .isThrownBy(() -> authService.createTeamManager(NEW_USERNAME, NEW_PASSWORD));
    }

    private static String roleToString(Roles role) {
        return role.name().toLowerCase();
    }