|
40 | 40 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; |
41 | 41 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; |
42 | 42 | import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; |
| 43 | +import org.springframework.security.crypto.factory.PasswordEncoderFactories; |
43 | 44 | import org.springframework.security.crypto.password.NoOpPasswordEncoder; |
44 | 45 | import org.springframework.security.crypto.password.PasswordEncoder; |
45 | 46 | import org.springframework.security.jackson2.SecurityJackson2Modules; |
|
57 | 58 | import static org.mockito.ArgumentMatchers.any; |
58 | 59 | import static org.mockito.ArgumentMatchers.anyInt; |
59 | 60 | import static org.mockito.ArgumentMatchers.anyString; |
| 61 | +import static org.mockito.ArgumentMatchers.eq; |
60 | 62 | import static org.mockito.Mockito.spy; |
61 | 63 | import static org.mockito.Mockito.verify; |
62 | 64 | import static org.mockito.Mockito.verifyNoInteractions; |
@@ -196,6 +198,29 @@ public void saveLoadRegisteredClientWhenCustomStrategiesSetThenCalled() throws E |
196 | 198 | verify(this.passwordEncoder).encode(anyString()); |
197 | 199 | } |
198 | 200 |
|
| 201 | +// gh-389 |
| 202 | +@Test |
| 203 | +public void saveWhenClientSecretAlreadyEncodedThenNotUpdated() { |
| 204 | +PasswordEncoder passwordEncoder = spy(PasswordEncoderFactories.createDelegatingPasswordEncoder()); |
| 205 | +RegisteredClientParametersMapper registeredClientParametersMapper = new RegisteredClientParametersMapper(); |
| 206 | +registeredClientParametersMapper.setPasswordEncoder(passwordEncoder); |
| 207 | +this.registeredClientRepository.setRegisteredClientParametersMapper(registeredClientParametersMapper); |
| 208 | + |
| 209 | +RegisteredClient originalRegisteredClient = TestRegisteredClients.registeredClient().build(); |
| 210 | +this.registeredClientRepository.save(originalRegisteredClient); |
| 211 | +verify(passwordEncoder).encode(eq(originalRegisteredClient.getClientSecret())); |
| 212 | + |
| 213 | +RegisteredClient registeredClient = this.registeredClientRepository.findById(originalRegisteredClient.getId()); |
| 214 | +assertThat(registeredClient).isNotNull(); |
| 215 | +assertThat(passwordEncoder.matches(originalRegisteredClient.getClientSecret(), registeredClient.getClientSecret())).isTrue(); |
| 216 | + |
| 217 | +RegisteredClient updatedRegisteredClient = RegisteredClient.from(registeredClient).clientSecret("updated-client-secret").build(); |
| 218 | +this.registeredClientRepository.save(updatedRegisteredClient); |
| 219 | +updatedRegisteredClient = this.registeredClientRepository.findById(originalRegisteredClient.getId()); |
| 220 | +assertThat(updatedRegisteredClient).isNotNull(); |
| 221 | +assertThat(passwordEncoder.matches(originalRegisteredClient.getClientSecret(), updatedRegisteredClient.getClientSecret())).isTrue(); |
| 222 | +} |
| 223 | + |
199 | 224 | @Test |
200 | 225 | public void findByIdWhenIdNullThenThrowIllegalArgumentException() { |
201 | 226 | // @formatter:off |
|
0 commit comments