name: PHPUnit

on:
  pull_request:
  push:
    branches:
      - master
      - stable*

env:
  # Location of the phpunit.xml and phpunit.integration.xml files
  PHPUNIT_CONFIG: ./tests/phpunit.xml
  PHPUNIT_INTEGRATION_CONFIG: ./tests/phpunit.integration.xml

jobs:
  phpunit-sqlite:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        php-versions: ['8.0']
        server-versions: ['master']

    steps:
      - name: Set app env
        run: |
          # Split and keep last
          echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - name: Checkout server
        uses: actions/checkout@v3
        with:
          submodules: true
          repository: nextcloud/server
          ref: ${{ matrix.server-versions }}

      - name: Checkout app
        uses: actions/checkout@v3
        with:
          path: apps/${{ env.APP_NAME }}

      - name: Set up php ${{ matrix.php-versions }}
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php-versions }}
          tools: phpunit
          extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite
          coverage: none

      - name: Set up PHPUnit
        working-directory: apps/${{ env.APP_NAME }}
        run: composer i

      - name: Set up Nextcloud
        env:
          DB_PORT: 4444
        run: |
          mkdir data
          ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
          ./occ app:enable ${{ env.APP_NAME }}

      - name: Check PHPUnit config file existence
        id: check_phpunit
        uses: andstor/file-existence-action@v1
        with:
          files: apps/${{ env.APP_NAME }}/${{ env.PHPUNIT_CONFIG }}

      - name: PHPUnit
        # Only run if phpunit config file exists
        if: steps.check_phpunit.outputs.files_exists == 'true'
        working-directory: apps/${{ env.APP_NAME }}
        run: ./vendor/phpunit/phpunit/phpunit -c ${{ env.PHPUNIT_CONFIG }}

      - name: Check PHPUnit integration config file existence
        id: check_integration
        uses: andstor/file-existence-action@v1
        with:
          files: apps/${{ env.APP_NAME }}/${{ env.PHPUNIT_INTEGRATION_CONFIG }}

      - name: Run Nextcloud
        # Only run if phpunit integration config file exists
        if: steps.check_integration.outputs.files_exists == 'true'
        run: php -S localhost:8080 &

      - name: PHPUnit integration
        # Only run if phpunit integration config file exists
        if: steps.check_integration.outputs.files_exists == 'true'
        working-directory: apps/${{ env.APP_NAME }}
        run: ./vendor/phpunit/phpunit/phpunit -c ${{ env.PHPUNIT_INTEGRATION_CONFIG }}

  summary:
    runs-on: ubuntu-latest
    needs: phpunit-sqlite

    if: always()

    name: phpunit-sqlite-summary

    steps:
      - name: Summary status
        run: if ${{ needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi
