From cccc52d53e5d4ac38d92be9bf58729a393de350d Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Mon, 14 Oct 2024 15:15:52 +0200
Subject: [PATCH] OZG-6897 map organisations einheit ids from user attributes

also allow to map multiple oeIds from groups
---
 .../de/ozgcloud/user/UserResourceMapper.java  | 20 +++++++++++++------
 .../ozgcloud/user/UserResourceMapperTest.java |  2 --
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/user-manager-server/src/main/java/de/ozgcloud/user/UserResourceMapper.java b/user-manager-server/src/main/java/de/ozgcloud/user/UserResourceMapper.java
index 51b2a9f5..ba7ca20c 100644
--- a/user-manager-server/src/main/java/de/ozgcloud/user/UserResourceMapper.java
+++ b/user-manager-server/src/main/java/de/ozgcloud/user/UserResourceMapper.java
@@ -23,6 +23,7 @@
  */
 package de.ozgcloud.user;
 
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashSet;
@@ -78,22 +79,29 @@ public abstract class UserResourceMapper {
 
 	Set<String> mapOrganisationsEinheitIds(UserResource userRes) {
 		var groups = userRes.groups();
-		var organisationsEinheitIds = getOrganisationsEinheitIdsFromGroups(groups);
+		var organisationsEinheitIds = Stream.concat(
+				getOrganisationsEinheitIdsFromGroups(groups),
+				getOrganisationsEinheitIdsFromUser(userRes)
+			)
+				.filter(Objects::nonNull)
+				.filter(oeId -> !oeId.isBlank())
+				.toList();
 		return new HashSet<>(organisationsEinheitIds);
 	}
 
-	private List<String> getOrganisationsEinheitIdsFromGroups(List<GroupRepresentation> groups) {
+	private Stream<String> getOrganisationsEinheitIdsFromGroups(List<GroupRepresentation> groups) {
 		return groups.stream()
 				.map(this::mapGroup)
 				.filter(Objects::nonNull)
 				.map(attributeMap -> attributeMap.get(properties.organisationsEinheitIdKey()))
 				.filter(Objects::nonNull)
-				.map(attributeValues -> attributeValues.get(0))
-				.toList();
+				.flatMap(Collection::stream);
 	}
 
-	private List<String> getOrganisationsEinheitIdsFromUser(UserResource userRes) {
-		return List.of();
+	private Stream<String> getOrganisationsEinheitIdsFromUser(UserResource userRes) {
+		return Optional.ofNullable(userRes.toRepresentation().getAttributes().get(properties.organisationsEinheitIdKey()))
+				.orElse(List.of())
+				.stream();
 	}
 
 	private Map<String, List<String>> mapGroup(GroupRepresentation group) {
diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/UserResourceMapperTest.java b/user-manager-server/src/test/java/de/ozgcloud/user/UserResourceMapperTest.java
index 1c2218a1..ef790b9a 100644
--- a/user-manager-server/src/test/java/de/ozgcloud/user/UserResourceMapperTest.java
+++ b/user-manager-server/src/test/java/de/ozgcloud/user/UserResourceMapperTest.java
@@ -270,8 +270,6 @@ class UserResourceMapperTest {
 		@Mock
 		RoleMappingResource roleMappingResource;
 		@Mock
-		RoleScopeResource roleScopeResource;
-		@Mock
 		MappingsRepresentation mappingsRepresentation;
 		@Mock
 		Map<String, ClientMappingsRepresentation> clientMappingsRepresentation;
-- 
GitLab