name: Testing

on: pull_request

jobs:

  unit: #-----------------------------------------------------------------------
    name: Unit test /  PHP ${{ matrix.php }}
    strategy:
      fail-fast: false
      matrix:
        php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
    runs-on: ubuntu-latest

    steps:
      - name: Check out source code
        uses: actions/checkout@v2

      - name: Check existence of composer.json file
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: "composer.json, phpunit.xml.dist"

      - name: Set up PHP environment
        if: steps.check_files.outputs.files_exists == 'true'
        uses: shivammathur/setup-php@v2
        with:
          php-version: '${{ matrix.php }}'
          coverage: none
          tools: composer,cs2pr

      - name: Get Composer cache Directory
        if: steps.check_files.outputs.files_exists == 'true'
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Use Composer cache
        if: steps.check_files.outputs.files_exists == 'true'
        uses: actions/cache@master
        with:
          path: ${{ steps['composer-cache'].outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Install dependencies
        if: steps.check_files.outputs.files_exists == 'true'
        run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest

      - name: Setup problem matcher to provide annotations for PHPUnit
        if: steps.check_files.outputs.files_exists == 'true'
        run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

      - name: Run PHPUnit
        if: steps.check_files.outputs.files_exists == 'true'
        run: composer phpunit

  functional: #----------------------------------------------------------------------
    name: Functional - WP ${{ matrix.wp }} on PHP ${{ matrix.php }}
    strategy:
      fail-fast: false
      matrix:
        php: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4']
        wp: ['latest']
        test: ["composer behat || composer behat-rerun"]
        include:
          - php: '5.6'
            wp: 'trunk'
            test: "composer behat || composer behat-rerun"
          - php: '7.4'
            wp: 'trunk'
            test: "composer behat || composer behat-rerun"
          - php: '5.6'
            wp: '3.7'
            test: "composer behat || composer behat-rerun || true"
    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_DATABASE: wp_cli_test
          MYSQL_USER: root
          MYSQL_ROOT_PASSWORD: root
        ports:
          - 3306
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

    steps:
      - name: Check out source code
        uses: actions/checkout@v2

      - name: Check existence of composer.json & behat.yml files
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: "composer.json, behat.yml"

      - name: Set up PHP envirnoment
        uses: shivammathur/setup-php@v2
        with:
          php-version: '${{ matrix.php }}'
          extensions: mysql, zip
          coverage: none
          tools: composer

      - name: Get Composer cache Directory
        if: steps.check_files.outputs.files_exists == 'true'
        id: composer-cache
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Use Composer cache
        if: steps.check_files.outputs.files_exists == 'true'
        uses: actions/cache@master
        with:
          path: ${{ steps['composer-cache'].outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Install dependencies
        if: steps.check_files.outputs.files_exists == 'true'
        run: COMPOSER_ROOT_VERSION=dev-master composer install --prefer-dist --no-progress --no-suggest

      - name: Start MySQL server
        if: steps.check_files.outputs.files_exists == 'true'
        run: sudo service mysql start

      - name: Prepare test database
        if: steps.check_files.outputs.files_exists == 'true'
        run: |
          export MYQSL_HOST=127.0.0.1
          export MYSQL_TCP_PORT=${{ job.services.mysql.ports['3306'] }}
          mysql -e 'CREATE DATABASE IF NOT EXISTS wp_cli_test;' -uroot -proot
          mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test.* TO "wp_cli_test"@"127.0.0.1" IDENTIFIED BY "password1"' -uroot -proot
          mysql -e 'GRANT ALL PRIVILEGES ON wp_cli_test_scaffold.* TO "wp_cli_test"@"127.0.0.1" IDENTIFIED BY "password1"' -uroot -proot

      - name: Run Behat
        if: steps.check_files.outputs.files_exists == 'true'
        env:
          WP_VERSION: '${{ matrix.wp }}'
        run: ${{ matrix.test }}

