diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..7aacb08 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,43 @@ +name: CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build-and-test: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [20.x] + + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: 'npm' + cache-dependency-path: | + backend/package-lock.json + frontend/package-lock.json + + - name: Install backend dependencies + working-directory: ./backend + run: npm ci + + - name: Run backend tests + working-directory: ./backend + run: npm test + + - name: Install frontend dependencies + working-directory: ./frontend + run: npm ci + + - name: Build frontend + working-directory: ./frontend + run: npm run build diff --git a/backend/.env.example b/backend/.env.example index 87215cc..71ce0b7 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -3,4 +3,4 @@ MONGODB_URI=mongodb+srv://:@cluster0.thi5oil.mongodb.net/ { try { + // Set test-only JWT secrets so tests relying on auth don't fail + process.env.JWT_SECRET = process.env.JWT_SECRET || 'test-jwt-secret'; + process.env.JWT_REFRESH_SECRET = process.env.JWT_REFRESH_SECRET || 'test-refresh-secret'; + let mongoUri; // Check if a test MongoDB URI is provided (for CI/CD or when VC++ redistributable is not available) diff --git a/backend/tests/utils/testApp.js b/backend/tests/utils/testApp.js index edb5865..b4f45fa 100644 --- a/backend/tests/utils/testApp.js +++ b/backend/tests/utils/testApp.js @@ -6,7 +6,6 @@ import errorHandler from '../../src/middleware/errorHandler.js'; import { optionalAuth } from '../../src/middleware/auth.js'; import { userRateLimiter } from '../../src/middleware/rateLimiter.js'; import authRoutes from '../../src/routes/authRoutes.js'; -import wikimediaOAuth1Routes from '../../src/routes/wikimediaOAuth1Routes.js'; import submissionRoutes from '../../src/routes/submissionRoutes.js'; import userRoutes from '../../src/routes/userRoutes.js'; import adminRoutes from '../../src/routes/adminRoutes.js'; @@ -60,7 +59,6 @@ export const createTestApp = () => { // API routes app.use('/api/auth', authRoutes); - app.use('/api/auth/wikimedia', wikimediaOAuth1Routes); app.use('/api/submissions', submissionRoutes); app.use('/api/users', userRoutes); app.use('/api/admin', adminRoutes);