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