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);
}
}
