add valid account annotation

- add AccountValidator
- add ValidAccount
This commit is contained in:
2025-02-03 22:05:51 +01:00
parent a762a05c11
commit ddc701ea51
3 changed files with 143 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
package ltd.hlaeja.validator
import jakarta.validation.ConstraintValidator
import jakarta.validation.ConstraintValidatorContext
import ltd.hlaeja.library.accountRegistry.Account
class AccountValidator : ConstraintValidator<ValidAccount, Any> {
override fun isValid(value: Any?, context: ConstraintValidatorContext): Boolean {
return when (value) {
is Account.Request -> value.validate()
else -> true // Default to valid if the type is not a list
}
}
private fun Account.Request.validate(): Boolean = username.isNotBlank()
&& password?.isNotBlank() ?: true
&& roles.isNotEmpty()
}

View File

@@ -0,0 +1,15 @@
package ltd.hlaeja.validator
import jakarta.validation.Constraint
import jakarta.validation.Payload
import kotlin.annotation.AnnotationRetention.RUNTIME
import kotlin.reflect.KClass
@Constraint(validatedBy = [AccountValidator::class])
@Retention(RUNTIME)
@Target(AnnotationTarget.VALUE_PARAMETER)
annotation class ValidAccount(
val message: String = "Roles must not be empty",
val groups: Array<KClass<out Any>> = [],
val payload: Array<KClass<out Payload>> = []
)

View File

@@ -0,0 +1,109 @@
package ltd.hlaeja.validator
import io.mockk.mockk
import ltd.hlaeja.library.accountRegistry.Account
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
class AccountValidatorTest {
val validator = AccountValidator()
@Test
fun `validate account - success all values`() {
// given
val request = Account.Request(
username = "validUser",
password = "strongPassword",
enabled = true,
roles = listOf("USER", "TEST")
)
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isTrue
}
@Test
fun `validate account - success password null`() {
// given
val request = Account.Request(
username = "validUser",
password = null,
enabled = true,
roles = listOf("USER")
)
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isTrue
}
@Test
fun `validate account - failed username empty`() {
// given
val request = Account.Request(
username = "",
password = "strongPassword",
enabled = true,
roles = listOf("USER")
)
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isFalse
}
@Test
fun `validate account - failed password empty`() {
// given
val request = Account.Request(
username = "validUser",
password = "",
enabled = true,
roles = listOf("USER")
)
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isFalse
}
@Test
fun `validate account - failed roles empty`() {
// given
val request = Account.Request(
username = "validUser",
password = "",
enabled = true,
roles = emptyList()
)
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isFalse
}
@Test
fun `validate account - success wrong data type`() {
// given
val request = "A string"
// when
val result = validator.isValid(request, mockk())
// then
assertThat(result).isTrue
}
}