|
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