name: test
on: push
jobs:
  test-api:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./api
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "18.x"
      - name: install deps
        run: npm ci --ignore-scripts
      - name: build
        run: npm run build
      - name: test
        run: npm test
        env:
          AWS_ACCESS_KEY_ID: foo # needed for
          AWS_SECRET_ACCESS_KEY: bar # dynamodb connection
    services:
      dynamodb:
        image: amazon/dynamodb-local
        ports:
          - 8000:8000
  test-frontend:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./frontend
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "18.x"
      - name: install deps
        run: npm ci --legacy-peer-deps
      - name: build
        run: npm run build
      - name: test
        run: npm test
  test-infra:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./infra
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "18.x"
      - name: install deps
        run: npm ci
      - name: test
        run: npm test
  license-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "18.x"
      - name: install deps
        run: npm ci
      - name: run check
        run: npm run licenses:check

  e2e:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: "18.x"
      - name: install deps
        run: |
          npm ci
          full_version=$(google-chrome --product-version)
          chrome_version=$(echo "${full_version%.*.*.*}")
          npm install chromedriver@$chrome_version

      - name: install cli
        run: |
          curl https://raw.githubusercontent.com/findy-network/findy-agent-cli/HEAD/install.sh > install.sh
          chmod a+x install.sh
          sudo ./install.sh -b /bin

      - name: init env
        run: ./e2e/init.sh

      - name: set env
        run: echo "ISSUER_TOOL_SERVER_CERT_PATH=$GITHUB_WORKSPACE/e2e/.build/findy-wallet-pwa/tools/env/config/cert" >> $GITHUB_ENV

      - name: run backend
        run: |
          cd api
          npm run db
          npm ci
          mkdir -p ../tests_output
          nohup npm start > /dev/null 2>../tests_output/backend.log &
        env:
          AWS_ACCESS_KEY_ID: "foo"
          AWS_SECRET_ACCESS_KEY: "bar"
          ISSUER_TOOL_SKIP_DEFAULT_CRED_DEFS: true

      - name: run frontend
        run: |
          cd frontend
          npm ci --legacy-peer-deps
          npm start &

      - name: run e2e
        run: npm run test:e2e

      - name: collect docker logs
        if: ${{ failure() }}
        uses: jwalton/gh-docker-logs@v2.2.2
        with:
          dest: "./tests_output/docker-logs"

      - name: archive logs
        if: ${{ failure() }}
        uses: actions/upload-artifact@v4
        with:
          name: tests_output
          path: tests_output