keycloak-aplcache

Merge pull request #3526 from mhajas/KEYCLOAK-3017 KEYCLOAK-3017

12/3/2016 4:47:15 PM

Details

diff --git a/testsuite/integration-arquillian/test-apps/js-console/example-realm.json b/testsuite/integration-arquillian/test-apps/js-console/example-realm.json
index e90217a..0a90d2c 100755
--- a/testsuite/integration-arquillian/test-apps/js-console/example-realm.json
+++ b/testsuite/integration-arquillian/test-apps/js-console/example-realm.json
@@ -19,7 +19,7 @@
             ],
             "realmRoles": [ "user" ],
             "clientRoles": {
-                "realm-management" : [ "view-realm" ],
+                "realm-management" : [ "view-realm", "manage-users" ],
                 "account": ["view-profile", "manage-account"]
             }
         },{
diff --git a/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html b/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
index 65540f1..36f9b38 100755
--- a/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
+++ b/testsuite/integration-arquillian/test-apps/js-console/src/main/webapp/index.html
@@ -48,6 +48,7 @@
     <button onclick="addToTimeSkew()">timeSkew offset</button>
     <button onclick="refreshTimeSkew()">refresh timeSkew</button>
     <button onclick="sendBearerToKeycloak()">Bearer to keycloak</button>
+    <button onclick="createUser()">Create user</button>
 
 
     <select id="flowSelect">
@@ -240,6 +241,35 @@ TimeSkew: <div id="timeSkew"></div>
         req.send();
     }
 
+    function createUser() {
+        var user = JSON.parse('{"emailVerified" : false, "enabled" : true, "username": "mhajas", "firstName" :"First", "lastName":"Last","email":"email@redhat.com", "attributes": {}}');
+
+        var url = "http://localhost:8180/auth/admin/realms/example/users";
+        if (window.location.href.indexOf("8543") > -1) {
+            url = url.replace("8180","8543");
+            url = url.replace("http","https");
+        }
+
+        var req = new XMLHttpRequest();
+        req.open("POST", url, true);
+        req.setRequestHeader('Accept', 'application/json');
+        req.setRequestHeader('Authorization', 'Bearer ' + keycloak.token);
+        req.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
+        req.onreadystatechange = function () {
+            if (req.readyState == 4) {
+                if (req.status == 201) {
+                    output("Response headers: " + req.getAllResponseHeaders().toLowerCase());
+                } else if (req.status == 403) {
+                    output('Forbidden');
+                } else if (req.status == 401) {
+                    output('Unauthorized');
+                }
+            }
+        };
+
+        req.send(JSON.stringify(user));
+    }
+
     var keycloak;
 
     function keycloakInit() {
diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
index 069481f..dee9018 100755
--- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
+++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/adapter/page/JSConsoleTestApp.java
@@ -81,6 +81,8 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
     private WebElement certRequestButton;
     @FindBy(xpath = "//button[text() = 'refresh timeSkew']")
     private WebElement refreshTimeSkewButton;
+    @FindBy(xpath = "//button[text() = 'Create user']")
+    private WebElement createUserButton;
 
     @FindBy(id = "timeSkew")
     private WebElement timeSkewValue;
@@ -181,6 +183,10 @@ public class JSConsoleTestApp extends AbstractPageWithInjectedUrl {
         refreshTimeSkewButton.click();
     }
 
+    public void createUserRequest() {
+        createUserButton.click();
+    }
+
     public void sendCertRequest() {
         certRequestButton.click();
     }
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
index 179bb0f..9ff8596 100755
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/example/AbstractJSConsoleExampleAdapterTest.java
@@ -22,8 +22,10 @@ import org.jboss.arquillian.graphene.page.Page;
 import org.jboss.shrinkwrap.api.spec.WebArchive;
 import org.junit.Test;
 import org.keycloak.admin.client.resource.ClientResource;
+import org.keycloak.admin.client.resource.UsersResource;
 import org.keycloak.representations.idm.ClientRepresentation;
 import org.keycloak.representations.idm.RealmRepresentation;
+import org.keycloak.representations.idm.UserRepresentation;
 import org.keycloak.testsuite.adapter.AbstractExampleAdapterTest;
 import org.keycloak.testsuite.adapter.page.JSConsoleTestApp;
 import org.keycloak.testsuite.adapter.page.JSDatabaseTestApp;
@@ -412,6 +414,21 @@ public abstract class AbstractJSConsoleExampleAdapterTest extends AbstractExampl
         assertTrue("TimeSkew was: " + timeSkew + ", but should be ~-40", timeSkew + 40  <= TIME_SKEW_TOLERANCE);
     }
 
+    @Test
+    public void testLocationHeaderInResponse() {
+        logInAndInit("standard");
+        waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text().contains("Init Success (Authenticated)");
+
+        jsConsoleTestAppPage.createUserRequest();
+
+        UsersResource userResource = testRealmResource().users();
+
+        List<UserRepresentation> users = userResource.search("mhajas", 0, 1);
+        assertEquals("There should be created user mhajas", 1, users.size());
+        waitUntilElement(jsConsoleTestAppPage.getOutputElement()).text()
+                .contains("location: " + authServerContextRootPage.toString() + "/auth/admin/realms/" + EXAMPLE + "/users/" + users.get(0).getId());
+    }
+
     private void setImplicitFlowForClient() {
         ClientResource clientResource = ApiUtil.findClientResourceByClientId(testRealmResource(), "js-console");
         ClientRepresentation client = clientResource.toRepresentation();