@Test public void updateNewPassword() throws Exception { Account account = service.createViaEmail("abc99", "bar@gmail.com", "pppwww", lc); Mockito.reset(mockMailAgent); AccountAuth accountAuth = service.updateNewPassword(account, "pppwww", "123456", lc); verify(mockMailAgent).sendPasswordWasReset(eq(lc), eq(account)); assertNotNull(accountAuth); assertTrue(service.authenticate("abc99", "123456").isPresent()); }
@Override public AccountAuth updateNewPassword(Authorization authorization, String oldPassword, String newPassword, Locale locale) throws OldPasswordNotMatchException { return accountDao.strongVerifyAccount(authorization) .filter(account -> passwordEncoder.matches(oldPassword, account.getPasswordHash())) .flatMap(accountWithOldPassword -> { updatePassword(authorization.authenticatedId(), newPassword, locale); return accountDao.findById(authorization.authenticatedId()); }) .map(this::createAccountAuth) .orElseThrow(OldPasswordNotMatchException::new); }
AccountServiceImpl implements AccountService { @Override public AccountAuth updateNewPassword(Authorization authorization, String oldPassword, String newPassword, Locale locale) throws OldPasswordNotMatchException { return accountDao.strongVerifyAccount(authorization) .filter(account -> passwordEncoder.matches(oldPassword, account.getPasswordHash())) .flatMap(accountWithOldPassword -> { updatePassword(authorization.authenticatedId(), newPassword, locale); return accountDao.findById(authorization.authenticatedId()); }) .map(this::createAccountAuth) .orElseThrow(OldPasswordNotMatchException::new); } }
AccountServiceImpl implements AccountService { @Override public AccountAuth updateNewPassword(Authorization authorization, String oldPassword, String newPassword, Locale locale) throws OldPasswordNotMatchException { return accountDao.strongVerifyAccount(authorization) .filter(account -> passwordEncoder.matches(oldPassword, account.getPasswordHash())) .flatMap(accountWithOldPassword -> { updatePassword(authorization.authenticatedId(), newPassword, locale); return accountDao.findById(authorization.authenticatedId()); }) .map(this::createAccountAuth) .orElseThrow(OldPasswordNotMatchException::new); }  }
AccountServiceImpl implements AccountService { @Override public AccountAuth updateNewPassword(Authorization authorization, String oldPassword, String newPassword, Locale locale) throws OldPasswordNotMatchException { return accountDao.strongVerifyAccount(authorization) .filter(account -> passwordEncoder.matches(oldPassword, account.getPasswordHash())) .flatMap(accountWithOldPassword -> { updatePassword(authorization.authenticatedId(), newPassword, locale); return accountDao.findById(authorization.authenticatedId()); }) .map(this::createAccountAuth) .orElseThrow(OldPasswordNotMatchException::new); }  @Override Account createViaEmail(String username, String email, String password, Locale locale); @Override Optional<Account> findMe(Authorization authorization); @Override Optional<AccountAuth> authenticate(String username, String password); @Override Optional<AccountAccessToken> strongVerifyAccessToken(String rawAccessToken); @Override AccountAuth extendsAccessToken(AccountAccessToken accessToken); @Override boolean isUsernameAvailable(String username); @Override boolean isEmailAvailable(String email); @Override void updateAuthorities(Authorization authorization, EnumSet<Authority> authorities); @Override boolean activate(String inputOnceToken); @Override void resendActivation(Authorization authorization, Locale locale); @Override void sendResetPassword(String username, String email, Locale locale); @Override Optional<AccountOnceToken> findValidResetPasswordToken(String inputOnceToken); @Override void updatePasswordWithOnceToken(String accountOnceToken, String password, Locale locale); @Override AccountAuth updateNewPassword(Authorization authorization,
      String oldPassword,
      String newPassword,
      Locale locale); @Override Optional<AccountAccessToken> tryDecodeAccessToken(String rawAccountAccessToken); @Override AccountStats loadAccountStats(String username); @Override Account loadAccount(String username); @Override String updateDescription(Authorization authorization, String description); @Override String loadEditableDescription(Authorization authorization); @Override void complaintEmail(List<String> emails); @Override void muteEmail(List<String> emails); @Override AccountOnceToken createOauthDirectAuthorizeToken(Authorization authorization); @Override Optional<Account> oauthDirectAuthorize(String inputOnceToken); }
AccountServiceImpl implements AccountService { @Override public AccountAuth updateNewPassword(Authorization authorization, String oldPassword, String newPassword, Locale locale) throws OldPasswordNotMatchException { return accountDao.strongVerifyAccount(authorization) .filter(account -> passwordEncoder.matches(oldPassword, account.getPasswordHash())) .flatMap(accountWithOldPassword -> { updatePassword(authorization.authenticatedId(), newPassword, locale); return accountDao.findById(authorization.authenticatedId()); }) .map(this::createAccountAuth) .orElseThrow(OldPasswordNotMatchException::new); }  @Override Account createViaEmail(String username, String email, String password, Locale locale); @Override Optional<Account> findMe(Authorization authorization); @Override Optional<AccountAuth> authenticate(String username, String password); @Override Optional<AccountAccessToken> strongVerifyAccessToken(String rawAccessToken); @Override AccountAuth extendsAccessToken(AccountAccessToken accessToken); @Override boolean isUsernameAvailable(String username); @Override boolean isEmailAvailable(String email); @Override void updateAuthorities(Authorization authorization, EnumSet<Authority> authorities); @Override boolean activate(String inputOnceToken); @Override void resendActivation(Authorization authorization, Locale locale); @Override void sendResetPassword(String username, String email, Locale locale); @Override Optional<AccountOnceToken> findValidResetPasswordToken(String inputOnceToken); @Override void updatePasswordWithOnceToken(String accountOnceToken, String password, Locale locale); @Override AccountAuth updateNewPassword(Authorization authorization,
      String oldPassword,
      String newPassword,
      Locale locale); @Override Optional<AccountAccessToken> tryDecodeAccessToken(String rawAccountAccessToken); @Override AccountStats loadAccountStats(String username); @Override Account loadAccount(String username); @Override String updateDescription(Authorization authorization, String description); @Override String loadEditableDescription(Authorization authorization); @Override void complaintEmail(List<String> emails); @Override void muteEmail(List<String> emails); @Override AccountOnceToken createOauthDirectAuthorizeToken(Authorization authorization); @Override Optional<Account> oauthDirectAuthorize(String inputOnceToken);  }