@@ -2,6 +2,7 @@ package no.liflig.userroles.administration
22
33import io.kotest.matchers.booleans.shouldBeFalse
44import io.kotest.matchers.booleans.shouldBeTrue
5+ import io.kotest.matchers.collections.shouldBeEmpty
56import no.liflig.userroles.testutils.DEFAULT_TEST_USERNAME
67import no.liflig.userroles.testutils.createRole
78import no.liflig.userroles.testutils.createUserRole
@@ -16,7 +17,7 @@ class UserFilterTest {
1617 fun `filter matches if any of the user's roles is a match` () {
1718 val userRole =
1819 createUserRole(
19- username = DEFAULT_TEST_USERNAME ,
20+ DEFAULT_TEST_USERNAME ,
2021 createRole(orgId = " org2" , applicationName = " app1" , roleName = " role1" ),
2122 createRole(orgId = " org1" , applicationName = " app1" , roleName = " role1" ),
2223 )
@@ -25,11 +26,34 @@ class UserFilterTest {
2526 filter.matches(userRole).shouldBeTrue()
2627 }
2728
29+ @Test
30+ fun `filter only matches if user has a role that fulfills all dimensions` () {
31+ val filter = createUserFilter(orgId = " org1" , applicationName = " app1" , roleName = " role1" )
32+
33+ val userRole =
34+ createUserRole(
35+ DEFAULT_TEST_USERNAME ,
36+ // Roles that match the filter in all dimensions except 1
37+ createRole(orgId = " org1" , applicationName = " app1" , roleName = " role2" ),
38+ createRole(orgId = " org1" , applicationName = " app2" , roleName = " role1" ),
39+ createRole(orgId = " org2" , applicationName = " app1" , roleName = " role1" ),
40+ )
41+ filter.matches(userRole).shouldBeFalse()
42+
43+ val matchingUserRole =
44+ userRole.copy(
45+ roles =
46+ userRole.roles +
47+ createRole(orgId = " org1" , applicationName = " app1" , roleName = " role1" )
48+ )
49+ filter.matches(matchingUserRole).shouldBeTrue()
50+ }
51+
2852 @Test
2953 fun `user with SUPER_ADMIN role matches all orgs and applications` () {
3054 val superAdmin =
3155 createUserRole(
32- username = DEFAULT_TEST_USERNAME ,
56+ DEFAULT_TEST_USERNAME ,
3357 createRole(roleName = " SUPER_ADMIN" , orgId = null , applicationName = null ),
3458 )
3559
@@ -45,6 +69,20 @@ class UserFilterTest {
4569 val appAndRoleFilter = createUserFilter(applicationName = " app1" , roleName = " MEMBER" )
4670 appAndRoleFilter.matches(superAdmin).shouldBeFalse()
4771 }
72+
73+ @Test
74+ fun `empty filter always matches` () {
75+ val emptyFilter = createUserFilter()
76+
77+ val userWithoutRoles = createUserRole()
78+ userWithoutRoles.roles.shouldBeEmpty()
79+
80+ emptyFilter.matches(userWithoutRoles).shouldBeTrue()
81+
82+ val userWithRole = createUserRole(DEFAULT_TEST_USERNAME , createRole())
83+
84+ emptyFilter.matches(userWithRole).shouldBeTrue()
85+ }
4886}
4987
5088fun createUserFilter (
0 commit comments