name: Run Pytest with Coverage
on: 
  workflow_call:
    inputs:
      BEC_CORE_BRANCH:
        description: 'Branch for BEC Core'
        required: false
        default: 'main'
        type: string
      OPHYD_DEVICES_BRANCH:
        description: 'Branch for Ophyd Devices'
        required: false
        default: 'main'
        type: string
      BEC_WIDGETS_BRANCH:
        description: 'Branch for BEC Widgets'
        required: false
        default: 'main'
        type: string


jobs:
  bec:
    name: BEC Unit Tests
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash -el {0}

    steps:
      - name: Checkout BEC
        uses: actions/checkout@v4
        with:
          repository: bec-project/bec
          ref: ${{ inputs.BEC_CORE_BRANCH }}

      - name: Install BEC and dependencies
        uses: ./.github/actions/bec_install
        with:
          BEC_CORE_BRANCH: ${{ inputs.BEC_CORE_BRANCH }}
          OPHYD_DEVICES_BRANCH: ${{ inputs.OPHYD_DEVICES_BRANCH }}
          PYTHON_VERSION: '3.11'
      - name: Run Pytest
        run: |
          cd ./bec
          pip install pytest pytest-random-order
          pytest -v --maxfail=2 --junitxml=report.xml --random-order ./bec_server/tests ./bec_ipython_client/tests/client_tests ./bec_lib/tests
  bec-e2e-test:
    name: BEC End2End Tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout BEC
        uses: actions/checkout@v4
        with:
          repository: bec-project/bec
          ref: ${{ inputs.BEC_CORE_BRANCH }}

      - name: Run E2E Tests
        uses: ./.github/actions/bec_e2e_install
        with:
          BEC_CORE_BRANCH: ${{ inputs.BEC_CORE_BRANCH }}
          OPHYD_DEVICES_BRANCH: ${{ inputs.OPHYD_DEVICES_BRANCH }}
          BEC_WIDGETS_BRANCH: ${{ inputs.BEC_WIDGETS_BRANCH }}
          PYTHON_VERSION: '3.11'
