/**
   * Test the validation failure path of the {@link TaskHandlerAction}.
   *
   * @throws Exception on error.
   */
  @Test(expected = AuthorizationException.class)
  public void testExecuteWithQueueServiceActionAuthorizationFailure() throws Exception {
    final ServiceActionContext serviceActionContext = mockery.mock(ServiceActionContext.class);
    transDef.setReadOnly(false);

    final List<UserActionRequest> requests = new ArrayList<UserActionRequest>();
    requests.add(userActionRequest);

    expectTaskHandlerServiceAction();
    mockery.checking(
        new Expectations() {
          {
            allowing(queueSubmitterActionMock).isReadOnly();
            will(returnValue(false));

            oneOf(transMgrMock).getTransaction(transDef);
            will(returnValue(transStatus));

            oneOf(validationStrategy).validate(with(any(ServiceActionContext.class)));

            oneOf(authorizationStrategy).authorize(with(any(ServiceActionContext.class)));
            will(throwException(new AuthorizationException()));

            oneOf(transStatus).isCompleted();
            will(returnValue(false));

            oneOf(transMgrMock).rollback(transStatus);
          }
        });

    sut.execute(serviceActionContext, queueSubmitterActionMock);

    mockery.assertIsSatisfied();
  }
 /** Test. */
 @Test(expected = InvalidActionException.class)
 public void testExecuteMissingAuthorization() {
   ServiceAction action = new ServiceAction(validationStrategy, null, executionStrategy, false);
   final ServiceActionContext context = new ServiceActionContext(null, principalMock);
   sut.execute(context, action);
   mockery.assertIsSatisfied();
 }
  /**
   * Test the failure path of the {@link TaskHandlerAction}.
   *
   * @throws Exception on error.
   */
  @Test(expected = GeneralException.class)
  public void testExecuteWithQueueServiceActionFailure() throws Exception {
    final ServiceActionContext serviceActionContext = mockery.mock(ServiceActionContext.class);
    transDef.setReadOnly(false);

    final List<UserActionRequest> requests = new ArrayList<UserActionRequest>();
    requests.add(userActionRequest);

    final TaskHandlerActionContext<ServiceActionContext> taskHandlerActionContextMock =
        mockery.mock(TaskHandlerActionContext.class);

    setupTaskHandlerTransactionContext(false, taskHandlerActionContextMock, true);

    mockery.checking(
        new Expectations() {
          {
            oneOf(transStatus).isCompleted();
            will(returnValue(false));

            oneOf(transMgrMock).rollback(transStatus);
          }
        });

    sut.execute(serviceActionContext, queueSubmitterActionMock);

    mockery.assertIsSatisfied();
  }
  /**
   * Test the execution of the ServiceActionController with just a service Action and fail on
   * authorization.
   */
  @Test(expected = AuthorizationException.class)
  public void testExecuteWithServiceActionAuthorizationFailure() {
    Serializable params = null;

    final ServiceActionContext serviceActionContext =
        new ServiceActionContext(params, principalMock);
    transDef.setReadOnly(true);

    expectServiceAction();
    mockery.checking(
        new Expectations() {
          {
            allowing(serviceActionMock).isReadOnly();
            will(returnValue(true));

            oneOf(transMgrMock).getTransaction(transDef);
            will(returnValue(transStatus));

            oneOf(validationStrategy).validate(serviceActionContext);

            oneOf(authorizationStrategy).authorize(serviceActionContext);
            will(throwException(new AuthorizationException()));

            oneOf(transStatus).isCompleted();
            will(returnValue(false));

            oneOf(transMgrMock).rollback(transStatus);
          }
        });

    sut.execute(serviceActionContext, serviceActionMock);

    mockery.assertIsSatisfied();
  }
 /** Test. */
 @Test(expected = InvalidActionException.class)
 public void testExecuteTHMissingTaskHandler() {
   TaskHandlerAction action =
       new TaskHandlerServiceAction(
           validationStrategy, authorizationStrategy, taskHandlerExecutionStrategy, null, false);
   sut.execute(new ServiceActionContext(null, principalMock), action);
   mockery.assertIsSatisfied();
 }
  /** Test the execution of the ServiceActionController with just a service Action. */
  @Test
  public void testExecuteWithServiceAction() {
    Serializable params = null;

    final ServiceActionContext serviceActionContext =
        new ServiceActionContext(params, principalMock);
    transDef.setReadOnly(true);

    setupTransactionContext(true, serviceActionContext, false);

    sut.execute(serviceActionContext, serviceActionMock);

    mockery.assertIsSatisfied();
  }
  /**
   * Test the sucessful path of the {@link TaskHandlerAction}.
   *
   * @throws Exception on error.
   */
  @Test
  public void testExecuteWithQueueServiceAction() throws Exception {
    final ServiceActionContext serviceActionContext = mockery.mock(ServiceActionContext.class);
    transDef.setReadOnly(false);

    final List<UserActionRequest> requests = new ArrayList<UserActionRequest>();
    requests.add(userActionRequest);

    final TaskHandlerActionContext<ServiceActionContext> taskHandlerActionContextMock =
        mockery.mock(TaskHandlerActionContext.class);

    setupTaskHandlerTransactionContext(false, taskHandlerActionContextMock, false);

    sut.execute(serviceActionContext, queueSubmitterActionMock);

    mockery.assertIsSatisfied();
  }
  /** Test the execution of the ServiceActionController with just a service Action. */
  @Test(expected = GeneralException.class)
  public void testExecuteWithServiceActionFailure() {
    Serializable params = null;

    final ServiceActionContext serviceActionContext =
        new ServiceActionContext(params, principalMock);
    transDef.setReadOnly(true);

    setupTransactionContext(true, serviceActionContext, true);

    mockery.checking(
        new Expectations() {
          {
            oneOf(transStatus).isCompleted();
            will(returnValue(false));

            oneOf(transMgrMock).rollback(transStatus);
          }
        });

    sut.execute(serviceActionContext, serviceActionMock);

    mockery.assertIsSatisfied();
  }