on:
  workflow_call:

name: Analyze and test

jobs:
  analyze-test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        modules:
          - default
          - core
          - model
          - contact
          - forward
          - rule_filter
          - fcm
      fail-fast: false

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: "3.7.5"
          channel: "stable"
          cache: true
          cache-key: "deps-${{ hashFiles('**/pubspec.lock') }}"
          cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path

      - name: Setup Firebase env
        env:
          FIREBASE_ENV: ${{ secrets.FIREBASE_ENV }}
        run: echo "$FIREBASE_ENV" > ./configurations/env.fcm

      - name: Run prebuild
        run: bash prebuild.sh

      - name: Analyze
        uses: zgosalvez/github-actions-analyze-dart@v1

      - name: Test
        run: |
          if [[ "${{ matrix.modules }}" == "default" ]]; then
            flutter test -r json > test-report-${{ matrix.modules }}.json
          else
            flutter test -r json ${{ matrix.modules }} > test-report-${{ matrix.modules }}.json
          fi

      - name: Upload test reports
        if: success() || failure() # Always upload report
        uses: actions/upload-artifact@v3
        with:
          name: test-reports
          path: test-report*.json

  report:
    runs-on: ubuntu-latest
    if: success() || failure() # Always upload report
    needs:
      - analyze-test
    steps:
      - uses: actions/checkout@v3

      - uses: actions/download-artifact@v3
        with:
          name: test-reports

      - uses: dorny/test-reporter@v1
        with:
          name: Flutter Tests
          path: "*.json"
          reporter: flutter-json
          only-summary: "true"
