name: Testing

on: [push, pull_request]

concurrency:
    group: testing-${{ github.ref }}
    cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

jobs:
  test:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version-file: '.nvmrc'
    - name: Install npm packages
      run: |
        npm ci --no-audit
        npm ci --no-audit --prefix cordova-plugin-moodleapp
    - name: Check langindex
      run: |
        result=$(cat scripts/langindex.json | grep \"TBD\" | wc -l); test $result -eq 0
        if [ $result -ne 0 ]; then
          echo "There are lang strings to be decided on langindex.json"
          exit 1
        fi
        gulp
        langcount=`jq -r '. | length' src/assets/lang/en.json`
        langindexcount=`jq -r '. | length' scripts/langindex.json`
        if [ $langcount -ne $langindexcount ]; then
          echo "Lang file has $langcount while langindex $langindexcount"
          exit 1
        fi

        langkeys=`jq -r 'keys[]' src/assets/lang/en.json`
        langindex=`jq -r 'keys[]' scripts/langindex.json`
        found=0
        for i in $langkeys; do
            skip=
            for j in $langindex; do
                if [ "$i" == "$j" ]; then
                  skip=1
                  break;
                fi
            done
            [[ -n $skip ]] || { echo "$i key not found"; found=$(($found + 1)); }
        done
        if [ $found -ne 0 ]; then
          echo "Found $found missing langkeys"
          exit 1
        fi
    - name: Run Linters (ignore warnings)
      run: |
        npm run lint -- --quiet
        npm run lint --prefix cordova-plugin-moodleapp
    - name: Run tests
      run: npm run test:ci
    - name: Production builds
      run: |
        npm run build:prod
        npm run prod --prefix cordova-plugin-moodleapp
      env:
          MOODLE_APP_CIRCULAR_DEPENDENCIES: true
    - name: Circular dependencies
      run: |
        cat circular-dependencies
        lines=$(cat circular-dependencies | wc -l)
        echo "Total circular dependencies: $lines"
        test $lines -eq 130
    - name: JavaScript code compatibility
      run: |
        npx check-es-compat www/*.js --polyfills="\{Array,String,TypedArray\}.prototype.at,Object.hasOwn"
        npx check-es-compat cordova-plugin-moodleapp/www/*.js
