diff --git a/src/test/java/de/ozgcloud/admin/keycloak/GroupMapperTest.java b/src/test/java/de/ozgcloud/admin/keycloak/GroupMapperTest.java index 790451bfb93c34eec09fe0168cbb0eee2d84c73b..a8f6474f5e6a299d683415901f0995f7b72b4a7f 100644 --- a/src/test/java/de/ozgcloud/admin/keycloak/GroupMapperTest.java +++ b/src/test/java/de/ozgcloud/admin/keycloak/GroupMapperTest.java @@ -4,6 +4,7 @@ import static de.ozgcloud.admin.keycloak.GroupRepresentationTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.UUID; @@ -13,8 +14,11 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; import org.keycloak.representations.idm.GroupRepresentation; import org.mapstruct.factory.Mappers; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -28,42 +32,123 @@ class GroupMapperTest { private GroupMapper mapper = Mappers.getMapper(GroupMapper.class); @Nested - class TestGetOrganisationsEinheitId { + class TestFromGroupRepresentations { + + private final GroupRepresentation groupRepresentation = GroupRepresentationTestFactory.create(); + + @Captor + private ArgumentCaptor<List<Group>> groupsCaptor; @Test - void shouldReturnNullIfAttributesAreNull() { - var result = mapper.getOrganisationsEinheitId(null); + void shouldMapFromGroupRepresentation() { + givenMappedGroupWithOrganisationsEinheitId(); - assertThat(result).isNull(); + callMapper(); + + verify(mapper).fromGroupRepresentation(groupRepresentation); } @Test - void shouldReturnNullIfAttributeIsAbsent() { - givenOrganisationsEinheitIdProperty(); + void shouldReturnListWithMappedGroupRepresentation() { + var group = givenMappedGroupWithOrganisationsEinheitId(); - var result = mapper.getOrganisationsEinheitId(Map.of("dummy-attribute", List.of("123"))); + var groups = callMapper(); - assertThat(result).isNull(); + assertThat(groups).containsExactly(group); + } + + @ParameterizedTest + @NullAndEmptySource + void shouldReturnEmptyList(String organisationsEinheitId) { + givenMappedGroupWithOrganisationsEinheitId(organisationsEinheitId); + + var groups = callMapper(); + + assertThat(groups).isEmpty(); } @Test - void shouldReturnOrganisationsEinheitId() { - givenOrganisationsEinheitIdProperty(); - var value = GroupRepresentationTestFactory.ORGANISATIONS_EINHEIT_ID; - var result = mapper.getOrganisationsEinheitId(Map.of(ORGANIZATIONS_EINHEIT_ID_ATTRIBUTE, List.of(value))); + void shouldDeleteGroupsWithoutOrganisationsEinheitId() { + var group = givenMappedGroupWithOrganisationsEinheitId(); - assertThat(result).isEqualTo(value); + callMapper(); + + verify(mapper).deleteGroupsWithoutOrganisationsEinheitId(groupsCaptor.capture()); + assertThat(groupsCaptor.getValue()).containsExactly(group); + } + + private Group givenMappedGroupWithOrganisationsEinheitId() { + var group = GroupTestFactory.create(); + doReturn(group).when(mapper).fromGroupRepresentation(groupRepresentation); + return group; + } + + private void givenMappedGroupWithOrganisationsEinheitId(String id) { + var group = GroupTestFactory.createBuilder().organisationsEinheitId(id).build(); + doReturn(group).when(mapper).fromGroupRepresentation(groupRepresentation); + } + + private List<Group> callMapper() { + return mapper.fromGroupRepresentations(List.of(groupRepresentation)); + } + } + + @Nested + class TestDeleteGroupsWithoutOrganisationsEinheitId { + + private final Group group = GroupTestFactory.create(); + private final List<Group> groups = new ArrayList<>(); + + @BeforeEach + void init() { + groups.add(group); } @Test - void shouldReturnFirstValueIfMultipleAreAvailable() { - givenOrganisationsEinheitIdProperty(); - var value = GroupRepresentationTestFactory.ORGANISATIONS_EINHEIT_ID; - var value2 = UUID.randomUUID().toString(); + void shouldCheckIfGroupHasOrganisationsEinheitId() { + mapper.deleteGroupsWithoutOrganisationsEinheitId(groups); - var result = mapper.getOrganisationsEinheitId(Map.of(ORGANIZATIONS_EINHEIT_ID_ATTRIBUTE, List.of(value, value2))); + verify(mapper).isMissingOrganisationsEinheitId(group); + } - assertThat(result).isEqualTo(value); + @Test + void shouldKeepGroupsWithOrganisationsEinheitId() { + doReturn(false).when(mapper).isMissingOrganisationsEinheitId(group); + + mapper.deleteGroupsWithoutOrganisationsEinheitId(groups); + + assertThat(groups).containsExactly(group); + } + + @Test + void shouldRemoveGroupsWithoutOrganisationsEinheitId() { + doReturn(true).when(mapper).isMissingOrganisationsEinheitId(group); + + mapper.deleteGroupsWithoutOrganisationsEinheitId(groups); + + assertThat(groups).isEmpty(); + } + } + + @Nested + class TestIsMissingOrganisationsEinheitId { + + @ParameterizedTest + @ValueSource(strings = " ") + @NullAndEmptySource + void shouldReturnTrueIfIdIsBlank(String organisationsEinheitId) { + var group = GroupTestFactory.createBuilder().organisationsEinheitId(organisationsEinheitId).build(); + + var isMissing = mapper.isMissingOrganisationsEinheitId(group); + + assertThat(isMissing).isTrue(); + } + + @Test + void shouldReturnFalseIfIdIsSet() { + var isMissing = mapper.isMissingOrganisationsEinheitId(GroupTestFactory.create()); + + assertThat(isMissing).isFalse(); } } @@ -122,51 +207,42 @@ class GroupMapperTest { } @Nested - class TestFromGroupRepresentations { - - private final GroupRepresentation groupRepresentation = GroupRepresentationTestFactory.create(); + class TestGetOrganisationsEinheitId { @Test - void shouldMapFromGroupRepresentation() { - givenMappedGroupWithOrganisationsEinheitId(); - - callMapper(); + void shouldReturnNullIfAttributesAreNull() { + var result = mapper.getOrganisationsEinheitId(null); - verify(mapper).fromGroupRepresentation(groupRepresentation); + assertThat(result).isNull(); } @Test - void shouldReturnListWithMappedGroupRepresentation() { - var group = givenMappedGroupWithOrganisationsEinheitId(); + void shouldReturnNullIfAttributeIsAbsent() { + givenOrganisationsEinheitIdProperty(); - var groups = callMapper(); + var result = mapper.getOrganisationsEinheitId(Map.of("dummy-attribute", List.of("123"))); - assertThat(groups).containsExactly(group); + assertThat(result).isNull(); } - @ParameterizedTest - @NullAndEmptySource - void shouldReturnEmptyList(String organisationsEinheitId) { - givenMappedGroupWithOrganisationsEinheitId(organisationsEinheitId); - - var groups = callMapper(); + @Test + void shouldReturnOrganisationsEinheitId() { + givenOrganisationsEinheitIdProperty(); + var value = GroupRepresentationTestFactory.ORGANISATIONS_EINHEIT_ID; + var result = mapper.getOrganisationsEinheitId(Map.of(ORGANIZATIONS_EINHEIT_ID_ATTRIBUTE, List.of(value))); - assertThat(groups).isEmpty(); + assertThat(result).isEqualTo(value); } - private Group givenMappedGroupWithOrganisationsEinheitId() { - var group = GroupTestFactory.create(); - doReturn(group).when(mapper).fromGroupRepresentation(groupRepresentation); - return group; - } + @Test + void shouldReturnFirstValueIfMultipleAreAvailable() { + givenOrganisationsEinheitIdProperty(); + var value = GroupRepresentationTestFactory.ORGANISATIONS_EINHEIT_ID; + var value2 = UUID.randomUUID().toString(); - private void givenMappedGroupWithOrganisationsEinheitId(String id) { - var group = GroupTestFactory.createBuilder().organisationsEinheitId(id).build(); - doReturn(group).when(mapper).fromGroupRepresentation(groupRepresentation); - } + var result = mapper.getOrganisationsEinheitId(Map.of(ORGANIZATIONS_EINHEIT_ID_ATTRIBUTE, List.of(value, value2))); - private List<Group> callMapper() { - return mapper.fromGroupRepresentations(List.of(groupRepresentation)); + assertThat(result).isEqualTo(value); } }