name: Test Suite on: push: branches: [ main, master, develop ] pull_request: branches: [ main, master, develop ] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup Nix uses: cachix/install-nix-action@v20 with: nix: 2.18.1 extra_nix_config: | experimental-features = nix-command flakes - name: Install Nix dependencies run: | nix profile install nixpkgs#postgresql nix profile install nixpkgs#python3 nix profile install nixpkgs#nodejs_20 nix profile install nixpkgs#npm - name: Setup Python run: | python3 -m pip install --upgrade pip pip install -r backend/requirements.txt - name: Setup Node.js run: | cd frontend npm ci - name: Start PostgreSQL run: | sudo systemctl start postgresql || sudo service postgresql start sudo -u postgres psql -c "CREATE DATABASE moviemap_test;" sudo -u postgres psql -c "CREATE USER moviemap WITH PASSWORD 'test';" sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE moviemap_test TO moviemap;" sudo -u postgres psql -c "ALTER USER moviemap CREATEDB;" env: POSTGRES_HOST: localhost POSTGRES_PORT: 5432 - name: Run database migrations run: | cd backend export POSTGRES_SOCKET_PATH=/var/run/postgresql export POSTGRES_DB=moviemap_test export POSTGRES_USER=moviemap alembic upgrade head env: TEST_POSTGRES_DB: moviemap_test TEST_POSTGRES_USER: moviemap TEST_POSTGRES_SOCKET_PATH: /var/run/postgresql - name: Run backend tests run: | cd backend export POSTGRES_SOCKET_PATH=/var/run/postgresql export POSTGRES_DB=moviemap_test export POSTGRES_USER=moviemap export TEST_POSTGRES_DB=moviemap_test export TEST_POSTGRES_USER=moviemap export TEST_POSTGRES_SOCKET_PATH=/var/run/postgresql pytest tests/ -v --cov=app --cov-report=term-missing env: # Mock *arr URLs for testing (tests will mock the actual API calls) RADARR_URL: http://localhost:7878 SONARR_URL: http://localhost:8989 LIDARR_URL: http://localhost:8686 RADARR_API_KEY: test-key SONARR_API_KEY: test-key LIDARR_API_KEY: test-key - name: Build frontend run: | cd frontend npm run build - name: Run frontend tests run: | cd frontend npm test -- --run - name: Cleanup if: always() run: | sudo systemctl stop postgresql || sudo service postgresql stop || true