Skip to content

675 Add E2E Tests to CI without Mocking #366

675 Add E2E Tests to CI without Mocking

675 Add E2E Tests to CI without Mocking #366

Workflow file for this run

name: Run API and App Tests
on:
pull_request:
branches: [main]
# This is also a reusable workflow that can be called from other workflows
workflow_call:
workflow_dispatch:
jobs:
build-api:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push API Image
run: |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/api:latest
docker build -t $IMAGE_NAME ./api
docker push $IMAGE_NAME
build-app:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and Push Testing Image
run: |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/app:latest-test
docker build --build-arg VITE_HUU_API_BASE_URL=http://127.0.0.1:8080/api --target development --tag $IMAGE_NAME ./app
docker push $IMAGE_NAME
- name: Build Production Image
run: |
IMAGE_NAME=ghcr.io/hackforla/homeuniteus/app:latest
docker build --build-arg VITE_HUU_API_BASE_URL=http://127.0.0.1:8080/api --target production --tag $IMAGE_NAME ./app
docker push $IMAGE_NAME
test-api-mock-aws:
runs-on: ubuntu-latest
needs: [build-api]
container:
image: ghcr.io/hackforla/homeuniteus/api:latest
options: --entrypoint /bin/bash --no-healthcheck
steps:
- name: Run Tests With Backend Mocking
run: pytest
working-directory: /opt/HomeUniteUs/api
test-api-real-aws:
runs-on: ubuntu-latest
needs: [build-api]
container:
image: ghcr.io/hackforla/homeuniteus/api:latest
options: --entrypoint /bin/bash --no-healthcheck
env:
COGNITO_REGION: ${{ secrets.COGNITO_REGION }}
COGNITO_ACCESS_ID: ${{ secrets.COGNITO_ACCESS_ID }}
COGNITO_ACCESS_KEY: ${{ secrets.COGNITO_ACCESS_KEY }}
steps:
- name: Run Tests With Backend Mocking
run: pytest --mode=release
working-directory: /opt/HomeUniteUs/api
test-app-mock-backend:
runs-on: ubuntu-latest
needs: [build-app, build-api]
services:
frontend:
image: ghcr.io/hackforla/homeuniteus/app:latest-test
env:
VITE_HUU_API_BASE_URL: http://127.0.0.1:8080/api
container:
image: ghcr.io/hackforla/homeuniteus/app:latest-test
options: --entrypoint /bin/bash --no-healthcheck
env:
CYPRESS_BASE_URL: http://frontend:4040
CYPRESS_USE_MOCK: true
steps:
- name: Run Tests With Backend Mocking
run: npm run cypress:run:mock
working-directory: /app
test-app-real-backend:
runs-on: ubuntu-latest
needs: [build-app, build-api]
services:
backend:
image: ghcr.io/hackforla/homeuniteus/api:latest
env:
ENV: development
HOST: 0.0.0.0
frontend:
image: ghcr.io/hackforla/homeuniteus/app:latest-test
env:
VITE_HUU_API_BASE_URL: http://backend:8080/api
container:
image: ghcr.io/hackforla/homeuniteus/app:latest-test
options: --entrypoint /bin/bash --no-healthcheck
env:
CYPRESS_BASE_URL: http://frontend:4040
CYPRESS_USE_MOCK: false
CYPRESS_REAL_EMAIL: testhost@test.com
CYPRESS_REAL_PASSWORD: Test!123
steps:
- name: Test using a real backend
run: npm run cypress:run:nomock
working-directory: /app
# - uses: actions/checkout@v4
# - name: Use Node.js 20
# uses: actions/setup-node@v4
# with:
# node-version: 20
# cache: "npm"
# cache-dependency-path: app/package-lock.json
# - name: Run npm CI
# run: npm ci
# - name: Test app
# run: npm run test -- --no-color --run
# - name: Run E2E tests
# uses: cypress-io/github-action@v5
# with:
# install: false
# start: npm run dev
# working-directory: ./app
# wait-on: "http://[::1]:4040/"