|
@@ -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);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|