Skip to content

Commit a427643

Browse files
committed
Add unit tests for setUserDetailsMapper method
Signed-off-by: dae won <[email protected]>
1 parent ab9524a commit a427643

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

core/src/main/java/org/springframework/security/provisioning/JdbcUserDetailsManager.java

+11
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,17 @@ public JdbcUserDetailsManager(DataSource dataSource) {
166166
setDataSource(dataSource);
167167
}
168168

169+
/**
170+
* Sets the {@code RowMapper} to convert each user result row into a
171+
* {@link UserDetails} object.
172+
*
173+
* The default mapper expects columns with names like 'username', 'password',
174+
* 'enabled', etc., and maps them directly to the corresponding UserDetails
175+
* properties.
176+
* @param mapper the {@code RowMapper} to use for mapping rows in the database, must
177+
* not be null
178+
* @since 6.5
179+
*/
169180
public void setUserDetailsMapper(RowMapper<UserDetails> mapper) {
170181
Assert.notNull(mapper, "userDetailsMapper cannot be null");
171182
this.userDetailsMapper = mapper;

core/src/test/java/org/springframework/security/provisioning/JdbcUserDetailsManagerTests.java

+23
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.security.provisioning;
1818

19+
import java.sql.SQLException;
1920
import java.util.Collections;
2021
import java.util.HashMap;
2122
import java.util.List;
@@ -28,6 +29,7 @@
2829
import org.junit.jupiter.api.Test;
2930

3031
import org.springframework.jdbc.core.JdbcTemplate;
32+
import org.springframework.jdbc.core.RowMapper;
3133
import org.springframework.security.PopulatedDatabase;
3234
import org.springframework.security.TestDataSource;
3335
import org.springframework.security.access.AccessDeniedException;
@@ -48,14 +50,17 @@
4850
import static org.assertj.core.api.Assertions.assertThat;
4951
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
5052
import static org.mockito.ArgumentMatchers.any;
53+
import static org.mockito.ArgumentMatchers.anyInt;
5154
import static org.mockito.BDDMockito.given;
5255
import static org.mockito.Mockito.mock;
5356
import static org.mockito.Mockito.verify;
57+
import static org.mockito.Mockito.when;
5458

5559
/**
5660
* Tests for {@link JdbcUserDetailsManager}
5761
*
5862
* @author Luke Taylor
63+
* @author dae won
5964
*/
6065
public class JdbcUserDetailsManagerTests {
6166

@@ -365,6 +370,24 @@ public void createNewAuthenticationUsesNullPasswordToKeepPassordsSave() {
365370
assertThat(updatedAuth.getCredentials()).isNull();
366371
}
367372

373+
@Test
374+
public void setUserDetailsMapperWithNullMapperThrowsException() {
375+
assertThatExceptionOfType(IllegalArgumentException.class)
376+
.isThrownBy(() -> this.manager.setUserDetailsMapper(null))
377+
.withMessage("userDetailsMapper cannot be null");
378+
}
379+
380+
@Test
381+
public void setUserDetailsMapperWithMockMapper() throws SQLException {
382+
RowMapper<UserDetails> mockMapper = mock(RowMapper.class);
383+
when(mockMapper.mapRow(any(), anyInt())).thenReturn(joe);
384+
this.manager.setUserDetailsMapper(mockMapper);
385+
insertJoe();
386+
UserDetails newJoe = this.manager.loadUserByUsername("joe");
387+
assertThat(joe).isEqualTo(newJoe);
388+
verify(mockMapper).mapRow(any(), anyInt());
389+
}
390+
368391
private Authentication authenticateJoe() {
369392
UsernamePasswordAuthenticationToken auth = UsernamePasswordAuthenticationToken.authenticated("joe", "password",
370393
joe.getAuthorities());

0 commit comments

Comments
 (0)