name: Unit Tests (Enterprise)

on:
  workflow_dispatch:
  
  push:
    branches: [ develop ]
  
  pull_request:

jobs:
  tests:
    name: Tests (Enterprise)
    runs-on: macos-15
    
    # Skip in forks
    if: github.repository == 'element-hq/element-x-ios'

    concurrency:
      # Only allow a single run of this workflow on each branch, automatically cancelling older runs.
      group: ${{ format('unit-tests-enterprise{0}', github.ref) }}
      cancel-in-progress: true

    steps:
      - uses: nschloe/action-cached-lfs-checkout@v1
        with:
          submodules: recursive
          token: ${{ secrets.ELEMENT_BOT_TOKEN }}

      - uses: actions/cache@v4
        with:
          path: vendor/bundle
          key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-gems-

      - name: Setup environment
        run: source ci_scripts/ci_common.sh && setup_github_actions_environment
      
      - name: Configure Enterprise
        run: bundle exec fastlane config_enterprise
        env:
          MAPLIBRE_API_KEY: WeDontNeedOneForUnitTests
          SENTRY_DSN: https://sentry.localhost
          POSTHOG_HOST: https://posthog.localhost
          POSTHOG_API_KEY: WeDontNeedOneForUnitTests
          RAGESHAKE_SERVER_URL: https://rageshake.localhost
      
      - name: SwiftFormat
        run: swiftformat --lint .

      - name: Run tests
        run: bundle exec fastlane unit_tests skip_previews:true
        
      - name: Zip results # for faster upload
        if: failure()
        working-directory: fastlane/test_output
        run: zip -r UnitTests.zip UnitTests.xcresult
      
      - name: Archive artifacts
        uses: actions/upload-artifact@v4
        # We only care about artefacts if the tests fail
        if: failure()
        with:
            name: Results
            path: fastlane/test_output/UnitTests.zip
            retention-days: 1
            if-no-files-found: ignore
