Commit 918dd78e authored by Claudiu Cristea's avatar Claudiu Cristea
Browse files

Issue #3278266 by claudiu.cristea: Allow tests to simulate a ticket validation failure

parent cb183693
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -77,6 +77,10 @@ $user_manager = \Drupal::service('cas_mock_server.user_manager');
$users = $user_manager->addUser($user);
```

### Simulate a ticket validation failure

Pass `validation_should_fail=1` as query parameter to the CAS URL, e.g
`/cas?validation_should_fail=1`.

Drush integration
-----------------
+10 −0
Original line number Diff line number Diff line
@@ -76,6 +76,16 @@ class CasMockServerController extends ControllerBase {
  public function validate(): Response {
    $request = $this->requestStack->getCurrentRequest();

    // Tests may simulate ticket validation failure.
    if ($service_url = $request->query->get('service')) {
      if ($service_query_string = parse_url($service_url, PHP_URL_QUERY)) {
        parse_str($service_query_string, $service_query);
        if (array_key_exists('validation_should_fail', $service_query)) {
          throw new \LogicException('Caller requested validation failure');
        }
      }
    }

    // If there is no service ticket we can not validate anything.
    if (!$request->query->has('ticket')) {
      throw new NotFoundHttpException();
+5 −3
Original line number Diff line number Diff line
@@ -102,12 +102,14 @@ class LoginForm extends FormBase {
   */
  public function submitForm(array &$form, FormStateInterface $form_state): void {
    $user = $this->getUser($form_state);
    $service_ticket = ServiceTicketHelper::generateServiceTicket();
    $this->userManager->assignServiceTicket($user['username'], $service_ticket);
    $query = $this->getRequest()->query->all();
    unset($query['service']);
    $query['ticket'] = ServiceTicketHelper::generateServiceTicket();
    $this->userManager->assignServiceTicket($user['username'], $query['ticket']);

    // Redirect to the application but append the 'ticket' to the query string.
    $options = UrlHelper::parse($form_state->getValue('service_url'));
    $options['query']['ticket'] = $service_ticket;
    $options['query'] += $query;
    $uri = $options['path'];
    unset($options['path']);
    $form_state->setRedirectUrl(Url::fromUri($uri, $options));
+0 −1
Original line number Diff line number Diff line
@@ -47,7 +47,6 @@ class ServiceResponseAlterTest extends KernelTestBase {
  protected function setUp(): void {
    parent::setUp();

    $this->installSchema('system', ['key_value_expire']);
    $this->installConfig(['cas', 'cas_mock_server']);

    $this->userManager = $this->container->get('cas_mock_server.user_manager');
+0 −1
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ class UserManagerTest extends KernelTestBase {
  protected function setUp(): void {
    parent::setUp();

    $this->installSchema('system', ['key_value_expire']);
    $this->installConfig(['cas_mock_server']);

    $this->userManager = $this->container->get('cas_mock_server.user_manager');