You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2013/09/17 12:50:23 UTC

svn commit: r1523980 - in /syncope/trunk: common/src/main/java/org/apache/syncope/common/services/ common/src/main/java/org/apache/syncope/common/to/ common/src/main/java/org/apache/syncope/common/types/ console/src/main/java/org/apache/syncope/console...

Author: fmartelli
Date: Tue Sep 17 10:50:22 2013
New Revision: 1523980

URL: http://svn.apache.org/r1523980
Log:
SYNCOPE-133 Fixed

Modified:
    syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java
    syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java
    syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/UserRequestModalPage.java
    syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/UserRequestDataBinder.java
    syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java
    syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/services/UserRequestService.java Tue Sep 17 10:50:22 2013
@@ -27,8 +27,10 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.Response;
+import org.apache.syncope.common.mod.UserMod;
 
 import org.apache.syncope.common.to.UserRequestTO;
+import org.apache.syncope.common.to.UserTO;
 
 @Path("requests/user")
 public interface UserRequestService {
@@ -80,4 +82,16 @@ public interface UserRequestService {
     @DELETE
     @Path("{requestId}")
     void delete(@PathParam("requestId") Long requestId);
+
+    @POST
+    @Path("create/execute/{requestId}")
+    UserTO executeCreate(@PathParam("requestId") Long requestId, UserTO reviewed);
+
+    @POST
+    @Path("update/execute/{requestId}")
+    UserTO executeUpdate(@PathParam("requestId") Long requestId, UserMod changes);
+
+    @POST
+    @Path("delete/execute{requestId}")
+    UserTO executeDelete(@PathParam("requestId") Long requestId);
 }

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/to/UserRequestTO.java Tue Sep 17 10:50:22 2013
@@ -41,6 +41,8 @@ public class UserRequestTO extends Abstr
 
     private UserRequestType type;
 
+    private boolean executed;
+
     public UserRequestTO() {
     }
 
@@ -119,4 +121,12 @@ public class UserRequestTO extends Abstr
     public void setUserId(final Long userId) {
         this.userId = userId;
     }
+
+    public void setExecuted(boolean executed) {
+        this.executed = executed;
+    }
+
+    public boolean isExecuted() {
+        return executed;
+    }
 }

Modified: syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java
URL: http://svn.apache.org/viewvc/syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java (original)
+++ syncope/trunk/common/src/main/java/org/apache/syncope/common/types/AuditElements.java Tue Sep 17 10:50:22 2013
@@ -241,7 +241,8 @@ public final class AuditElements {
         read,
         update,
         delete,
-        isCreateAllowed
+        isCreateAllowed,
+        execute
 
     }
 

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/UserRequestModalPage.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/UserRequestModalPage.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/UserRequestModalPage.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/pages/UserRequestModalPage.java Tue Sep 17 10:50:22 2013
@@ -64,7 +64,6 @@ public class UserRequestModalPage extend
 
             case UPDATE:
                 this.initialUserTO = userRestClient.read(userRequestTO.getUserMod().getId());
-
                 userTO = AttributableOperations.apply(initialUserTO, userRequestTO.getUserMod());
                 break;
 
@@ -88,10 +87,7 @@ public class UserRequestModalPage extend
                     break;
 
                 case ADMIN:
-                    userRestClient.create(updatedUserTO);
-                    if (userRequestTO != null) {
-                        requestRestClient.delete(userRequestTO.getId());
-                    }
+                    requestRestClient.executeCreate(userRequestTO.getId(), userTO);
                     break;
 
                 default:
@@ -111,10 +107,7 @@ public class UserRequestModalPage extend
                         break;
 
                     case ADMIN:
-                        userRestClient.update(userMod);
-                        if (userRequestTO != null) {
-                            requestRestClient.delete(userRequestTO.getId());
-                        }
+                        requestRestClient.executeUpdate(userRequestTO.getId(), userMod);
                         break;
 
                     default:

Modified: syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java
URL: http://svn.apache.org/viewvc/syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java (original)
+++ syncope/trunk/console/src/main/java/org/apache/syncope/console/rest/UserRequestRestClient.java Tue Sep 17 10:50:22 2013
@@ -60,4 +60,16 @@ public class UserRequestRestClient exten
         userRequestTO.setUserId(userId);
         getService(UserRequestService.class).create(userRequestTO);
     }
+
+    public UserTO executeCreate(final Long requestId, final UserTO reviewed) {
+        return getService(UserRequestService.class).executeCreate(requestId, reviewed);
+    }
+
+    public UserTO executeUpdate(final Long requestId, final UserMod changes) {
+        return getService(UserRequestService.class).executeUpdate(requestId, changes);
+    }
+
+    public UserTO executeDelete(final Long requestId) {
+        return getService(UserRequestService.class).executeDelete(requestId);
+    }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/beans/UserRequest.java Tue Sep 17 10:50:22 2013
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.persistence.beans;
 
+import javax.persistence.Basic;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
@@ -25,6 +26,8 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Lob;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
 import org.apache.syncope.common.mod.UserMod;
@@ -49,6 +52,15 @@ public class UserRequest extends Abstrac
     @Enumerated(EnumType.STRING)
     private UserRequestType type;
 
+    @Basic
+    @Min(0)
+    @Max(1)
+    private Integer executed;
+
+    public UserRequest() {
+        this.executed = 0;
+    }
+
     public Long getId() {
         return id;
     }
@@ -89,4 +101,12 @@ public class UserRequest extends Abstrac
         type = UserRequestType.DELETE;
         payload = String.valueOf(userId);
     }
+
+    public boolean isExecuted() {
+        return isBooleanAsInteger(executed);
+    }
+
+    public void setExecuted(boolean executed) {
+        this.executed = getBooleanAsInteger(executed);
+    }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/UserRequestDAO.java Tue Sep 17 10:50:22 2013
@@ -28,6 +28,8 @@ public interface UserRequestDAO extends 
     UserRequest find(Long id);
 
     List<UserRequest> findAll();
+    
+    List<UserRequest> findAll(final boolean executed);
 
     UserRequest save(UserRequest userRequest) throws InvalidEntityException;
 

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/UserRequestDAOImpl.java Tue Sep 17 10:50:22 2013
@@ -45,6 +45,17 @@ public class UserRequestDAOImpl extends 
     }
 
     @Override
+    @Transactional(readOnly = true)
+    public List<UserRequest> findAll(final boolean executed) {
+        TypedQuery<UserRequest> query = entityManager.createQuery(
+                "SELECT e " + "FROM " + UserRequest.class.getSimpleName() + " e WHERE e.executed = :executed",
+                UserRequest.class);
+        query.setParameter("executed", executed ? 1 : 0);
+
+        return query.getResultList();
+    }
+
+    @Override
     public UserRequest save(final UserRequest userRequest) throws InvalidEntityException {
         return entityManager.merge(userRequest);
     }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/controller/UserRequestController.java Tue Sep 17 10:50:22 2013
@@ -18,6 +18,9 @@
  */
 package org.apache.syncope.core.rest.controller;
 
+import static org.apache.syncope.common.types.UserRequestType.CREATE;
+import static org.apache.syncope.common.types.UserRequestType.DELETE;
+import static org.apache.syncope.common.types.UserRequestType.UPDATE;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -61,6 +64,9 @@ public class UserRequestController {
     private UserRequestDAO userRequestDAO;
 
     @Autowired
+    private UserController userController;
+
+    @Autowired
     private UserRequestDataBinder binder;
 
     public boolean isCreateAllowed() {
@@ -112,7 +118,7 @@ public class UserRequestController {
         request = userRequestDAO.save(request);
 
         auditManager.audit(Category.userRequest, UserRequestSubCategory.update, Result.success,
-                "Successfully updated user request for " + request.getUserMod().getUsername());
+                "Successfully updated user request for " + request.getUserMod().getId());
 
         return binder.getUserRequestTO(request);
     }
@@ -132,6 +138,22 @@ public class UserRequestController {
         return result;
     }
 
+    @PreAuthorize("hasRole('USER_REQUEST_LIST')")
+    @Transactional(readOnly = true)
+    public List<UserRequestTO> list(final boolean executed) {
+        List<UserRequestTO> result = new ArrayList<UserRequestTO>();
+
+        for (UserRequest request : userRequestDAO.findAll(executed)) {
+            result.add(binder.getUserRequestTO(request));
+        }
+
+        auditManager.audit(Category.userRequest, UserRequestSubCategory.list, Result.success,
+                String.format("Successfully listed all %s executed user requests: %d",
+                (executed ? "" : "not"), result.size()));
+
+        return result;
+    }
+
     @PreAuthorize("hasRole('USER_REQUEST_READ')")
     @Transactional(readOnly = true)
     public UserRequestTO read(final Long requestId) {
@@ -140,10 +162,11 @@ public class UserRequestController {
             throw new NotFoundException("User request " + requestId);
         }
 
+        final UserRequestTO userRequestTO = binder.getUserRequestTO(request);
         auditManager.audit(Category.userRequest, UserRequestSubCategory.read, Result.success,
-                "Successfully read user request for " + request.getUserTO().getUsername());
+                "Successfully read user request for " + getUserId(userRequestTO));
 
-        return binder.getUserRequestTO(request);
+        return userRequestTO;
     }
 
     @PreAuthorize("isAuthenticated()")
@@ -182,4 +205,46 @@ public class UserRequestController {
 
         return requestToDelete;
     }
+
+    @PreAuthorize("hasRole('USER_REQUEST_READ') and ("
+            + "(hasRole('USER_CREATE') and #request.type == #request.type.CREATE) or "
+            + "(hasRole('USER_UPDATE') and #request.type == #request.type.UPDATE) or "
+            + "(hasRole('USER_DELETE') and #request.type == #request.type.DELETE))")
+    public UserTO execute(final UserRequestTO request, final UserTO reviewed, final UserMod changes) {
+        UserRequest userRequest = userRequestDAO.find(request.getId());
+        if (request == null || request.isExecuted()) {
+            throw new NotFoundException("Executable user request " + request.getId());
+        }
+
+        final UserTO res;
+
+        switch (request.getType()) {
+            case CREATE:
+                res = userController.create(reviewed == null ? request.getUserTO() : reviewed);
+                break;
+            case UPDATE:
+                res = userController.update(changes == null ? request.getUserMod() : changes);
+                break;
+            case DELETE:
+                res = userController.delete(request.getUserId());
+                break;
+            default:
+                throw new NotFoundException("User request " + request.getType());
+        }
+
+        userRequest.setExecuted(true);
+        userRequestDAO.save(userRequest);
+
+        auditManager.audit(Category.userRequest, UserRequestSubCategory.execute, Result.success,
+                String.format("Successfully executed %s request for user %s",
+                request.getType(), getUserId(request)));
+
+        return res;
+    }
+
+    private String getUserId(final UserRequestTO request) {
+        return request.getType() == CREATE ? request.getUserTO().getUsername()
+                : request.getType() == UPDATE ? String.valueOf(request.getUserMod().getId())
+                : String.valueOf(request.getUserId());
+    }
 }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/UserRequestDataBinder.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/UserRequestDataBinder.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/UserRequestDataBinder.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/rest/data/UserRequestDataBinder.java Tue Sep 17 10:50:22 2013
@@ -70,7 +70,8 @@ public class UserRequestDataBinder {
 
     public UserRequestTO getUserRequestTO(final UserRequest request) {
         UserRequestTO result = new UserRequestTO();
-        BeanUtils.copyProperties(request, result);
+        BeanUtils.copyProperties(request, result, new String[] {"executed"});
+        result.setExecuted(request.isExecuted());
 
         return result;
     }

Modified: syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java (original)
+++ syncope/trunk/core/src/main/java/org/apache/syncope/core/services/UserRequestServiceImpl.java Tue Sep 17 10:50:22 2013
@@ -24,8 +24,10 @@ import java.util.List;
 import javax.ws.rs.core.Response;
 
 import org.apache.syncope.common.SyncopeConstants;
+import org.apache.syncope.common.mod.UserMod;
 import org.apache.syncope.common.services.UserRequestService;
 import org.apache.syncope.common.to.UserRequestTO;
+import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.core.rest.controller.UserRequestController;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -74,7 +76,7 @@ public class UserRequestServiceImpl exte
 
     @Override
     public List<UserRequestTO> list() {
-        return controller.list();
+        return controller.list(false);
     }
 
     @Override
@@ -86,4 +88,19 @@ public class UserRequestServiceImpl exte
     public void delete(final Long requestId) {
         controller.deleteRequest(requestId);
     }
+
+    @Override
+    public UserTO executeCreate(final Long requestId, final UserTO reviewed) {
+        return controller.execute(controller.read(requestId), reviewed, null);
+    }
+
+    @Override
+    public UserTO executeUpdate(final Long requestId, final UserMod changes) {
+        return controller.execute(controller.read(requestId), null, changes);
+    }
+
+    @Override
+    public UserTO executeDelete(final Long requestId) {
+        return controller.execute(controller.read(requestId), null, null);
+    }
 }

Modified: syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java
URL: http://svn.apache.org/viewvc/syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java?rev=1523980&r1=1523979&r2=1523980&view=diff
==============================================================================
--- syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java (original)
+++ syncope/trunk/core/src/test/java/org/apache/syncope/core/rest/UserRequestTestITCase.java Tue Sep 17 10:50:22 2013
@@ -21,6 +21,7 @@ package org.apache.syncope.core.rest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.fail;
 
 import java.security.AccessControlException;
@@ -82,7 +83,7 @@ public class UserRequestTestITCase exten
 
         // 4. as anonymous, request user create works
         UserRequestService userRequestService2 = createServiceInstance(UserRequestService.class, null, null);
-        response = createUserRequest(userRequestService2, new UserRequestTO(userTO));
+        createUserRequest(userRequestService2, new UserRequestTO(userTO));
 
         // 5. try to find user
         AttributeCond attrCond = new AttributeCond(AttributeCond.Type.EQ);
@@ -199,6 +200,93 @@ public class UserRequestTestITCase exten
         }
     }
 
+    @Test
+    public void execute() {
+        UserTO userTO = UserTestITCase.getUniqueSampleTO("ex.create@syncope.apache.org");
+        final String initialPassword = userTO.getPassword();
+
+        UserRequestService selfservice = createServiceInstance(UserRequestService.class, null, null);
+        Response response = createUserRequest(selfservice, new UserRequestTO(userTO));
+
+        UserRequestTO userRequest = getObject(response, UserRequestTO.class, userRequestService);
+        assertNotNull(userRequest);
+
+        try {
+            userService.read(userTO.getUsername());
+            fail();
+        } catch (Exception ignore) {
+            // ignore
+        }
+
+        assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+        assertNotNull(userRequestService.executeCreate(userRequest.getId(), userTO));
+        assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
+
+        for (UserRequestTO userRequestTO : userRequestService.list()) {
+            assertFalse(userRequestTO.isExecuted());
+        }
+
+        userTO = userService.read(userTO.getUsername());
+        assertNotNull(userTO);
+
+        UserMod userMod = new UserMod();
+        userMod.setId(userTO.getId());
+
+        selfservice = createServiceInstance(UserRequestService.class, userTO.getUsername(), initialPassword);
+
+        userMod.setPassword("new" + initialPassword);
+        response = createUserRequest(selfservice, new UserRequestTO(userMod));
+
+        userRequest = getObject(response, UserRequestTO.class, userRequestService);
+        assertNotNull(userRequest);
+
+        final String newpwd = "new" + initialPassword + "!";
+
+        UserMod furtherChanges = new UserMod();
+        furtherChanges.setId(userMod.getId());
+        furtherChanges.setPassword(newpwd);
+
+        assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+        assertNotNull(userRequestService.executeUpdate(userRequest.getId(), furtherChanges));
+        assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
+
+        for (UserRequestTO userRequestTO : userRequestService.list()) {
+            assertFalse(userRequestTO.isExecuted());
+        }
+
+        assertNotNull(userService.read(userTO.getUsername()));
+
+        try {
+            createServiceInstance(UserService.class, userTO.getUsername(), "new" + initialPassword).readSelf();
+            fail("Credentials are not updated yet, thus request should raise AccessControlException");
+        } catch (AccessControlException e) {
+            assertNotNull(e);
+        }
+
+        assertNotNull(createServiceInstance(UserService.class, userTO.getUsername(), newpwd).readSelf());
+
+        selfservice = createServiceInstance(UserRequestService.class, userTO.getUsername(), newpwd);
+        response = createUserRequest(selfservice, new UserRequestTO(userTO.getId()));
+
+        userRequest = getObject(response, UserRequestTO.class, userRequestService);
+        assertNotNull(userRequest);
+
+        assertFalse(userRequestService.read(userRequest.getId()).isExecuted());
+        userRequestService.executeDelete(userRequest.getId());
+        assertTrue(userRequestService.read(userRequest.getId()).isExecuted());
+
+        for (UserRequestTO userRequestTO : userRequestService.list()) {
+            assertFalse(userRequestTO.isExecuted());
+        }
+
+        try {
+            userService.read(userTO.getUsername());
+            fail();
+        } catch (Exception ignore) {
+            // ignore
+        }
+    }
+
     private Response createUserRequest(final UserRequestService service, final UserRequestTO userRequestTO) {
         Response response = service.create(userRequestTO);
         if (response.getStatus() != org.apache.http.HttpStatus.SC_CREATED) {