diff --git a/.github/workflows/TestFunctional.yml b/.github/workflows/TestFunctional.yml new file mode 100644 index 00000000..c42425c7 --- /dev/null +++ b/.github/workflows/TestFunctional.yml @@ -0,0 +1,268 @@ +name: Test Functional Tests +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + Build: + runs-on: ubuntu-latest + steps: + - name: Create a Drupal project + run: composer create-project drupal/recommended-project . --ignore-platform-req=ext-gd + + - uses: actions/checkout@v3 + with: + path: drainpipe + + - name: Setup drainpipe-dev + run: mv drainpipe/drainpipe-dev . + + - uses: ./drainpipe/scaffold/github/actions/common/set-env + + - name: Install DDEV + uses: ./drainpipe/scaffold/github/actions/common/ddev + with: + git-name: Drainpipe Bot + git-email: no-reply@example.com + + - name: Setup Project + run: | + ddev config --auto + ddev start + ddev composer config extra.drupal-scaffold.gitignore true + ddev composer config --json extra.drupal-scaffold.allowed-packages '["lullabot/drainpipe-dev", "lullabot/drainpipe"]' + ddev composer config --no-plugins allow-plugins.composer/installers true + ddev composer config --no-plugins allow-plugins.drupal/core-composer-scaffold true + ddev composer config --no-plugins allow-plugins.lullabot/drainpipe true + ddev composer config --no-plugins allow-plugins.lullabot/drainpipe-dev true + ddev composer config repositories.drainpipe --json '{"type": "path", "url": "drainpipe", "options": {"symlink": false}}' + ddev composer config repositories.drainpipe-dev --json '{"type": "path", "url": "drainpipe-dev", "options": {"symlink": false}}' + ddev composer config minimum-stability dev + ddev composer require "lullabot/drainpipe @dev" --with-all-dependencies + ddev composer require "lullabot/drainpipe-dev @dev" --dev --with-all-dependencies + + - name: Setup Nightwatch + run: | + echo "hooks:" >> .ddev/config.yaml + echo " post-start:" >> .ddev/config.yaml + echo " - exec: mysql -uroot -proot -hdb -e \"CREATE DATABASE IF NOT EXISTS firefox; GRANT ALL ON firefox.* TO 'db'@'%';\"" >> .ddev/config.yaml + echo " - exec: mysql -uroot -proot -hdb -e \"CREATE DATABASE IF NOT EXISTS chrome; GRANT ALL ON chrome.* TO 'db'@'%';\"" >> .ddev/config.yaml + ddev config --web-environment="NIGHTWATCH_DRUPAL_URL_FIREFOX=https://drupal_firefox,NIGHTWATCH_DRUPAL_URL_CHROME=https://drupal_chrome" + ddev config --additional-hostnames="*.drainpipe" + + - name: Create Artifact + run: zip -r /tmp/drainpipe.zip ./ + + - name: Upload Artifact + uses: actions/upload-artifact@v3 + with: + name: test-functional-build + path: /tmp/drainpipe.zip + + Test-NPM: + runs-on: ubuntu-latest + needs: Build + steps: + - uses: actions/download-artifact@v3 + with: + name: test-functional-build + + - name: Restore Workspace + run: | + cd ../ + mv ${{ github.workspace }}/drainpipe.zip /tmp/drainpipe.zip + unzip -o /tmp/drainpipe.zip -d ${{ github.workspace }} + cd ${{ github.workspace }} + + - uses: ./drainpipe/scaffold/github/actions/common/set-env + + - name: Install DDEV + uses: ./drainpipe/scaffold/github/actions/common/ddev + with: + git-name: Drainpipe Bot + git-email: no-reply@example.com# + + - name: Start DDEV + run: ddev start + + - name: Setup Nightwatch + run: | + ddev npm init -y + ddev npm install nightwatch nightwatch-accessibility @lullabot/nightwatch-drupal-commands --save-dev + + - name: Install Drupal + run: | + ddev drush --yes site:install + ddev drush --uri=https://drupal_firefox --yes site:install + ddev drush --uri=https://drupal_chrome --yes site:install + ddev drush config:export --yes + + - name: Run Functional Tests + run: ddev task test:functional + + - name: Upload test artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: test_result + path: test_result + + Test-Yarn-Classic: + runs-on: ubuntu-latest + needs: Build + steps: + - uses: actions/download-artifact@v3 + with: + name: test-functional-build + + - name: Restore Workspace + run: | + cd ../ + mv ${{ github.workspace }}/drainpipe.zip /tmp/drainpipe.zip + unzip -o /tmp/drainpipe.zip -d ${{ github.workspace }} + cd ${{ github.workspace }} + + - uses: ./drainpipe/scaffold/github/actions/common/set-env + + - name: Install DDEV + uses: ./drainpipe/scaffold/github/actions/common/ddev + with: + git-name: Drainpipe Bot + git-email: no-reply@example.com# + + - name: Start DDEV + run: ddev start + + - name: Setup Nightwatch + run: | + ddev yarn set version classic + ddev yarn init -y + ddev yarn add nightwatch nightwatch-accessibility @lullabot/nightwatch-drupal-commands --dev + + - name: Install Drupal + run: | + ddev drush --yes site:install + ddev drush --uri=https://drupal_firefox --yes site:install + ddev drush --uri=https://drupal_chrome --yes site:install + ddev drush config:export --yes + + - name: Run Functional Tests + run: ddev task test:functional + + - name: Upload test artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: test_result + path: test_result + + Test-Yarn-Berry-Node-Linker: + runs-on: ubuntu-latest + needs: Build + steps: + - uses: actions/download-artifact@v3 + with: + name: test-functional-build + + - name: Restore Workspace + run: | + cd ../ + mv ${{ github.workspace }}/drainpipe.zip /tmp/drainpipe.zip + unzip -o /tmp/drainpipe.zip -d ${{ github.workspace }} + cd ${{ github.workspace }} + + - uses: ./drainpipe/scaffold/github/actions/common/set-env + + - name: Install DDEV + uses: ./drainpipe/scaffold/github/actions/common/ddev + with: + git-name: Drainpipe Bot + git-email: no-reply@example.com# + + - name: Start DDEV + run: ddev start + + - name: Setup Nightwatch + run: | + ddev yarn set version berry + ddev yarn init -y + yarn config set nodeLinker node-modules + ddev yarn add nightwatch nightwatch-accessibility @lullabot/nightwatch-drupal-commands --dev + + - name: Install Drupal + run: | + ddev drush --yes site:install + ddev drush --uri=https://drupal_firefox --yes site:install + ddev drush --uri=https://drupal_chrome --yes site:install + ddev drush config:export --yes + + - name: Run Functional Tests + run: ddev task test:functional + + - name: Upload test artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: test_result + path: test_result + + Test-Yarn-Berry: + runs-on: ubuntu-latest + needs: Build + steps: + - uses: actions/download-artifact@v3 + with: + name: test-functional-build + + - name: Restore Workspace + run: | + cd ../ + mv ${{ github.workspace }}/drainpipe.zip /tmp/drainpipe.zip + unzip -o /tmp/drainpipe.zip -d ${{ github.workspace }} + cd ${{ github.workspace }} + + - uses: ./drainpipe/scaffold/github/actions/common/set-env + + - name: Install DDEV + uses: ./drainpipe/scaffold/github/actions/common/ddev + with: + git-name: Drainpipe Bot + git-email: no-reply@example.com# + + - name: Start DDEV + run: ddev start + + - name: Setup Nightwatch + run: | + ddev yarn set version berry + ddev yarn init -y + echo "packageExtensions:" >> .yarnrc.yml + echo ' "nightwatch@*":' >> .yarnrc.yml + echo ' dependencies:' >> .yarnrc.yml + echo ' ws: "*"' >> .yarnrc.yml + ddev yarn add nightwatch nightwatch-accessibility @lullabot/nightwatch-drupal-commands ws --dev + yarn + + - name: Install Drupal + run: | + ddev drush --yes site:install + ddev drush --uri=https://drupal_firefox --yes site:install + ddev drush --uri=https://drupal_chrome --yes site:install + ddev drush config:export --yes + + - name: Run Functional Tests + run: ddev task test:functional + + - name: Upload test artifacts + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: test_result + path: test_result diff --git a/.github/workflows/test-phpunit.yml b/.github/workflows/TestPHPUnit.yml similarity index 100% rename from .github/workflows/test-phpunit.yml rename to .github/workflows/TestPHPUnit.yml diff --git a/drainpipe-dev/config/nightwatch.conf.js b/drainpipe-dev/config/nightwatch.conf.js index 72592e93..cb214141 100644 --- a/drainpipe-dev/config/nightwatch.conf.js +++ b/drainpipe-dev/config/nightwatch.conf.js @@ -6,10 +6,12 @@ try { drupalCommandsPath = resolveToUnqualified('@lullabot/nightwatch-drupal-commands', __filename).replace(/\/$/, ''); yarn2 = true; } catch(e) { - a11yPath = './node_modules/nightwatch-accessibility'; + a11yPath = './node_modules/nightwatch-accessibility/nightwatch'; drupalCommandsPath = './node_modules/@lullabot/nightwatch-drupal-commands'; } +const firefoxLaunchUrl = process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX && process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX.length ? process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX.replace(/\/$/, '') : process.env.NIGHTWATCH_DRUPAL_URL; +const chromeLaunchUrl = process.env.NIGHTWATCH_DRUPAL_URL_CHROME && process.env.NIGHTWATCH_DRUPAL_URL_CHROME.length ? process.env.NIGHTWATCH_DRUPAL_URL_CHROME.replace(/\/$/, '') : process.env.NIGHTWATCH_DRUPAL_URL; module.exports = { // An array of folders (excluding subfolders) where your tests are located; @@ -32,50 +34,33 @@ module.exports = { webdriver: {}, + test_workers: { + enabled: false + }, + test_settings: { default: { filter: '**/*.nightwatch.js', - "screenshots" : { - "enabled" : true, - "on_failure" : true, - "on_error" : false, - "path" : "test_result" - } - }, - firefox: { - desiredCapabilities: { - resolution: "1240x4000", - browserName: 'firefox', - acceptInsecureCerts: true, - alwaysMatch: { - 'moz:firefoxOptions': { - args: [ - //'-headless', - // '-verbose' - ] - } - } - }, - webdriver: { - start_process: false, - host: 'firefox', - port: 4444, - cli_args: [ - // very verbose geckodriver logs - // '-vv' - ] - }, - globals: { - drupalUrl: process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX && process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX.length ? process.env.NIGHTWATCH_DRUPAL_URL_FIREFOX.replace(/\/$/, '') : process.env.NIGHTWATCH_DRUPAL_URL, + disable_error_log: false, + screenshots: { + enabled: false, + on_failure: true, + on_error: false, + path: 'test_result', }, }, + chrome: { + selenium: { + start_process: false, + host: 'chrome', + port: 4444 + }, desiredCapabilities: { - resolution: "1240x4000", browserName: 'chrome', + esolution: "1240x4000", 'goog:chromeOptions': { - // More info on Chromedriver: https://sites.google.com/a/chromium.org/chromedriver/ - // + w3c: true, args: [ '--no-sandbox', '--ignore-certificate-errors', @@ -84,17 +69,33 @@ module.exports = { ] } }, - webdriver: { + globals: { + drupalUrl: chromeLaunchUrl, + }, + launch_url: chromeLaunchUrl, + }, + + firefox: { + selenium: { start_process: false, - host: 'chrome', - port: 4444, - cli_args: [ - // --verbose - ] + host: 'firefox', + port: 4444 + }, + desiredCapabilities: { + browserName: 'firefox', + resolution: "1240x4000", + acceptInsecureCerts: true, + 'moz:firefoxOptions': { + args: [ + // '-headless', + // '-verbose' + ] + } }, globals: { - drupalUrl: process.env.NIGHTWATCH_DRUPAL_URL_CHROME && process.env.NIGHTWATCH_DRUPAL_URL_CHROME.length ? process.env.NIGHTWATCH_DRUPAL_URL_CHROME.replace(/\/$/, '') : process.env.NIGHTWATCH_DRUPAL_URL, + drupalUrl: firefoxLaunchUrl, }, + launch_url: firefoxLaunchUrl, }, } }; diff --git a/drainpipe-dev/scaffold/nightwatch/docker-compose.selenium.yaml b/drainpipe-dev/scaffold/nightwatch/docker-compose.selenium.yaml index 68d2a63c..093d9171 100644 --- a/drainpipe-dev/scaffold/nightwatch/docker-compose.selenium.yaml +++ b/drainpipe-dev/scaffold/nightwatch/docker-compose.selenium.yaml @@ -37,7 +37,7 @@ services: expose: - 7901 environment: - - NO_VNC_PORT=7901 + - SE_NO_VNC_PORT=7901 - VIRTUAL_HOST=$DDEV_HOSTNAME - HTTPS_EXPOSE=7901:7901 - HTTP_EXPOSE=7911:7901 diff --git a/scaffold/phpunit-testtraits.xml b/scaffold/phpunit-testtraits.xml index 4f6163e8..85efdfd8 100644 --- a/scaffold/phpunit-testtraits.xml +++ b/scaffold/phpunit-testtraits.xml @@ -26,10 +26,10 @@ --> - + - + diff --git a/scaffold/phpunit.xml b/scaffold/phpunit.xml index 383b5b68..5f3f9d1d 100644 --- a/scaffold/phpunit.xml +++ b/scaffold/phpunit.xml @@ -26,7 +26,7 @@ --> - + diff --git a/tasks/test.yml b/tasks/test.yml index 97f10aba..518243f0 100644 --- a/tasks/test.yml +++ b/tasks/test.yml @@ -276,7 +276,7 @@ tasks: cmds: - | if [ -f "package-lock.json" ]; then - npm run nightwatch --env $NIGHTWATCH_ENV {{.CLI_ARGS}} + npx nightwatch --env $NIGHTWATCH_ENV {{.CLI_ARGS}} elif [ -f "yarn.lock" ]; then yarn nightwatch --env $NIGHTWATCH_ENV {{.CLI_ARGS}} else