@@ -911,3 +911,69 @@ func TestCallbackEndpointAuthorizesUserGroupMappingDisabled(t *testing.T) {
911911 require .Len (t , dbUser .Groups , 1 )
912912 require .Equal (t , dbmodel .ReadOnlyGroupID , dbUser .Groups [0 ].ID )
913913}
914+
915+ // Test if extractGroupsFromClaim works fine.
916+ func TestExtractGroupsFromClaim (t * testing.T ) {
917+ // Arrange
918+ db , _ , teardown := dbtest .SetupDatabaseTestCase (t )
919+ defer teardown ()
920+ issuerURL , srvTeardown , err := oidctest .PrepareTestOIDCServer ()
921+ require .NoError (t , err )
922+ defer srvTeardown ()
923+ settings := Settings {
924+ IssuerURL : issuerURL ,
925+ ClientID : "clientID" ,
926+ GroupsClaim : "groups" ,
927+ MandatoryAllowGroup : "stork-users" ,
928+ }
929+ controller := NewController (settings , db )
930+ require .NotNil (t , controller )
931+
932+ // Act & Assert
933+ m := make (map [string ]interface {})
934+ t .Run ("empty claims" , func (t * testing.T ) {
935+ res := controller .extractGroupsFromClaim (m )
936+ require .Empty (t , res )
937+ })
938+
939+ m ["sub" ] = "foo"
940+
941+ t .Run ("no groups" , func (t * testing.T ) {
942+ res := controller .extractGroupsFromClaim (m )
943+ require .Empty (t , res )
944+ })
945+
946+ t .Run ("slice of strings" , func (t * testing.T ) {
947+ m ["groups" ] = []string {"a" , "b" , "c" }
948+ res := controller .extractGroupsFromClaim (m )
949+ require .NotEmpty (t , res )
950+ require .Len (t , res , 3 )
951+ require .Contains (t , res , "a" )
952+ require .Contains (t , res , "b" )
953+ require .Contains (t , res , "c" )
954+ })
955+
956+ t .Run ("one string" , func (t * testing.T ) {
957+ m ["groups" ] = "groupA"
958+ res := controller .extractGroupsFromClaim (m )
959+ require .NotEmpty (t , res )
960+ require .Len (t , res , 1 )
961+ require .Contains (t , res , "groupA" )
962+ })
963+
964+ t .Run ("slice of interfaces" , func (t * testing.T ) {
965+ var groupA , groupB , groupC interface {}
966+ groupA = "groupA"
967+ groupB = "groupB"
968+ groupC = "groupC"
969+ var groups []interface {}
970+ groups = append (groups , groupA , groupB , groupC )
971+ m ["groups" ] = groups
972+ res := controller .extractGroupsFromClaim (m )
973+ require .NotEmpty (t , res )
974+ require .Len (t , res , 3 )
975+ require .Contains (t , res , "groupA" )
976+ require .Contains (t , res , "groupB" )
977+ require .Contains (t , res , "groupC" )
978+ })
979+ }
0 commit comments