@ -1,5 +1,5 @@
/ *
/ *
* Copyright 2002 - 2022 the original author or authors .
* Copyright 2002 - 2024 the original author or authors .
*
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
* you may not use this file except in compliance with the License .
@ -43,6 +43,8 @@ import static org.mockito.Mockito.verifyNoMoreInteractions;
@ExtendWith ( MockitoExtension . class )
@ExtendWith ( MockitoExtension . class )
public class DelegatingPasswordEncoderTests {
public class DelegatingPasswordEncoderTests {
public static final String NO_PASSWORD_ENCODER = "You have entered a password with no PasswordEncoder. If that is your intent, it should be prefixed with `{noop}`." ;
@Mock
@Mock
private PasswordEncoder bcrypt ;
private PasswordEncoder bcrypt ;
@ -201,7 +203,7 @@ public class DelegatingPasswordEncoderTests {
public void matchesWhenNoClosingPrefixStringThenIllegalArgumentException ( ) {
public void matchesWhenNoClosingPrefixStringThenIllegalArgumentException ( ) {
assertThatIllegalArgumentException ( )
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "{bcrypt" + this . rawPassword ) )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "{bcrypt" + this . rawPassword ) )
. withMessage ( "There is no PasswordEncoder mapped for the id \"null\"" ) ;
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
@ -209,7 +211,7 @@ public class DelegatingPasswordEncoderTests {
public void matchesWhenNoStartingPrefixStringThenFalse ( ) {
public void matchesWhenNoStartingPrefixStringThenFalse ( ) {
assertThatIllegalArgumentException ( )
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "bcrypt}" + this . rawPassword ) )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "bcrypt}" + this . rawPassword ) )
. withMessage ( "There is no PasswordEncoder mapped for the id \"null\"" ) ;
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
@ -217,7 +219,7 @@ public class DelegatingPasswordEncoderTests {
public void matchesWhenNoIdStringThenFalse ( ) {
public void matchesWhenNoIdStringThenFalse ( ) {
assertThatIllegalArgumentException ( )
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "{}" + this . rawPassword ) )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "{}" + this . rawPassword ) )
. withMessage ( "There is no PasswordEncoder mapped for the id \"\"" ) ;
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
@ -226,7 +228,7 @@ public class DelegatingPasswordEncoderTests {
assertThatIllegalArgumentException ( )
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "invalid" + this . bcryptEncodedPassword ) )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( this . rawPassword , "invalid" + this . bcryptEncodedPassword ) )
. isInstanceOf ( IllegalArgumentException . class )
. isInstanceOf ( IllegalArgumentException . class )
. withMessage ( "There is no PasswordEncoder mapped for the id \"null\"" ) ;
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
@ -236,7 +238,7 @@ public class DelegatingPasswordEncoderTests {
DelegatingPasswordEncoder passwordEncoder = new DelegatingPasswordEncoder ( this . bcryptId , this . delegates ) ;
DelegatingPasswordEncoder passwordEncoder = new DelegatingPasswordEncoder ( this . bcryptId , this . delegates ) ;
assertThatIllegalArgumentException ( )
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > passwordEncoder . matches ( this . rawPassword , this . rawPassword ) )
. isThrownBy ( ( ) - > passwordEncoder . matches ( this . rawPassword , this . rawPassword ) )
. withMessage ( "There is no PasswordEncoder mapped for the id \"null\"" ) ;
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
@ -289,4 +291,14 @@ public class DelegatingPasswordEncoderTests {
verifyNoMoreInteractions ( this . bcrypt ) ;
verifyNoMoreInteractions ( this . bcrypt ) ;
}
}
@Test
void matchesShouldThrowIllegalArgumentExceptionWhenNoPasswordEncoderIsMappedForTheId ( ) {
assertThatIllegalArgumentException ( )
. isThrownBy ( ( ) - > this . passwordEncoder . matches ( "rawPassword" , "prefixEncodedPassword" ) )
. isInstanceOf ( IllegalArgumentException . class )
. withMessage ( NO_PASSWORD_ENCODER ) ;
verifyNoMoreInteractions ( this . bcrypt , this . noop ) ;
}
}
}