accessibility_scanner-8.x-1.0-alpha8/tests/src/Unit/Plugin/CaptureResponse/AxeCoreCliCaptureResponseTest.php

tests/src/Unit/Plugin/CaptureResponse/AxeCoreCliCaptureResponseTest.php
<?php

namespace Drupal\Tests\accessibility_scanner\Unit\Plugin\CaptureResponse;

use Drupal\Component\Serialization\Json;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\Url;
use Drupal\Tests\UnitTestCase;
use Drupal\accessibility_scanner\Plugin\CaptureResponse\AxeCoreCliCaptureResponse;

/**
 * Tests the AxeCoreCliCaptureResponse class.
 *
 * @group accessibility_scanner
 * @requires module web_page_archive
 */
class AxeCoreCliCaptureResponseTest extends UnitTestCase {

  use StringTranslationTrait;

  /**
   * Test AxeCoreCliCaptureResponse::retrieveFileContents().
   */
  public function testRetrieveFileContentsLoadsValidJson() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $actual = $response->retrieveFileContents();
    $this->assertNotEmpty($actual[0]['inapplicable']);
    $this->assertNotEmpty($actual[0]['violations']);
    $this->assertNotEmpty($actual[0]['passes']);
  }

  /**
   * Test AxeCoreCliCaptureResponse::retrieveFileContents().
   */
  public function testRetrieveFileContentsDoesntLoadInvalidJson() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-invalid.json', 'http://www.drupal.org');
    $actual = $response->retrieveFileContents();
    $this->assertEmpty($actual);
  }

  /**
   * Test AxeCoreCliCaptureResponse::generateSummary().
   */
  public function testGenerateSummaryPopulatesExpectedEmptyData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $actual = $response->generateSummary([]);
    $expected = [
      'tags' => '',
      'num_distinct_violations' => 0,
      'num_total_violations' => 0,
      'num_distinct_inapplicable' => 0,
      'num_total_inapplicable' => 0,
      'num_distinct_incomplete' => 0,
      'num_total_incomplete' => 0,
      'num_distinct_passes' => 0,
      'num_total_passes' => 0,
      'num_distinct_violations_critical' => 0,
      'num_total_violations_critical' => 0,
      'num_distinct_inapplicable_critical' => 0,
      'num_total_inapplicable_critical' => 0,
      'num_distinct_incomplete_critical' => 0,
      'num_total_incomplete_critical' => 0,
      'num_distinct_passes_critical' => 0,
      'num_total_passes_critical' => 0,
      'num_distinct_violations_serious' => 0,
      'num_total_violations_serious' => 0,
      'num_distinct_inapplicable_serious' => 0,
      'num_total_inapplicable_serious' => 0,
      'num_distinct_incomplete_serious' => 0,
      'num_total_incomplete_serious' => 0,
      'num_distinct_passes_serious' => 0,
      'num_total_passes_serious' => 0,
      'num_distinct_violations_moderate' => 0,
      'num_total_violations_moderate' => 0,
      'num_distinct_inapplicable_moderate' => 0,
      'num_total_inapplicable_moderate' => 0,
      'num_distinct_incomplete_moderate' => 0,
      'num_total_incomplete_moderate' => 0,
      'num_distinct_passes_moderate' => 0,
      'num_total_passes_moderate' => 0,
      'num_distinct_violations_minor' => 0,
      'num_total_violations_minor' => 0,
      'num_distinct_inapplicable_minor' => 0,
      'num_total_inapplicable_minor' => 0,
      'num_distinct_incomplete_minor' => 0,
      'num_total_incomplete_minor' => 0,
      'num_distinct_passes_minor' => 0,
      'num_total_passes_minor' => 0,
      'is_passing' => TRUE,
    ];
    $this->assertEquals($expected, $actual);
  }

  /**
   * Test AxeCoreCliCaptureResponse::generateSummary().
   */
  public function testGenerateSummaryPopulatesExpectedPassingMockData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-passing.json', 'http://www.drupal.org');
    $contents = $response->retrieveFileContents();
    $actual = $response->generateSummary($contents);
    $expected = [
      'tags' => 'wcag21aa',
      'num_distinct_violations' => 0,
      'num_total_violations' => 0,
      'num_distinct_inapplicable' => 1,
      'num_total_inapplicable' => 0,
      'num_distinct_incomplete' => 0,
      'num_total_incomplete' => 0,
      'num_distinct_passes' => 1,
      'num_total_passes' => 1,
      'num_distinct_violations_critical' => 0,
      'num_total_violations_critical' => 0,
      'num_distinct_inapplicable_critical' => 0,
      'num_total_inapplicable_critical' => 0,
      'num_distinct_incomplete_critical' => 0,
      'num_total_incomplete_critical' => 0,
      'num_distinct_passes_critical' => 0,
      'num_total_passes_critical' => 0,
      'num_distinct_violations_serious' => 0,
      'num_total_violations_serious' => 0,
      'num_distinct_inapplicable_serious' => 0,
      'num_total_inapplicable_serious' => 0,
      'num_distinct_incomplete_serious' => 0,
      'num_total_incomplete_serious' => 0,
      'num_distinct_passes_serious' => 0,
      'num_total_passes_serious' => 0,
      'num_distinct_violations_moderate' => 0,
      'num_total_violations_moderate' => 0,
      'num_distinct_inapplicable_moderate' => 0,
      'num_total_inapplicable_moderate' => 0,
      'num_distinct_incomplete_moderate' => 0,
      'num_total_incomplete_moderate' => 0,
      'num_distinct_passes_moderate' => 0,
      'num_total_passes_moderate' => 0,
      'num_distinct_violations_minor' => 0,
      'num_total_violations_minor' => 0,
      'num_distinct_inapplicable_minor' => 0,
      'num_total_inapplicable_minor' => 0,
      'num_distinct_incomplete_minor' => 0,
      'num_total_incomplete_minor' => 0,
      'num_distinct_passes_minor' => 0,
      'num_total_passes_minor' => 0,
      'is_passing' => TRUE,
    ];
    $this->assertEquals($expected, $actual);
  }

  /**
   * Test AxeCoreCliCaptureResponse::generateSummary().
   */
  public function testGenerateSummaryPopulatesExpectedFailingMockData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $contents = $response->retrieveFileContents();
    $actual = $response->generateSummary($contents);
    $expected = [
      'tags' => 'wcag21aa, best-practice',
      'num_distinct_violations' => 2,
      'num_total_violations' => 10,
      'num_distinct_inapplicable' => 18,
      'num_total_inapplicable' => 0,
      'num_distinct_incomplete' => 1,
      'num_total_incomplete' => 1,
      'num_distinct_passes' => 12,
      'num_total_passes' => 30,
      'num_distinct_violations_critical' => 0,
      'num_total_violations_critical' => 0,
      'num_distinct_inapplicable_critical' => 0,
      'num_total_inapplicable_critical' => 0,
      'num_distinct_incomplete_critical' => 1,
      'num_total_incomplete_critical' => 1,
      'num_distinct_passes_critical' => 0,
      'num_total_passes_critical' => 0,
      'num_distinct_violations_serious' => 0,
      'num_total_violations_serious' => 0,
      'num_distinct_inapplicable_serious' => 0,
      'num_total_inapplicable_serious' => 0,
      'num_distinct_incomplete_serious' => 0,
      'num_total_incomplete_serious' => 0,
      'num_distinct_passes_serious' => 0,
      'num_total_passes_serious' => 0,
      'num_distinct_violations_moderate' => 2,
      'num_total_violations_moderate' => 10,
      'num_distinct_inapplicable_moderate' => 0,
      'num_total_inapplicable_moderate' => 0,
      'num_distinct_incomplete_moderate' => 0,
      'num_total_incomplete_moderate' => 0,
      'num_distinct_passes_moderate' => 1,
      'num_total_passes_moderate' => 19,
      'num_distinct_violations_minor' => 0,
      'num_total_violations_minor' => 0,
      'num_distinct_inapplicable_minor' => 0,
      'num_total_inapplicable_minor' => 0,
      'num_distinct_incomplete_minor' => 0,
      'num_total_incomplete_minor' => 0,
      'num_distinct_passes_minor' => 0,
      'num_total_passes_minor' => 0,
      'is_passing' => FALSE,
    ];
    $this->assertEquals($expected, $actual);
  }

  /**
   * Test AxeCoreCliCaptureResponse::renderable().
   */
  public function testRenderablePassingPreview() {
    $options = [
      'mode' => 'preview',
      'vid' => 20,
      'delta' => 3,
    ];
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-passing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());
    $expected = [
      '#theme' => 'wpa-axecore-cli-preview',
      '#summary' => [
        'tags' => 'wcag21aa',
        'num_distinct_violations' => 0,
        'num_total_violations' => 0,
        'num_distinct_inapplicable' => 1,
        'num_total_inapplicable' => 0,
        'num_distinct_incomplete' => 0,
        'num_total_incomplete' => 0,
        'num_distinct_passes' => 1,
        'num_total_passes' => 1,
        'num_distinct_violations_critical' => 0,
        'num_total_violations_critical' => 0,
        'num_distinct_inapplicable_critical' => 0,
        'num_total_inapplicable_critical' => 0,
        'num_distinct_incomplete_critical' => 0,
        'num_total_incomplete_critical' => 0,
        'num_distinct_passes_critical' => 0,
        'num_total_passes_critical' => 0,
        'num_distinct_violations_serious' => 0,
        'num_total_violations_serious' => 0,
        'num_distinct_inapplicable_serious' => 0,
        'num_total_inapplicable_serious' => 0,
        'num_distinct_incomplete_serious' => 0,
        'num_total_incomplete_serious' => 0,
        'num_distinct_passes_serious' => 0,
        'num_total_passes_serious' => 0,
        'num_distinct_violations_moderate' => 0,
        'num_total_violations_moderate' => 0,
        'num_distinct_inapplicable_moderate' => 0,
        'num_total_inapplicable_moderate' => 0,
        'num_distinct_incomplete_moderate' => 0,
        'num_total_incomplete_moderate' => 0,
        'num_distinct_passes_moderate' => 0,
        'num_total_passes_moderate' => 0,
        'num_distinct_violations_minor' => 0,
        'num_total_violations_minor' => 0,
        'num_distinct_inapplicable_minor' => 0,
        'num_total_inapplicable_minor' => 0,
        'num_distinct_incomplete_minor' => 0,
        'num_total_incomplete_minor' => 0,
        'num_distinct_passes_minor' => 0,
        'num_total_passes_minor' => 0,
        'is_passing' => TRUE,
      ],
      '#url' => 'http://www.drupal.org',
      '#view_button' => [
        '#type' => 'link',
        '#url' => new Url('entity.web_page_archive.modal', [
          'delta' => 3,
          'web_page_archive_run_revision' => 20,
        ]),
        '#title' => $this->t('View Detailed Report'),
        '#attributes' => [
          'class' => ['button', 'use-ajax'],
          'data-dialog-type' => 'modal',
          'data-dialog-options' => Json::encode(['width' => 1280]),
        ],
      ],
    ];
    $actual = $response->renderable($options);
    $this->assertEquals($expected, $actual);
  }

  /**
   * Test AxeCoreCliCaptureResponse::renderable().
   */
  public function testRenderableFailingPreview() {
    $options = [
      'mode' => 'preview',
      'vid' => 20,
      'delta' => 3,
    ];
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());
    $expected = [
      '#theme' => 'wpa-axecore-cli-preview',
      '#summary' => [
        'tags' => 'wcag21aa, best-practice',
        'num_distinct_violations' => 2,
        'num_total_violations' => 10,
        'num_distinct_inapplicable' => 18,
        'num_total_inapplicable' => 0,
        'num_distinct_incomplete' => 1,
        'num_total_incomplete' => 1,
        'num_distinct_passes' => 12,
        'num_total_passes' => 30,
        'num_distinct_violations_critical' => 0,
        'num_total_violations_critical' => 0,
        'num_distinct_inapplicable_critical' => 0,
        'num_total_inapplicable_critical' => 0,
        'num_distinct_incomplete_critical' => 1,
        'num_total_incomplete_critical' => 1,
        'num_distinct_passes_critical' => 0,
        'num_total_passes_critical' => 0,
        'num_distinct_violations_serious' => 0,
        'num_total_violations_serious' => 0,
        'num_distinct_inapplicable_serious' => 0,
        'num_total_inapplicable_serious' => 0,
        'num_distinct_incomplete_serious' => 0,
        'num_total_incomplete_serious' => 0,
        'num_distinct_passes_serious' => 0,
        'num_total_passes_serious' => 0,
        'num_distinct_violations_moderate' => 2,
        'num_total_violations_moderate' => 10,
        'num_distinct_inapplicable_moderate' => 0,
        'num_total_inapplicable_moderate' => 0,
        'num_distinct_incomplete_moderate' => 0,
        'num_total_incomplete_moderate' => 0,
        'num_distinct_passes_moderate' => 1,
        'num_total_passes_moderate' => 19,
        'num_distinct_violations_minor' => 0,
        'num_total_violations_minor' => 0,
        'num_distinct_inapplicable_minor' => 0,
        'num_total_inapplicable_minor' => 0,
        'num_distinct_incomplete_minor' => 0,
        'num_total_incomplete_minor' => 0,
        'num_distinct_passes_minor' => 0,
        'num_total_passes_minor' => 0,
        'is_passing' => FALSE,
      ],
      '#url' => 'http://www.drupal.org',
      '#view_button' => [
        '#type' => 'link',
        '#url' => new Url('entity.web_page_archive.modal', [
          'delta' => 3,
          'web_page_archive_run_revision' => 20,
        ]),
        '#title' => $this->t('View Detailed Report'),
        '#attributes' => [
          'class' => ['button', 'use-ajax'],
          'data-dialog-type' => 'modal',
          'data-dialog-options' => Json::encode(['width' => 1280]),
        ],
      ],
    ];
    $actual = $response->renderable($options);
    $this->assertEquals($expected, $actual);
  }

  /**
   * Tests AxeCoreCliCaptureResponse::getReportData().
   */
  public function testGetReportDataRetrievesPassingResponseData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-passing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());

    $expected = [
      'URL' => 'http://www.drupal.org',
      'Tags' => 'wcag21aa',
      'Distinct Violations (All)' => 0,
      'Total Violations (All)' => 0,
      'Distinct Violations (Critical)' => 0,
      'Total Violations (Critical)' => 0,
      'Distinct Violations (Serious)' => 0,
      'Total Violations (Serious)' => 0,
      'Distinct Violations (Moderate)' => 0,
      'Total Violations (Moderate)' => 0,
      'Distinct Violations (Minor)' => 0,
      'Total Violations (Minor)' => 0,
      'Inapplicable Rules' => 1,
      'Distinct Incomplete' => 0,
      'Total Incomplete' => 0,
      'Distinct Passes' => 1,
      'Total Passes' => 1,
      'Passing?' => 'Yes',
    ];
    $actual = $response->getReportData();
    $this->assertEquals($expected, $actual);
  }

  /**
   * Tests AxeCoreCliCaptureResponse::getReportData().
   */
  public function testGetReportDataRetrievesFailingResponseData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());

    $expected = [
      'URL' => 'http://www.drupal.org',
      'Tags' => 'wcag21aa, best-practice',
      'Distinct Violations (All)' => 2,
      'Total Violations (All)' => 10,
      'Distinct Violations (Critical)' => 0,
      'Total Violations (Critical)' => 0,
      'Distinct Violations (Serious)' => 0,
      'Total Violations (Serious)' => 0,
      'Distinct Violations (Moderate)' => 2,
      'Total Violations (Moderate)' => 10,
      'Distinct Violations (Minor)' => 0,
      'Total Violations (Minor)' => 0,
      'Inapplicable Rules' => 18,
      'Distinct Incomplete' => 1,
      'Total Incomplete' => 1,
      'Distinct Passes' => 12,
      'Total Passes' => 30,
      'Passing?' => 'No',
    ];
    $actual = $response->getReportData();
    $this->assertEquals($expected, $actual);
  }

  /**
   * Tests AxeCoreCliCaptureResponse::getAggregateReportData().
   */
  public function testGetAggregateReportDataRetrievesPassingResponseData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-passing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());

    $expected = [
      '#all_tags' => [
        'incomplete' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
        'violations' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
      ],
      'wcag21aa' => [
        'incomplete' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
        'violations' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
      ],
    ];
    $actual = $response->getAggregateReportData();
    $this->assertEquals($expected, $actual);
  }

  /**
   * Tests AxeCoreCliCaptureResponse::getAggregateReportData().
   */
  public function testGetAggregateReportDataRetrievesFailingResponseData() {
    $response = new AxeCoreCliCaptureResponse(__DIR__ . '/../../../../fixtures/axe-failing.json', 'http://www.drupal.org');
    $response->setStringTranslation($this->getStringTranslationStub());
    $this->setStringTranslation($this->getStringTranslationStub());

    $expected = [
      '#all_tags' => [
        'incomplete' => [
          '#all_severities' => [
            'distinct' => 1,
            'total' => 1,
          ],
          'critical' => [
            'distinct' => 1,
            'total' => 1,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
        'violations' => [
          '#all_severities' => [
            'distinct' => 2,
            'total' => 10,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 2,
            'total' => 10,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
      ],
      'wcag21aa' => [
        'incomplete' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
        'violations' => [
          '#all_severities' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
      ],
      'best-practice' => [
        'incomplete' => [
          '#all_severities' => [
            'distinct' => 1,
            'total' => 1,
          ],
          'critical' => [
            'distinct' => 1,
            'total' => 1,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
        'violations' => [
          '#all_severities' => [
            'distinct' => 2,
            'total' => 10,
          ],
          'critical' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'serious' => [
            'distinct' => 0,
            'total' => 0,
          ],
          'moderate' => [
            'distinct' => 2,
            'total' => 10,
          ],
          'minor' => [
            'distinct' => 0,
            'total' => 0,
          ],
        ],
      ],
    ];
    $actual = $response->getAggregateReportData();
    $this->assertEquals($expected, $actual);
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc