Parcourir la source

[TOOLS] Setup pa11y to run on pages after codeception

oauth1
Hugo Sales il y a 1 an
Parent
révision
65504b72bb
Signé par: someonewithpc <hugo@hsal.es> ID de la clé GPG: 7D0C7EAFC9D835A0
11 fichiers modifiés avec 51 ajouts et 25 suppressions
  1. +1
    -1
      Makefile
  2. +0
    -1
      docker/accessibility
  3. +3
    -0
      docker/tooling/acceptance_and_accessibility.sh
  4. +10
    -4
      docker/tooling/docker-compose.yaml
  5. +8
    -0
      docker/tooling/pa11y/Dockerfile
  6. +7
    -0
      docker/tooling/pa11y/sshd_config
  7. +1
    -1
      docker/tooling/php/Dockerfile
  8. +8
    -13
      tests/CodeCeption/_support/Helper/AccessibilityValidator.php
  9. +2
    -5
      tests/CodeCeption/acceptance/LoggedOutCest.php
  10. +5
    -0
      tests/CodeCeption/pa11y-config.js
  11. +6
    -0
      tests/CodeCeption/pa11y-config.json

+ 1
- 1
Makefile Voir le fichier

@@ -46,7 +46,7 @@ tooling-php-shell: tooling-docker
docker exec -it $(call translate-container-name,tooling_php_1) sh

acceptance-and-accessibility: tooling-docker
docker exec -it $(call translate-container-name,tooling_php_1) sh -c "SYMFONY_DEPRECATIONS_HELPER=weak vendor/bin/codecept run"
docker exec -it $(call translate-container-name,tooling_php_1) /var/tooling/acceptance_and_accessibility.sh

test: tooling-docker
docker exec $(call translate-container-name,tooling_php_1) /var/tooling/coverage.sh $(call args,'')


+ 0
- 1
docker/accessibility

@@ -1 +0,0 @@
Subproject commit abcd45f8ecd361ae1b84cc40df4dbf2548735035

+ 3
- 0
docker/tooling/acceptance_and_accessibility.sh Voir le fichier

@@ -0,0 +1,3 @@
#!/bin/sh

SYMFONY_DEPRECATIONS_HELPER=weak vendor/bin/codecept run

+ 10
- 4
docker/tooling/docker-compose.yaml Voir le fichier

@@ -2,10 +2,11 @@ version: '3'

services:
php:
build: .
build: php
depends_on:
- db
- redis
- pa11y
volumes:
# Entrypoint
- ../php/entrypoint.sh:/entrypoint.sh
@@ -13,6 +14,7 @@ services:
- ../social/install.sh:/var/entrypoint.d/0_social_install.sh
- ./coverage.sh:/var/tooling/coverage.sh
- ./phpstan.sh:/var/tooling/phpstan.sh
- ./acceptance_and_accessibility.sh:/var/tooling/acceptance_and_accessibility.sh
# Main files
- ../../:/var/www/social
- /var/www/social/docker # exclude docker folder
@@ -28,9 +30,6 @@ services:
- php
restart: always
tty: false
# ports:
# - "8080:80"
# - "4443:443"
volumes:
# Nginx
- ../nginx/nginx.conf:/var/nginx/social.conf
@@ -44,6 +43,13 @@ services:
- ../bootstrap/bootstrap.env
command: /bin/sh -c '/var/nginx/domain.sh; nginx -g "daemon off;"'

pa11y:
build: pa11y
volumes:
- ../../tests/CodeCeption/pa11y-config.json:/pa11y/config.json
cap_add:
- SYS_ADMIN

db:
image: postgres:alpine
environment:


+ 8
- 0
docker/tooling/pa11y/Dockerfile Voir le fichier

@@ -0,0 +1,8 @@
FROM node

RUN apt-get update && apt-get -y install npm openssh-server && npm install -g pa11y

COPY sshd_config /etc/ssh/sshd_config
RUN echo 'root:pa11y' | chpasswd

ENTRYPOINT service ssh start && sleep infinity

+ 7
- 0
docker/tooling/pa11y/sshd_config Voir le fichier

@@ -0,0 +1,7 @@
ChallengeResponseAuthentication no
ListenAddress 0.0.0.0
PasswordAuthentication yes
PermitEmptyPasswords yes
PermitRootLogin yes
Port 22


docker/tooling/Dockerfile → docker/tooling/php/Dockerfile Voir le fichier

@@ -7,4 +7,4 @@ RUN apk update \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug

RUN apk add npm && npm install -g pa11y
RUN apk add --no-cache openssh sshpass

+ 8
- 13
tests/CodeCeption/_support/Helper/AccessibilityValidator.php Voir le fichier

@@ -92,21 +92,16 @@ class AccessibilityValidator extends \Codeception\Module
throw new Exception('Unknown standard: ' . $standard);
}

$pa11yPath = $this->_getConfig('pa11yPath');
if (!$pa11yPath) {
$pa11yPath = 'pa11y';
}
if (!file_exists($pa11yPath)) {
throw new Exception('pa11y not found: ' . $pa11yPath);
}
exec('sshpass -p pa11y ssh -o StrictHostKeyChecking=no pa11y 2>/dev/null pa11y -c /pa11y/config.json' . ' -s ' . $standard . " -r json '" . addslashes($url) . "'", $output);

exec($pa11yPath . ' -s ' . $standard . " -r json '" . addslashes($url) . "'", $return);
$data = json_decode($return[0], true);
if (!$data) {
$msg = 'Invalid data returned from validation service: ';
throw new Exception($msg . $return);
if (!empty($output)) {
$data = json_decode($output[0], true);
if (!$data) {
throw new Exception('Invalid data returned from validation service: ' . implode("\n", $output));
}
return $data;
}
return $data;
return [];
}

/**


tests/CodeCeption/acceptance/FirstCest.php → tests/CodeCeption/acceptance/LoggedOutCest.php Voir le fichier

@@ -2,15 +2,12 @@

declare(strict_types = 1);

class FirstCest
class LoggedOutCest
{
public function _before(AcceptanceTester $I)
{
}

public function root(AcceptanceTester $I)
{
$I->amOnPage('/');
$I->see('Feed');
$I->validatePa11y(\Helper\AccessibilityValidator::STANDARD_WCAG2AAA);
}
}

+ 5
- 0
tests/CodeCeption/pa11y-config.js Voir le fichier

@@ -0,0 +1,5 @@
{
"chromeLaunchConfig": {
"args": ["--no-sandbox"]
}
}

+ 6
- 0
tests/CodeCeption/pa11y-config.json Voir le fichier

@@ -0,0 +1,6 @@
{
"chromeLaunchConfig": {
"args": ["--no-sandbox"],
"ignoreHTTPSErrors": true
}
}

Chargement…
Annuler
Enregistrer