# Gitea Actions – Server Tests # # Two jobs run on every push to any branch: # 1. jest-integration – Jest tests against the server's data methods (needs MongoDB) # 2. mocha-unit – Existing Mocha/Chai tests in tests/ and tests/utils/ # # Prerequisites (Gitea repository secrets): # DB_HOSTS – MongoDB host(s), e.g. "127.0.0.1:27017" # DB_NAME – Must contain "test", e.g. "agmission_test" # DB_USR – MongoDB username # DB_PWD – MongoDB password # DB_AUTH_SRC – MongoDB auth source (default: "admin") # TOKEN_SECRET – JWT secret used by the server's auth helpers name: Server Tests on: push: branches: - '**' # ── Shared env-file step (inline, re-used by both jobs via heredoc) ────────── jobs: # ══════════════════════════════════════════════════════════════════════════ # Job 2: Mocha/Chai tests – tests/ and tests/utils/ # These tests are self-contained unit tests that do not require MongoDB. # ══════════════════════════════════════════════════════════════════════════ mocha-unit: name: Mocha – Unit & Utility Tests runs-on: self-hosted defaults: run: working-directory: Development/server steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '18' # Redirect the npm cache away from /root/.npm (root-owned on this runner) # to a writable temp directory. Also clears any stale node_modules left # by a previous run that the root-owned cache could not clean up. - name: Fix npm cache permissions run: | mkdir -p /tmp/npm-cache rm -rf node_modules || true - name: Install dependencies env: NPM_CONFIG_CACHE: /tmp/npm-cache run: npm ci # Write a minimal env file so dotenv does not error on startup. # These tests do not hit the database; DB_* values are placeholders. - name: Write test environment file run: | cat > environment.env <<'EOF' NODE_ENV=test DB_HOSTS=127.0.0.1:27017 DB_NAME=agmission_test DB_USR= DB_PWD= TOKEN_SECRET=${{ secrets.TOKEN_SECRET || 'ci-test-secret-not-for-production' }} PRODUCTION=false NO_EMAIL_MODE=true ENABLE_SUBSCRIPTION=false STRIPE_SEC_KEY=sk_test_placeholder STRIPE_API_VERSION=2022-11-15 EOF # Run all top-level test_*.js files (skips integration/ and satloc/ sub-dirs # which are covered by the jest-integration job or need live connections). - name: Run Mocha unit tests (tests/) run: | npx mocha --exit --timeout 120000 \ --require tests/setup.js \ 'tests/test_*.js' continue-on-error: false # Run Mocha tests in tests/utils/ - name: Run Mocha utility tests (tests/utils/) run: npm run test:utils continue-on-error: false