@Test
 public void findOne_usesDAO() {
   when(userRepository.findOne(USER_A_NAME)).thenReturn(userA);
   User user = communityServiceImpl.findOne(USER_A_NAME);
   assertEquals(userA, user);
   verify(userRepository, times(1)).findOne(USER_A_NAME);
 }
 @Test
 public void findAll_usesDAO() {
   when(userRepository.findAll(userPageable)).thenReturn(userResultsPage);
   Page<User> userPage = communityServiceImpl.findAll(userPageable);
   assertEquals(userResultsPage, userPage);
   verify(userRepository, times(1)).findAll(userPageable);
 }
 @Test
 public void createUser_usesDAO() {
   when(userRepository.save(userA)).thenReturn(userA);
   User user = communityServiceImpl.createUser(userA, Role.ROLE_BASIC);
   assertEquals(userA, user);
   verify(userRepository, times(1)).save(userA);
 }
 @Test
 public void identifyUser_usesDAO() {
   when(userRepository.findOne(USER_A_NAME)).thenReturn(userAStored);
   when(passwordEncoder.matches(USER_A_PASSWORD, USER_A_PASSWORD_ENCODED)).thenReturn(true);
   communityServiceImpl.identifyUser(userA);
   verify(userRepository, times(1)).findOne(USER_A_NAME);
 }
 @Test
 public void getUserByEmail_usesDAO() {
   when(userRepository.findByEmail(USER_A_EMAIL)).thenReturn(Sets.newHashSet(userAStored));
   User user = communityServiceImpl.getUserByEmail(userA.getEmail());
   verify(userRepository, times(1)).findByEmail(USER_A_EMAIL);
   assertEquals(user, userAStored);
 }
 @Test(expected = ConstraintViolationException.class)
 public void createUser_byRoles_throwsForConflict() {
   when(userRepository.save(userA)).thenReturn(userA);
   when(userRepository.findOne(USER_A_NAME))
       .thenThrow(new ConstraintViolationException("", null, null));
   communityServiceImpl.createUser(userA, Role.ROLE_BASIC);
 }
  @Test
  public void signInUser_authTokenSetInContext() {
    ArgumentCaptor<Authentication> authArgumentCaptor =
        ArgumentCaptor.forClass(Authentication.class);
    communityServiceImpl.signInUser(userA);
    verify(securityContext, times(1)).setAuthentication(authArgumentCaptor.capture());
    assertEquals(USER_A_NAME, authArgumentCaptor.getValue().getName());
    assertTrue(
        authArgumentCaptor
            .getValue()
            .getAuthorities()
            .stream()
            .filter(a -> a.getAuthority().equals(Role.BASIC.toString()))
            .findAny()
            .isPresent());

    assertTrue(
        authArgumentCaptor
            .getValue()
            .getAuthorities()
            .stream()
            .filter(a -> a.getAuthority().equals(Role.OAUTH2.toString()))
            .findAny()
            .isPresent());
  }
 @Test
 public void alterUserBalance_sameCurrency() {
   ArgumentCaptor<User> authArgumentCaptor = ArgumentCaptor.forClass(User.class);
   communityServiceImpl.alterUserBalance(600, stockQuote, userA, UserActivityType.BUY, null);
   verify(userRepository, times(1)).save(authArgumentCaptor.capture());
   assertEquals(0, authArgumentCaptor.getValue().getBalance().intValue());
 }
 @Test
 public void getLeaders_setFilteredAttributes() {
   when(userRepository.findAll(userPageable)).thenReturn(userResultsPage);
   Page<UserDTO> page = communityServiceImpl.getLeaders(userPageable);
   assertDTOWithHiddenValues(page.getContent().get(0), userA);
   assertDTOWithHiddenValues(page.getContent().get(1), userB);
 }
 @Test(expected = IllegalArgumentException.class)
 public void identifyUser_throwsIllegalArgumentException_002() {
   when(userRepository.findOne(USER_A_NAME)).thenReturn(userAStored);
   when(passwordEncoder.matches(USER_A_PASSWORD, USER_A_PASSWORD_ENCODED)).thenReturn(false);
   userA.setPassword("");
   communityServiceImpl.identifyUser(userA);
 }
  @Test(expected = BadCredentialsException.class)
  public void updateUser_throwsUnAuthorized() {
    when(userRepository.save(userA)).thenReturn(userA);
    when(securityContext.getAuthentication()).thenReturn(authentication);
    when(authentication.getPrincipal()).thenReturn(userB);

    communityServiceImpl.updateUser(userA);
  }
 @Test
 public void alterUserBalance_differentCurrency() {
   ArgumentCaptor<User> authArgumentCaptor = ArgumentCaptor.forClass(User.class);
   communityServiceImpl.alterUserBalance(
       485, stockQuote2, userA, UserActivityType.BUY, currencyExchange);
   verify(userRepository, times(1)).save(authArgumentCaptor.capture());
   assertEquals(28, authArgumentCaptor.getValue().getBalance().intValue());
 }
 @Test(expected = ConstraintViolationException.class)
 public void createUserWithBalance_throwsForConflict() {
   when(userRepository.save(userA)).thenReturn(userA);
   when(userRepository.findOne(USER_A_NAME))
       .thenThrow(new ConstraintViolationException("", null, null));
   Role[] roles = {Role.ROLE_BASIC, Role.ROLE_OAUTH2};
   BigDecimal balance = new BigDecimal(123);
   communityServiceImpl.createUserWithBalance(userA, roles, balance);
 }
  @Test
  public void getPublicActivity() {
    when(actionRepository.findAll(actionPageable)).thenReturn(actionResultsPage);

    Page<UserActivityDTO> methodResults = communityServiceImpl.getPublicActivity(actionPageable);
    assertEquals(actionList.size(), methodResults.getTotalElements());
    assertEquals(countPublicActivitiesIn(actionList), methodResults.getNumberOfElements());
    verify(actionRepository, times(1)).findAll(actionPageable);
  }
  @Test
  public void registerUser_reusesPasswordAndEncodeIt() {
    when(passwordEncoder.encode(USER_A_PASSWORD)).thenReturn(USER_A_PASSWORD_ENCODED);
    communityServiceImpl.registerUser(userA);
    ArgumentCaptor<User> userArgumentCaptor = ArgumentCaptor.forClass(User.class);

    verify(passwordEncoder, times(1)).encode(USER_A_PASSWORD);
    verify(userRepository, times(1)).save(userArgumentCaptor.capture());
    assertEquals(userArgumentCaptor.getValue().getPassword(), USER_A_PASSWORD_ENCODED);
  }
  @Test(expected = ResourceAccessException.class)
  public void loadUserByUsername_throwsResourceAccessException() {
    when(userRepository.findOne(USER_A_NAME)).thenReturn(null);
    when(securityContext.getAuthentication()).thenReturn(authentication);
    when(authentication.getPrincipal()).thenReturn(null);

    communityServiceImpl.loadUserByUsername(USER_A_NAME);
    verify(securityContext, times(1)).getAuthentication();
    verify(authentication, times(1)).getPrincipal();
  }
  @Test
  public void loadUserByUsername_usesSecurityContext() {
    when(userRepository.findOne(USER_A_NAME)).thenReturn(null);
    when(securityContext.getAuthentication()).thenReturn(authentication);
    when(authentication.getPrincipal()).thenReturn(userA);

    UserDetails result = communityServiceImpl.loadUserByUsername(USER_A_NAME);
    verify(securityContext, times(1)).getAuthentication();
    verify(authentication, times(1)).getPrincipal();
    assertEquals(USER_A_NAME, result.getUsername());
  }
  @Test
  public void updateUser_setsAttributes() {
    when(userRepository.save(userA)).thenReturn(userA);
    when(passwordEncoder.encode(USER_A_PASSWORD)).thenReturn(USER_A_PASSWORD_ENCODED);
    when(securityContext.getAuthentication()).thenReturn(authentication);
    when(authentication.getPrincipal()).thenReturn(userA);

    User user = communityServiceImpl.updateUser(userA);
    assertEquals(USER_A_PASSWORD_ENCODED, user.getPassword());
    verify(passwordEncoder, times(1)).encode(USER_A_PASSWORD);
  }
 @Test
 public void createUser_setsAttributes() {
   when(userRepository.save(userB)).thenReturn(userB);
   when(passwordEncoder.encode(USER_B_PASSWORD)).thenReturn(USER_B_PASSWORD_ENCODED);
   User user = communityServiceImpl.createUser(userB, Role.ROLE_BASIC);
   assertEquals(1, user.getAuthorities().size());
   assertEquals(Role.ROLE_BASIC.name(), user.getAuthorities().iterator().next().getAuthority());
   assertEquals(1, user.getActions().size());
   assertEquals(UserActivityType.REGISTER, user.getActions().iterator().next().getType());
   assertEquals(USER_B_PASSWORD_ENCODED, user.getPassword());
   verify(passwordEncoder, times(1)).encode(USER_B_PASSWORD);
 }
  @Test
  public void updateUser_usesDAO_001() {
    when(userRepository.save(userA)).thenReturn(userA);
    when(securityContext.getAuthentication()).thenReturn(authentication);
    when(authentication.getPrincipal()).thenReturn(userA);

    User user = communityServiceImpl.updateUser(userA);
    assertEquals(userA, user);

    verify(userRepository, times(1)).save(userA);
    verify(securityContext, times(1)).getAuthentication();
    verify(authentication, times(1)).getPrincipal();
  }
  @Test
  public void search_usesDAO() {
    Specification<User> searchUserSpec = userSpecifications.idStartsWith(USER_A_NAME);
    userList =
        userList
            .stream()
            .filter(u -> u.getId().startsWith(USER_A_NAME))
            .collect(Collectors.toList());
    userResultsPage = new PageImpl<>(userList, userPageable, userList.size());

    when(userRepository.findAll(searchUserSpec, userPageable)).thenReturn(userResultsPage);
    communityServiceImpl.search(searchUserSpec, userPageable);
    verify(userRepository, times(1)).findAll(searchUserSpec, userPageable);
  }
 @Test
 public void createUser_byRoles_setsAttributes() {
   when(userRepository.save(userB)).thenReturn(userB);
   when(passwordEncoder.encode(USER_B_PASSWORD)).thenReturn(USER_B_PASSWORD_ENCODED);
   Role[] roles = {Role.ROLE_BASIC, Role.ROLE_OAUTH2};
   User user = communityServiceImpl.createUser(userB, roles);
   assertEquals(2, user.getAuthorities().size());
   Iterator<? extends GrantedAuthority> authoritiesIterator = user.getAuthorities().iterator();
   assertEquals(Role.ROLE_BASIC.name(), authoritiesIterator.next().getAuthority());
   assertEquals(Role.ROLE_OAUTH2.name(), authoritiesIterator.next().getAuthority());
   assertEquals(1, user.getActions().size());
   assertEquals(UserActivityType.REGISTER, user.getActions().iterator().next().getType());
   assertEquals(USER_B_PASSWORD_ENCODED, user.getPassword());
   verify(passwordEncoder, times(1)).encode(USER_B_PASSWORD);
 }
  @Test
  public void search_setFilteredAttributes() {
    Specification<User> searchUserSpec = userSpecifications.idStartsWith(USER_A_NAME);
    userList =
        userList
            .stream()
            .filter(u -> u.getId().startsWith(USER_A_NAME))
            .collect(Collectors.toList());
    userResultsPage = new PageImpl<>(userList, userPageable, userList.size());

    when(userRepository.findAll(searchUserSpec, userPageable)).thenReturn(userResultsPage);
    Page<UserDTO> page = communityServiceImpl.search(searchUserSpec, userPageable);
    assertEquals(1, page.getContent().size());
    assertDTOWithHiddenValues(page.getContent().get(0), userA);
  }
  @Test
  public void registerUser_generatesPasswordAndEncodesIt() {
    when(communityServiceHelper.generatePassword()).thenReturn("newlyGeneratedPassword");
    when(passwordEncoder.encode("newlyGeneratedPassword"))
        .thenReturn("newlyGeneratedPasswordEncoded");
    ArgumentCaptor<User> userArgumentCaptor = ArgumentCaptor.forClass(User.class);

    userA.setPassword(null);
    communityServiceImpl.registerUser(userA);

    verify(userRepository, times(1)).save(userArgumentCaptor.capture());
    verify(passwordEncoder, times(1)).encode("newlyGeneratedPassword");

    String capturedGeneratedPassword = userArgumentCaptor.getValue().getPassword();
    assertEquals("newlyGeneratedPasswordEncoded", capturedGeneratedPassword);
  }
 @Test
 public void createAuthorities() {
   Role[] roles = {Role.ROLE_BASIC, Role.ROLE_OAUTH2};
   Set<Authority> authorities = communityServiceImpl.createAuthorities(roles);
   assertEquals(2, authorities.size());
   assertTrue(
       authorities
           .stream()
           .filter(a -> a.getAuthority().equals(Role.ROLE_BASIC.name()))
           .findAny()
           .isPresent());
   assertTrue(
       authorities
           .stream()
           .filter(a -> a.getAuthority().equals(Role.ROLE_OAUTH2.name()))
           .findAny()
           .isPresent());
 }
 @Test
 public void isAffordableToUser_cant_differentCurrency() {
   boolean canAfford =
       communityServiceImpl.isAffordableToUser(486, stockQuote2, userA, currencyExchange);
   assertFalse(canAfford);
 }
 @Test
 public void isAffordableToUser_cant_sameCurrency() {
   boolean canAfford = communityServiceImpl.isAffordableToUser(601, stockQuote, userA, null);
   assertFalse(canAfford);
 }
 @Test
 public void findByLogin_setsFilteredAttributes() {
   when(userRepository.findOne(USER_A_NAME)).thenReturn(userAStored);
   UserDTO userDTO = communityServiceImpl.findByLogin(USER_A_NAME);
   assertDTOWithHiddenValues(userDTO, userA);
 }
 @Test
 public void registerUser_usesDAO() {
   when(userRepository.save(userA)).thenReturn(userAStored);
   communityServiceImpl.registerUser(userA);
   verify(userRepository, times(1)).save(userA);
 }
 @Test
 public void loadUserByUsername_usesDAO() {
   when(userRepository.findOne(USER_A_NAME)).thenReturn(userAStored);
   communityServiceImpl.loadUserByUsername(USER_A_NAME);
   verify(userRepository, times(1)).findOne(USER_A_NAME);
 }