diff --git a/CHANGELOG.md b/CHANGELOG.md index f8f7a8575..0e2b97798 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### Fixed +- Fix enabling a realm clears the value of eventsExpiration + +## [6.1.11] - 2024-10-14 + - Fix env.JAVA_HOME test failures by ensuring env is set before build ## [6.1.10] - 2024-10-04 + - Fixed securityContext entries in job template diff --git a/src/main/java/de/adorsys/keycloak/config/service/RealmImportService.java b/src/main/java/de/adorsys/keycloak/config/service/RealmImportService.java index f65356659..14b257063 100644 --- a/src/main/java/de/adorsys/keycloak/config/service/RealmImportService.java +++ b/src/main/java/de/adorsys/keycloak/config/service/RealmImportService.java @@ -187,8 +187,11 @@ private void updateRealm(RealmImport realmImport) { RealmRepresentation realm = CloneUtil.deepClone(realmImport, RealmRepresentation.class, ignoredPropertiesForRealmImport); - // The state must be loaded before we update realm to prevent - // the state erasure by custom attributes from configuration + RealmRepresentation existingRealm = realmRepository.get(realmImport.getRealm()); + + if (existingRealm.getEventsExpiration() != null) { + realm.setEventsExpiration(existingRealm.getEventsExpiration()); + } stateService.loadState(realm); realmRepository.update(realm); diff --git a/src/test/java/de/adorsys/keycloak/config/service/ImportSimpleRealmIT.java b/src/test/java/de/adorsys/keycloak/config/service/ImportSimpleRealmIT.java index 84e3720f3..e04166b88 100644 --- a/src/test/java/de/adorsys/keycloak/config/service/ImportSimpleRealmIT.java +++ b/src/test/java/de/adorsys/keycloak/config/service/ImportSimpleRealmIT.java @@ -302,4 +302,17 @@ void shouldNotUpdateSimpleRealmWithInvalidSyntax() { assertThat(thrown.getMessage(), matchesPattern("(?s)^Unable to parse file 'file:.+/import-files/simple-realm/81_invalid_json.json': while parsing a flow mapping.+")); } + @Test + @Order(83) + void shouldPreserveEventsExpirationWhenUpdatingRealm() throws Exception { + doImport("08.3_update_simple-realm_with_events-expiration.json"); + + RealmRepresentation realm = keycloakProvider.getInstance().realm(REALM_NAME).toRepresentation(); + assertThat(realm.getEventsExpiration(), is(3600L)); + + doImport("08.4_update_simple-realm_without_events-expiration.json"); + + realm = keycloakProvider.getInstance().realm(REALM_NAME).toRepresentation(); + assertThat(realm.getEventsExpiration(), is(3600L)); + } } diff --git a/src/test/resources/import-files/simple-realm/08.3_update_simple-realm_with_events-expiration.json b/src/test/resources/import-files/simple-realm/08.3_update_simple-realm_with_events-expiration.json new file mode 100644 index 000000000..1d521091a --- /dev/null +++ b/src/test/resources/import-files/simple-realm/08.3_update_simple-realm_with_events-expiration.json @@ -0,0 +1,5 @@ +{ + "realm": "simple", + "eventsEnabled": true, + "eventsExpiration": 3600 +} diff --git a/src/test/resources/import-files/simple-realm/08.4_update_simple-realm_without_events-expiration.json b/src/test/resources/import-files/simple-realm/08.4_update_simple-realm_without_events-expiration.json new file mode 100644 index 000000000..2616168fb --- /dev/null +++ b/src/test/resources/import-files/simple-realm/08.4_update_simple-realm_without_events-expiration.json @@ -0,0 +1,4 @@ +{ + "realm": "simple", + "eventsEnabled": true +}