keycloak-aplcache
Changes
testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/page/Form.java 7(+6 -1)
Details
diff --git a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
index d82144d..26bfc24 100755
--- a/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
+++ b/model/jpa/src/main/java/org/keycloak/models/jpa/RealmAdapter.java
@@ -32,6 +32,8 @@ import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
+import static java.util.Objects.nonNull;
+
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
@@ -480,6 +482,7 @@ public class RealmAdapter implements RealmModel, JpaModel<RealmEntity> {
getAttributes().entrySet().stream()
.filter(Objects::nonNull)
+ .filter(entry -> nonNull(entry.getValue()))
.filter(entry -> entry.getKey().startsWith(RealmAttributes.ACTION_TOKEN_GENERATED_BY_USER_LIFESPAN + "."))
.forEach(entry -> userActionTokens.put(entry.getKey().substring(RealmAttributes.ACTION_TOKEN_GENERATED_BY_USER_LIFESPAN.length() + 1), Integer.valueOf(entry.getValue())));
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/page/Form.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/page/Form.java
index d4b9e1d..4c00073 100644
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/page/Form.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/page/Form.java
@@ -46,7 +46,6 @@ public class Form {
private WebElement cancel;
public void save() {
-// guardAjax(save).click();
clickLink(save);
}
@@ -70,5 +69,11 @@ public class Form {
// TODO log warning
}
}
+ public WebElement saveBtn() {
+ return save;
+ }
+ public WebElement cancelBtn() {
+ return cancel;
+ }
}
diff --git a/testsuite/integration-arquillian/tests/other/console/src/test/java/org/keycloak/testsuite/console/realm/TokensTest.java b/testsuite/integration-arquillian/tests/other/console/src/test/java/org/keycloak/testsuite/console/realm/TokensTest.java
index 25da05a..e9b283e 100644
--- a/testsuite/integration-arquillian/tests/other/console/src/test/java/org/keycloak/testsuite/console/realm/TokensTest.java
+++ b/testsuite/integration-arquillian/tests/other/console/src/test/java/org/keycloak/testsuite/console/realm/TokensTest.java
@@ -35,6 +35,7 @@ import java.util.Objects;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -141,6 +142,23 @@ public class TokensTest extends AbstractRealmTest {
}
@Test
+ public void testButtonDisabledForEmptyAttributes() throws InterruptedException {
+ tokenSettingsPage.form().setOperation(VerifyEmailActionToken.TOKEN_TYPE, TIMEOUT, TimeUnit.DAYS);
+ tokenSettingsPage.form().save();
+ assertAlertSuccess();
+
+ loginToTestRealmConsoleAs(testUser);
+ driver.navigate().refresh();
+
+ tokenSettingsPage.navigateTo();
+ tokenSettingsPage.form().selectOperation(VerifyEmailActionToken.TOKEN_TYPE);
+ tokenSettingsPage.form().selectOperation(ResetCredentialsActionToken.TOKEN_TYPE);
+
+ assertFalse("Save button should be disabled", tokenSettingsPage.form().saveBtn().isEnabled());
+ assertFalse("Cancel button should be disabled", tokenSettingsPage.form().cancelBtn().isEnabled());
+ }
+
+ @Test
public void testLifespanActionTokenResetForVerifyEmail() throws InterruptedException {
tokenSettingsPage.form().setOperation(VerifyEmailActionToken.TOKEN_TYPE, TIMEOUT, TimeUnit.DAYS);
tokenSettingsPage.form().setOperation(ResetCredentialsActionToken.TOKEN_TYPE, TIMEOUT, TimeUnit.HOURS);
diff --git a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
index 1eb68af..91d1b8f 100644
--- a/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
+++ b/themes/src/main/resources/theme/base/admin/resources/js/controllers/realm.js
@@ -1099,6 +1099,12 @@ module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http,
var oldCopy = angular.copy($scope.realm);
$scope.changed = false;
+
+ var refresh = function() {
+ Realm.get($scope.realm, function () {
+ $scope.changed = false;
+ });
+ };
$scope.$watch('realm', function() {
if (!angular.equals($scope.realm, oldCopy)) {
@@ -1108,6 +1114,10 @@ module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http,
$scope.$watch('actionLifespanId', function () {
$scope.actionTokenAttribute = TimeUnit2.asUnit($scope.realm.attributes['actionTokenGeneratedByUserLifespan.' + $scope.actionLifespanId]);
+ //Refresh and disable the button if attribute is empty
+ if (!$scope.actionTokenAttribute.toSeconds()) {
+ refresh();
+ }
}, true);
$scope.$watch('actionTokenAttribute', function () {