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 34d56dee5aa0d8e948c673c4387f97d66d801b8e..43f704db61a452b7c208a83ca80335882448cf3a 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 54959316b662c652920cd4a367d3bf851d51a9e7..3b7aa4fe7c102e6618f31b809b083a73353739b6 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 a388e3b9984398ace94dad3be2d1d96992fc700d..dc1440ecb99ced426616622657de0b628e01ec85 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 b7565d98cca15a609b16035260638cb756febaab..790acd23eb0e0c788673fbef2daacd6771035a01 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 ae5a8b2377cfe2b258c7d1b95b8c3d41c7c9ea5b..cbe19bda65ca401920daee613140646688516738 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); }