@Test public void forgotPassword_PublishesResetPasswordRequestEvent() throws Exception { ApplicationEventPublisher publisher = mock(ApplicationEventPublisher.class); Authentication authentication = mock(Authentication.class); uaaResetPasswordService.setApplicationEventPublisher(publisher); SecurityContextHolder.getContext().setAuthentication(authentication); ScimUser user = new ScimUser("user-id-001", "exampleUser", "firstName", "lastName"); user.setPrimaryEmail("user@example.com"); String zoneId = IdentityZoneHolder.get().getId(); when(scimUserProvisioning.query(contains("origin"), eq(zoneId))).thenReturn(Arrays.asList(user)); Timestamp expiresAt = new Timestamp(System.currentTimeMillis()); when(codeStore.generateCode(anyString(), any(Timestamp.class), anyString(), anyString())).thenReturn(new ExpiringCode("code", expiresAt, "user-id-001", null)); uaaResetPasswordService.forgotPassword("exampleUser", "", ""); ArgumentCaptor<ResetPasswordRequestEvent> captor = ArgumentCaptor.forClass(ResetPasswordRequestEvent.class); verify(publisher).publishEvent(captor.capture()); ResetPasswordRequestEvent event = captor.getValue(); assertThat(event.getSource(), equalTo("exampleUser")); assertThat(event.getCode(), equalTo("code")); assertThat(event.getEmail(), equalTo("user@example.com")); assertThat(event.getAuthentication(), sameInstance(authentication)); }