4 Commits

Author SHA1 Message Date
david 66fc2386c2 fix: set DATABASE_URL at job level for unit tests in PR workflow
Pull Request / unit-tests (pull_request) Successful in 54s
Pull Request / build-and-deploy-ci (pull_request) Failing after 0s
Pull Request / analyze-bump-type (pull_request) Successful in 10s
prisma.ts throws at import time if DATABASE_URL is not set. The env var
was only set on the 'Generate Prisma client' step, not 'Run unit tests'.
2026-05-16 20:35:52 -07:00
david 83cccf4987 fix: add missing build context and --push flag to CI base image workflow
The docker build command was missing the build context path (.) and
the --push flag to actually push to the registry after building.
2026-05-16 20:16:38 -07:00
david b162750a67 fix: remove permissions module mock from tournament-update tests to prevent test pollution
Pull Request / unit-tests (pull_request) Failing after 55s
Pull Request / build-and-deploy-ci (pull_request) Has been skipped
Pull Request / analyze-bump-type (pull_request) Has been skipped
tournament-update.test.ts was mocking the entire @/lib/permissions module,
which replaced canManageTournament globally and caused permissions.test.ts
to fail when run in the same process.

Instead of mocking permissions, mock its dependencies (auth-simple and prisma)
so canManageTournament runs through naturally.
2026-05-16 20:03:10 -07:00
david 671ee78a47 fix: mount /apps and docker socket in PR workflow build-and-deploy-ci job
Pull Request / unit-tests (pull_request) Failing after 55s
Pull Request / build-and-deploy-ci (pull_request) Has been skipped
Pull Request / analyze-bump-type (pull_request) Has been skipped
The build-and-deploy-ci job failed because /apps/euchre_camp_ci/docker-compose.yml
was not accessible inside the job container. Add volume mounts for /apps and the
docker socket so the job can read the CI compose file and run docker compose commands.

Requires runner config.yaml with valid_volumes for /apps and /var/run/docker.sock.
2026-05-16 19:57:48 -07:00
3 changed files with 31 additions and 14 deletions
+2 -1
View File
@@ -52,12 +52,13 @@ jobs:
- name: Build and push CI base image
run: |
# Build with multiple tags
docker build \
--file Dockerfile.ci-base \
--tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest \
--tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${{ steps.meta.outputs.playwright_version }} \
--tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }} \
--push \
.
- name: Clean up
if: always()
+5 -2
View File
@@ -15,6 +15,8 @@ jobs:
container:
image: docker.notsosm.art/euchre-camp/ci-base:latest
options: --user root
env:
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
steps:
- name: Checkout code
@@ -25,8 +27,6 @@ jobs:
- name: Generate Prisma client
run: bun x prisma generate
env:
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
- name: Run unit tests
run: bun test src/__tests__/unit/ src/__tests__/*.test.tsx src/__tests__/auth-simple.test.ts
@@ -37,6 +37,9 @@ jobs:
container:
image: docker.notsosm.art/euchre-camp/ci-base:latest
options: --user root
volumes:
- /apps:/apps
- /var/run/docker.sock:/var/run/docker.sock
steps:
- name: Checkout code
+24 -11
View File
@@ -8,12 +8,32 @@ import { describe, it, expect, mock, beforeEach,} from 'bun:test';
// Create mock functions at module level
const eventFindUniqueMock = mock(async () => ({}));
const eventUpdateMock = mock(async () => ({}));
const canManageTournamentMock = mock(async () => ({ allowed: true }));
const canDeleteTournamentMock = mock(async () => ({ allowed: true }));
const userFindUniqueMock = mock(async () => ({
id: 'admin-1',
email: 'admin@example.com',
role: 'club_admin',
emailVerified: false,
name: null,
image: null,
playerId: null,
createdAt: new Date(),
updatedAt: new Date(),
}));
// Mock prisma first
// Mock auth-simple to return a valid session
mock.module('@/lib/auth-simple', () => ({
getSession: mock(async () => ({
user: { id: 'admin-1', email: 'admin@example.com' },
session: { token: 'test', expiresAt: new Date() }
})),
}));
// Mock prisma with user and event
mock.module('@/lib/prisma', () => ({
prisma: {
user: {
findUnique: userFindUniqueMock,
},
event: {
findUnique: eventFindUniqueMock,
update: eventUpdateMock,
@@ -21,12 +41,6 @@ mock.module('@/lib/prisma', () => ({
},
}));
// Mock the permissions module
mock.module('@/lib/permissions', () => ({
canManageTournament: canManageTournamentMock,
canDeleteTournament: canDeleteTournamentMock,
}));
// Import the route handler after mocking
import { PUT } from '@/app/api/tournaments/[id]/route';
import { prisma } from '@/lib/prisma';
@@ -36,8 +50,7 @@ describe('Tournament Update API', () => {
// Clear all mock history before each test
eventFindUniqueMock.mockClear();
eventUpdateMock.mockClear();
canManageTournamentMock.mockClear();
canDeleteTournamentMock.mockClear();
userFindUniqueMock.mockClear();
});
it('should update allowTies field when provided', async () => {