From 74b527de1d2fea85ab3f5f720d29b846426f1f91 Mon Sep 17 00:00:00 2001 From: Fabrice Lecomte Date: Wed, 14 Jul 2021 18:13:55 +0200 Subject: [PATCH] deniedResponses return List instead of List --- .../io/github/flecomte/AccessKontrol.kt | 25 +++++++++++-------- .../io/github/flecomte/AccessKontrolTest.kt | 8 ++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/kotlin/io/github/flecomte/AccessKontrol.kt b/src/main/kotlin/io/github/flecomte/AccessKontrol.kt index 490916c..f279244 100644 --- a/src/main/kotlin/io/github/flecomte/AccessKontrol.kt +++ b/src/main/kotlin/io/github/flecomte/AccessKontrol.kt @@ -62,8 +62,8 @@ fun AccessResponses.assert() { throw AccessDeniedException(this) } } -val AccessResponses.grantedResponses get(): AccessResponses = this.filterIsInstance() -val AccessResponses.deniedResponses get(): AccessResponses = this.filterIsInstance() +val AccessResponses.grantedResponses get(): List = this.filterIsInstance() +val AccessResponses.deniedResponses get(): List = this.filterIsInstance() /** * Convert responses as boolean @@ -78,6 +78,9 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac */ fun first(): AccessResponse = accessResponses.deniedResponses.first() + val deniedResponses: List + get() = this.accessResponses.deniedResponses + /** * Check if the error code is present into the responses */ @@ -97,12 +100,12 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac */ fun getMessages(): List = accessResponses .deniedResponses - .map { it.message!! } + .map { it.message } /** * Get the first message */ - fun getFirstMessage(): String? = accessResponses + fun getFirstMessage(): String = accessResponses .deniedResponses .first() .message @@ -116,8 +119,8 @@ class AccessDeniedException(val accessResponses: AccessResponses) : Throwable(ac sealed class AccessResponse( val decision: AccessDecision, val accessControl: AccessKontrol, - val message: String?, - val code: String? + open val message: String?, + open val code: String? ) { /** * Convert response as boolean @@ -142,8 +145,8 @@ open class GrantedResponse( open class DeniedResponse( accessControl: AccessKontrol, - message: String, - code: String + override val message: String, + override val code: String ) : AccessResponse(AccessDecision.DENIED, accessControl, message, code) class GrantedResponses( @@ -159,7 +162,7 @@ class DeniedResponses( accessResponses: List ) : AccessResponses by accessResponses, DeniedResponse( - accessResponses.deniedResponses.first().accessControl, - accessResponses.deniedResponses.firstOrNull()?.message ?: error("DeniedResponses cannot be empty"), - accessResponses.deniedResponses.firstOrNull()?.code ?: error("DeniedResponses cannot be empty") + accessResponses.deniedResponses.firstOrNull()?.accessControl ?: error("DeniedResponses cannot be empty"), + accessResponses.deniedResponses.first().message, + accessResponses.deniedResponses.first().code ) diff --git a/src/test/kotlin/io/github/flecomte/AccessKontrolTest.kt b/src/test/kotlin/io/github/flecomte/AccessKontrolTest.kt index c9c7b32..bcd1668 100644 --- a/src/test/kotlin/io/github/flecomte/AccessKontrolTest.kt +++ b/src/test/kotlin/io/github/flecomte/AccessKontrolTest.kt @@ -98,6 +98,7 @@ class AccessKontrolTest { assertEquals(null, getErrorCode("notExists")?.code) assertEquals("KO2", getMessages().last()) assertEquals("KO", getFirstMessage()) + assertEquals("ko", deniedResponses.firstOrNull()?.code) } } @@ -126,6 +127,13 @@ class AccessKontrolTest { .run { assertFalse(decision.toBoolean()) } + + AccessControlSample() + .canView(listOf(MyObject("denied"), MyObject("granted")), User("")) + .getFirstDecisionResponse() + .run { + assertFalse(decision.toBoolean()) + } } @Test