diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java index 1c93aa31cc071537b9109ae9d30c752cb32b7c4c..34916871b65033786c5a7388092369dd595cb33b 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapper.java @@ -56,6 +56,7 @@ interface KeycloakRealmMapper { @Mapping(target = "actionTokenGeneratedByUserLifespan", constant = ACTION_TOKEN_GENERATED_BY_USER_LIFE_SPAN) @Mapping(target = "smtpServer", source = "smtpServer", qualifiedByName = "smtpServer") @Mapping(target = "roles.realm", source = "realmRoles") + @Mapping(target = "loginTheme", source = ".", qualifiedByName = "bundeslandToLoginTheme") public RealmRepresentation map(OzgCloudKeycloakRealmSpec realm); @Mapping(target = "enabled", constant = ENABLED) @@ -67,11 +68,15 @@ interface KeycloakRealmMapper { @Mapping(target = "actionTokenGeneratedByUserLifespan", constant = ACTION_TOKEN_GENERATED_BY_USER_LIFE_SPAN) @Mapping(target = "smtpServer", source = "smtpServer", qualifiedByName = "smtpServer") @Mapping(target = "roles.realm", source = "realmRoles") + @Mapping(target = "loginTheme", source = ".", qualifiedByName = "bundeslandToLoginTheme") RealmRepresentation update(@MappingTarget RealmRepresentation existingRealm, OzgCloudKeycloakRealmSpec spec); @Mapping(target = "name", source = "name") RoleRepresentation map(OzgCloudKeycloakRealmSpec.RealmRole role); + @Named("bundeslandToLoginTheme") + default String mapBundeslandToLoginTheme(OzgCloudKeycloakRealmSpec spec) { return "ozg-" + spec.getBundesland(); } + @Named("supportedLocales") default Set<String> mapPassword(OzgCloudKeycloakRealmSpec spec) { return Set.of("de"); diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java index d1332813f2dbe03f85a71f075a34eed4ceb230c0..b3d1eef6e0c05bc13991878ba5bc7120995849a0 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpec.java @@ -48,6 +48,8 @@ class OzgCloudKeycloakRealmSpec { private String displayName; + private String bundesland; + private KeycloakRealmSMTPServer smtpServer; @Getter diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java index bd951e01b9d51919cc258b7b5316589c18a0cc99..298ffe4dbcf7760b4d145573a022ef36deb12bde 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmMapperTest.java @@ -38,110 +38,121 @@ class KeycloakRealmMapperTest { @Spy private final KeycloakRealmMapper mapper = Mappers.getMapper(KeycloakRealmMapper.class); - private RealmRepresentation mapRealm() { - return mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); + @Nested + class TestMap { - } + @Test + void shouldMapDisplayName() { + var mapped = mapRealm(); - @Test - void shouldMapDisplayName() { - var mapped = mapRealm(); + assertThat(mapped.getDisplayName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.DISPLAY_NAME); + } - assertThat(mapped.getDisplayName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.DISPLAY_NAME); - } + @Test + void shouldBeEnabled() { + var mapped = mapRealm(); - @Test - void shouldBeEnabled() { - var mapped = mapRealm(); + assertThat(mapped.isEnabled()).isTrue(); + } - assertThat(mapped.isEnabled()).isTrue(); - } + @Test + void shouldBeResetPasswordAllowed() { + var mapped = mapRealm(); - @Test - void shouldBeResetPasswordAllowed() { - var mapped = mapRealm(); + assertThat(mapped.isResetPasswordAllowed()).isTrue(); + } - assertThat(mapped.isResetPasswordAllowed()).isTrue(); - } + @Test + void shouldBeSupportedLocaleDe() { + var mapped = mapRealm(); - @Test - void shouldBeSupportedLocaleDe() { - var mapped = mapRealm(); + assertThat(mapped.getSupportedLocales()).containsExactly("de"); + } - assertThat(mapped.getSupportedLocales()).containsExactly("de"); - } + @Test + void shouldBeDefaultLocaleDe() { + var mapped = mapRealm(); - @Test - void shouldBeDefaultLocaleDe() { - var mapped = mapRealm(); + assertThat(mapped.getDefaultLocale()).isEqualTo("de"); + } - assertThat(mapped.getDefaultLocale()).isEqualTo("de"); - } + @Test + void shouldHaveLoginTheme() { + var mapped = mapRealm(); - @Test - void shouldBeInternationalizationEnabled() { - var mapped = mapRealm(); + assertThat(mapped.getLoginTheme()).isEqualTo("ozg-sh"); + } - assertThat(mapped.isInternationalizationEnabled()).isTrue(); - } + @Test + void shouldBeInternationalizationEnabled() { + var mapped = mapRealm(); - @Test - void checkPasswordPolicy() { - var mapped = mapRealm(); + assertThat(mapped.isInternationalizationEnabled()).isTrue(); + } - assertThat(mapped.getPasswordPolicy()).isEqualTo("upperCase(1) and lowerCase(1) and length(8) and notUsername"); - } + @Test + void checkPasswordPolicy() { + var mapped = mapRealm(); - @Test - void shouldSetActionTokenGeneratedByUserLifespan() { - var mapped = mapRealm(); + assertThat(mapped.getPasswordPolicy()).isEqualTo("upperCase(1) and lowerCase(1) and length(8) and notUsername"); + } - assertThat(mapped.getActionTokenGeneratedByUserLifespan()).isEqualTo(900); - } + @Test + void shouldSetActionTokenGeneratedByUserLifespan() { + var mapped = mapRealm(); - @Test - void shouldMapSmtpServer() { - var mapped = mapRealm(); + assertThat(mapped.getActionTokenGeneratedByUserLifespan()).isEqualTo(900); + } - assertThat(mapped.getSmtpServer()).hasSize(8); - } + @Test + void shouldMapSmtpServer() { + var mapped = mapRealm(); - @Test - void shouldContainSmtpServerKeysValues() { - var mapped = mapRealm(); - - assertThat(mapped.getSmtpServer()) - .containsEntry(KeycloakRealmSMTPServer.USER_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_USER) - .containsEntry(KeycloakRealmSMTPServer.PASSWORD_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PASSWORD) - .containsEntry(KeycloakRealmSMTPServer.HOST_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_HOST) - .containsEntry(KeycloakRealmSMTPServer.PORT_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PORT) - .containsEntry(KeycloakRealmSMTPServer.STARTTLS_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_STARTTLS) - .containsEntry(KeycloakRealmSMTPServer.AUTH_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_AUTH) - .containsEntry(KeycloakRealmSMTPServer.FROM_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM) - .containsEntry(KeycloakRealmSMTPServer.FROM_DISPLAY_NAME_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM_DISPLAY_NAME); - } + assertThat(mapped.getSmtpServer()).hasSize(8); + } - @Test - void shouldMapWhenSmtpServerIsNull() { - var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.createBuilder().smtpServer(null).build()); + @Test + void shouldContainSmtpServerKeysValues() { + var mapped = mapRealm(); - assertThat(mapped.getSmtpServer()).isEmpty(); - } + assertThat(mapped.getSmtpServer()) + .containsEntry(KeycloakRealmSMTPServer.USER_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_USER) + .containsEntry(KeycloakRealmSMTPServer.PASSWORD_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PASSWORD) + .containsEntry(KeycloakRealmSMTPServer.HOST_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_HOST) + .containsEntry(KeycloakRealmSMTPServer.PORT_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_PORT) + .containsEntry(KeycloakRealmSMTPServer.STARTTLS_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_STARTTLS) + .containsEntry(KeycloakRealmSMTPServer.AUTH_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_AUTH) + .containsEntry(KeycloakRealmSMTPServer.FROM_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM) + .containsEntry(KeycloakRealmSMTPServer.FROM_DISPLAY_NAME_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_FROM_DISPLAY_NAME); + } - @Test - void shouldMapRealmRoles() { - var mapped = mapRealm(); + @Test + void shouldMapWhenSmtpServerIsNull() { + var mapped = mapper.map(OzgCloudKeycloakRealmSpecTestFactory.createBuilder().smtpServer(null).build()); - assertThat(mapped.getRoles().getRealm()).hasSize(2); - } + assertThat(mapped.getSmtpServer()).isEmpty(); + } + + @Test + void shouldMapRealmRoles() { + var mapped = mapRealm(); + + assertThat(mapped.getRoles().getRealm()).hasSize(2); + } + + @Test + void shouldContainRealmRolesValues() { + var mapped = mapRealm(); + var mappedRealmRoles = mapped.getRoles(); - @Test - void shouldContainRealmRolesValues() { - var mapped = mapRealm(); - var mappedRealmRoles = mapped.getRoles(); + assertThat(mappedRealmRoles.getRealm().get(0).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_1); + assertThat(mappedRealmRoles.getRealm().get(1).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_2); + } + + private RealmRepresentation mapRealm() { + return mapper.map(OzgCloudKeycloakRealmSpecTestFactory.create()); + } - assertThat(mappedRealmRoles.getRealm().get(0).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_1); - assertThat(mappedRealmRoles.getRealm().get(1).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_2); } @Nested @@ -149,70 +160,77 @@ class KeycloakRealmMapperTest { @Test void shouldMapDisplayName() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getDisplayName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.DISPLAY_NAME); } @Test void shouldBeEnabled() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.isEnabled()).isTrue(); } @Test void shouldBeResetPasswordAllowed() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.isResetPasswordAllowed()).isTrue(); } @Test void shouldBeSupportedLocaleDe() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getSupportedLocales()).containsExactly("de"); } + @Test + void shouldHaveLoginTheme() { + var mapped = callUpdate(); + + assertThat(mapped.getLoginTheme()).isEqualTo("ozg-sh"); + } + @Test void shouldBeDefaultLocaleDe() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getDefaultLocale()).isEqualTo("de"); } @Test void shouldBeInternationalizationEnabled() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.isInternationalizationEnabled()).isTrue(); } @Test void checkPasswordPolicy() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getPasswordPolicy()).isEqualTo("upperCase(1) and lowerCase(1) and length(8) and notUsername"); } @Test void shouldSetActionTokenGeneratedByUserLifespan() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getActionTokenGeneratedByUserLifespan()).isEqualTo(900); } @Test void shouldMapSmtpServer() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getSmtpServer()).hasSize(8); } @Test void shouldContainSmtpServerKeysValues() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getSmtpServer()) .containsEntry(KeycloakRealmSMTPServer.USER_FIELD, KeycloakRealmSmtpServerTestFactory.SMTP_SERVER_USER) @@ -235,19 +253,23 @@ class KeycloakRealmMapperTest { @Test void shouldMapRealmRoles() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); assertThat(mapped.getRoles().getRealm()).hasSize(2); } @Test void shouldContainRealmRolesValues() { - var mapped = mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + var mapped = callUpdate(); var mappedRealmRoles = mapped.getRoles(); assertThat(mappedRealmRoles.getRealm().get(0).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_1); assertThat(mappedRealmRoles.getRealm().get(1).getName()).isEqualTo(OzgCloudKeycloakRealmSpecTestFactory.ROLE_NAME_2); } + private RealmRepresentation callUpdate() { + return mapper.update(RealmRepresentationTestFactory.create(), OzgCloudKeycloakRealmSpecTestFactory.create()); + } + } } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java index f968f4ac8bbd5e322a8c7cd319de2476e7945b80..d0393aab81f83e67475bb59d0a76b9910e962b63 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmServiceTest.java @@ -116,25 +116,28 @@ class KeycloakRealmServiceTest { @Test void shouldUpdateRealmIfExists() { - service.updateRealm(realmRepresentation, REALM); + updateRealm(); verify(remoteService).updateRealm(realmRepresentation); } @Test void shouldCallMapper() { - - service.updateRealm(realmRepresentation, REALM); + updateRealm(); verify(mapper).update(realmRepresentation, REALM); } @Test void createRealmShouldCallAddAttributes() { - service.updateRealm(realmRepresentation, REALM); + updateRealm(); verify(service).addUserProfileAttributes(realmRepresentation); } + + private void updateRealm() { + service.updateRealm(realmRepresentation, REALM); + } } @DisplayName("Add or Update Realm Roles") diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java index 5c27b298f4f21487701334bbd9f0be3c1ccfd7d1..9d7ec9af90b9b51f08cf44b8987c1f5bb34a146d 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/realm/OzgCloudKeycloakRealmSpecTestFactory.java @@ -30,6 +30,7 @@ import de.ozgcloud.operator.keycloak.realm.OzgCloudKeycloakRealmSpec.RealmRole; public class OzgCloudKeycloakRealmSpecTestFactory { public final static String DISPLAY_NAME = "TestDisplayName"; + public final static String BUNDESLAND = "sh"; public final static boolean KEEP_AFTER_DELETE = false; public static final String ROLE_NAME_1 = "RoleName1"; @@ -46,6 +47,7 @@ public class OzgCloudKeycloakRealmSpecTestFactory { return OzgCloudKeycloakRealmSpec.builder() .keepAfterDelete(KEEP_AFTER_DELETE) .displayName(DISPLAY_NAME) + .bundesland(BUNDESLAND) .smtpServer(KeycloakRealmSmtpServerTestFactory.create()) .realmRoles(ROLES); }