name: CI - E2E - 3rd party donation tests

# These are only run on prod-* branches to test the 3rd party donation flow

on:
  push:
    branches:
      - 'prod-**'
    paths-ignore:
      - 'docs/**'
  # to test this ad-hoc
  workflow_dispatch:

jobs:
  do-everything:
    name: Build & Test
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        node-version: [18.x]
    services:
      mongodb:
        image: mongo:4.4
        ports:
          - 27017:27017
      # We need mailhog to catch any emails the api tries to send.
      mailhog:
        image: mailhog/mailhog
        ports:
          - 1025:1025

    steps:
      - name: Checkout Source Files
        uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3

      - name: Checkout client-config
        uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3
        with:
          repository: freeCodeCamp/client-config
          path: client-config

      - name: Setup pnpm
        uses: pnpm/action-setup@v2
        with:
          version: 8

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@e33196f7422957bea03ed53f6fbb155025ffc7b8 # v3
        with:
          node-version: ${{ matrix.node-version }}
          # cypress-io/github-action caches the store, so we should not cache it
          # here.

      - name: Set freeCodeCamp Environment Variables
        run: |
          sed '/STRIPE/d; /PAYPAL/d;' sample.env > .env
          echo 'STRIPE_PUBLIC_KEY=${{ secrets.STRIPE_PUBLIC_KEY }}' >> .env
          echo 'STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }}' >> .env
          echo 'PAYPAL_CLIENT_ID=${{ secrets.PAYPAL_CLIENT_ID }}' >> .env
          echo 'PAYPAL_SECRET=${{ secrets.PAYPAL_SECRET }}' >> .env

      - name: Install and Build
        run: |
          pnpm install
          pnpm run build
      - name: Seed Database
        run: pnpm run seed
      - name: Move serve.json to Public Folder
        run: cp client-config/serve.json client/public/serve.json

      # start-ci uses pm2, so it needs to be installed globally
      - name: Install pm2
        run: npm i -g pm2

        # In our cypress config, we default to the cypress/e2e/default directory.
        # We need to change this to cypress/e2e/ for the specific tests we are running
        # in this workflow.
        #
      - name: Adjust the Cypress Config
        run: |
          sed -i 's#cypress/e2e/default/#cypress/e2e/#g' cypress.config.js

      - name: Cypress run
        uses: cypress-io/github-action@v4
        with:
          record: ${{ env.CYPRESS_RECORD_KEY != 0 }}
          start: pnpm run start-ci
          wait-on: http://localhost:8000
          wait-on-timeout: 1200
          config: baseUrl=http://localhost:8000
          browser: chrome
          spec: 'cypress/e2e/third-party/donate-page.ts'
