Compare commits
11 Commits
c993852147
...
v0.1.5
| Author | SHA1 | Date | |
|---|---|---|---|
| 8ea12f39d2 | |||
| 3d87f3e1dc | |||
| 04dfdfa378 | |||
| 2cf832eeac | |||
| 967bdc1b89 | |||
| a3cd46e39a | |||
| 42902106e6 | |||
| 1503420519 | |||
| f8f9c205be | |||
| d8a8931bc3 | |||
| e921f17d2c |
@@ -0,0 +1,15 @@
|
|||||||
|
# Development environment configuration for EuchreCamp
|
||||||
|
# Copy this file to .env.development and fill in your values
|
||||||
|
|
||||||
|
# Database Configuration
|
||||||
|
DATABASE_PROVIDER=postgresql
|
||||||
|
# Development database URL - must contain "_dev" to pass safety checks
|
||||||
|
DATABASE_URL="postgresql://euchre_camp:password@localhost:5432/euchre_camp_dev"
|
||||||
|
|
||||||
|
# Authentication
|
||||||
|
BETTER_AUTH_SECRET="your-secret-key-change-this"
|
||||||
|
BETTER_AUTH_URL="http://localhost:3000"
|
||||||
|
|
||||||
|
# Application Configuration
|
||||||
|
NODE_ENV=development
|
||||||
|
TRUSTED_ORIGINS="http://localhost:3000,http://127.0.0.1:3000"
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# EuchreCamp Environment Configuration
|
||||||
|
# Copy this file to .env and fill in your values
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Database Configuration
|
||||||
|
# ============================================
|
||||||
|
# PostgreSQL connection string
|
||||||
|
# Format: postgresql://username:password@host:port/database
|
||||||
|
DATABASE_URL=postgresql://euchre:euchrepassword@localhost:5432/euchre_camp
|
||||||
|
|
||||||
|
# Shadow database for Prisma migrations (optional for PostgreSQL)
|
||||||
|
DATABASE_SHADOW_URL=postgresql://euchre:euchrepassword@localhost:5432/euchre_camp_shadow
|
||||||
|
|
||||||
|
# Database provider (postgresql, mysql, sqlite, etc.)
|
||||||
|
DATABASE_PROVIDER=postgresql
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Better Auth Configuration
|
||||||
|
# ============================================
|
||||||
|
# Secret key for session encryption (generate a strong random string)
|
||||||
|
# Run: openssl rand -base64 32
|
||||||
|
BETTER_AUTH_SECRET=your-secret-key-change-in-production
|
||||||
|
|
||||||
|
# Base URL for authentication callbacks
|
||||||
|
# For production: https://your-domain.com
|
||||||
|
BETTER_AUTH_URL=http://localhost:3000
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Application Configuration
|
||||||
|
# ============================================
|
||||||
|
# Environment: development, production, test
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
# Trusted origins for CORS and authentication
|
||||||
|
# Add your domain(s) for production
|
||||||
|
TRUSTED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Optional: External Services
|
||||||
|
# ============================================
|
||||||
|
# If using external database (e.g., Supabase, Railway)
|
||||||
|
# DATABASE_URL=postgresql://user:pass@host:port/db
|
||||||
|
|
||||||
|
# If using external auth provider
|
||||||
|
# BETTER_AUTH_URL=https://your-app.com
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# CasaOS Deployment Notes
|
||||||
|
# ============================================
|
||||||
|
# When deploying to CasaOS, set these via the UI:
|
||||||
|
# 1. DATABASE_URL: Your PostgreSQL connection string
|
||||||
|
# 2. BETTER_AUTH_SECRET: Generate with: openssl rand -base64 32
|
||||||
|
# 3. BETTER_AUTH_URL: Your app's public URL
|
||||||
|
# 4. TRUSTED_ORIGINS: Your app's public URL(s)
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
name: Build CI Images
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- 'Dockerfile.ci-base'
|
||||||
|
- 'package.json'
|
||||||
|
- 'bun.lockb'
|
||||||
|
- '.gitea/workflows/build-ci-images.yml'
|
||||||
|
schedule:
|
||||||
|
# Weekly rebuild to get latest Playwright/Bun versions
|
||||||
|
- cron: '0 2 * * 0' # Every Sunday at 2 AM
|
||||||
|
workflow_dispatch: # Manual trigger
|
||||||
|
|
||||||
|
env:
|
||||||
|
REGISTRY: docker.notsosm.art
|
||||||
|
IMAGE_NAME: euchre-camp
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-ci-base:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Login to Registry
|
||||||
|
run: |
|
||||||
|
echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ env.REGISTRY }} -u ${{ secrets.DOCKER_LOGIN }} --password-stdin
|
||||||
|
|
||||||
|
- name: Extract metadata for CI base image
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
# Get Playwright version from package.json
|
||||||
|
PLAYWRIGHT_VERSION=$(grep -o '"@playwright/test": "[^"]*"' package.json | cut -d'"' -f4)
|
||||||
|
echo "playwright_version=${PLAYWRIGHT_VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# Get Bun version (latest)
|
||||||
|
BUN_VERSION=$(bun --version 2>/dev/null || echo "latest")
|
||||||
|
echo "bun_version=${BUN_VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
# Set tags
|
||||||
|
echo "tags=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest,${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${PLAYWRIGHT_VERSION},${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- 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 all tags
|
||||||
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:latest
|
||||||
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:playwright-${{ steps.meta.outputs.playwright_version }}
|
||||||
|
docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}/ci-base:${{ github.sha }}
|
||||||
|
|
||||||
|
- name: Clean up
|
||||||
|
if: always()
|
||||||
|
run: |
|
||||||
|
docker logout ${{ env.REGISTRY }}
|
||||||
+4
-41
@@ -9,7 +9,7 @@ jobs:
|
|||||||
unit-tests:
|
unit-tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: oven/bun:alpine
|
image: docker.notsosm.art/euchre-camp/ci-base:latest
|
||||||
options: --user root
|
options: --user root
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -19,54 +19,17 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: bun install
|
run: bun install
|
||||||
|
|
||||||
- name: Run unit tests
|
|
||||||
run: bun test src/__tests__/unit/ src/__tests__/*.test.tsx src/__tests__/auth-simple.test.ts
|
|
||||||
|
|
||||||
acceptance-tests:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: unit-tests
|
|
||||||
container:
|
|
||||||
image: mcr.microsoft.com/playwright:v1.58.0-jammy
|
|
||||||
options: --user root
|
|
||||||
env:
|
|
||||||
DATABASE_PROVIDER: sqlite
|
|
||||||
DATABASE_URL: file:./prisma/ci.db
|
|
||||||
BETTER_AUTH_SECRET: test-secret-key-for-ci-only
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Bun
|
|
||||||
uses: oven/setup-bun@v2
|
|
||||||
with:
|
|
||||||
bun-version: latest
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: bun install
|
|
||||||
|
|
||||||
- name: Generate Prisma client
|
- name: Generate Prisma client
|
||||||
run: bun x prisma generate
|
run: bun x prisma generate
|
||||||
env:
|
env:
|
||||||
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
|
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
|
||||||
|
|
||||||
- name: Setup SQLite database
|
- name: Run unit tests
|
||||||
run: |
|
run: bun test src/__tests__/unit/ src/__tests__/*.test.tsx src/__tests__/auth-simple.test.ts
|
||||||
# Create SQLite database file
|
|
||||||
mkdir -p prisma
|
|
||||||
bun x prisma migrate deploy
|
|
||||||
|
|
||||||
- name: Run acceptance tests
|
|
||||||
run: bun run test:acceptance
|
|
||||||
env:
|
|
||||||
DATABASE_PROVIDER: sqlite
|
|
||||||
DATABASE_URL: file:./prisma/ci.db
|
|
||||||
BETTER_AUTH_SECRET: test-secret-key-for-ci-only
|
|
||||||
HOME: /root
|
|
||||||
|
|
||||||
analyze-bump-type:
|
analyze-bump-type:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: acceptance-tests
|
needs: unit-tests
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
|
|||||||
@@ -14,6 +14,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# Skip if this is an auto-generated version bump commit
|
# Skip if this is an auto-generated version bump commit
|
||||||
if: "!contains(github.event.head_commit.message, 'chore: bump version')"
|
if: "!contains(github.event.head_commit.message, 'chore: bump version')"
|
||||||
|
container:
|
||||||
|
image: docker.notsosm.art/euchre-camp/ci-base:latest
|
||||||
|
options: --user root
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -63,11 +66,6 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Setup Bun
|
|
||||||
uses: oven/setup-bun@v2
|
|
||||||
with:
|
|
||||||
bun-version: latest
|
|
||||||
|
|
||||||
- name: Bump version
|
- name: Bump version
|
||||||
id: version
|
id: version
|
||||||
run: |
|
run: |
|
||||||
@@ -109,10 +107,6 @@ jobs:
|
|||||||
git push origin "$TAG_NAME"
|
git push origin "$TAG_NAME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
if: steps.commit.outputs.committed == 'true'
|
|
||||||
uses: docker/setup-buildx-action@v3
|
|
||||||
|
|
||||||
- name: Build test-capable image
|
- name: Build test-capable image
|
||||||
if: steps.commit.outputs.committed == 'true'
|
if: steps.commit.outputs.committed == 'true'
|
||||||
run: |
|
run: |
|
||||||
@@ -165,8 +159,36 @@ jobs:
|
|||||||
echo " docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
|
echo " docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Deploy to dev (placeholder)
|
- name: Deploy to dev environment
|
||||||
if: steps.commit.outputs.committed == 'true'
|
if: steps.commit.outputs.committed == 'true'
|
||||||
run: |
|
run: |
|
||||||
echo "Deploying version ${{ steps.version.outputs.new_version }} to dev environment..."
|
echo "Deploying version ${{ steps.version.outputs.new_version }} to dev environment..."
|
||||||
# TODO: Add actual deployment steps
|
|
||||||
|
# Update docker-compose.yml with new image tag using full registry path
|
||||||
|
# The registry is docker.notsosm.art and image is euchre-camp
|
||||||
|
IMAGE_TAG="${{ steps.version.outputs.new_version }}"
|
||||||
|
sed -i "s|image: docker.notsosm.art/euchre-camp:[0-9.]*|image: docker.notsosm.art/euchre-camp:${IMAGE_TAG}|" docker-compose.yml
|
||||||
|
|
||||||
|
# Copy the updated docker-compose.yml to the deployment location
|
||||||
|
# The runners are on the same Docker server where the container is running
|
||||||
|
sudo mkdir -p /home/euchre_camp
|
||||||
|
sudo cp docker-compose.yml /home/euchre_camp/
|
||||||
|
sudo chown -R euchre:euchre /home/euchre_camp
|
||||||
|
|
||||||
|
# Pull and restart the dev container
|
||||||
|
cd /home/euchre_camp
|
||||||
|
docker-compose pull app
|
||||||
|
docker-compose up -d app
|
||||||
|
|
||||||
|
# Wait for container to be healthy
|
||||||
|
echo "Waiting for container to start..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Check if container is running
|
||||||
|
if docker ps --filter "name=euchre-camp-app" --format "{{.Status}}" | grep -q "Up"; then
|
||||||
|
echo "✅ Dev environment successfully deployed with version ${{ steps.version.outputs.new_version }}"
|
||||||
|
else
|
||||||
|
echo "❌ Dev environment deployment failed"
|
||||||
|
docker-compose logs app
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|||||||
+8
-1
@@ -34,7 +34,14 @@ yarn-error.log*
|
|||||||
.pnpm-debug.log*
|
.pnpm-debug.log*
|
||||||
|
|
||||||
# env files (can opt-in for committing if needed)
|
# env files (can opt-in for committing if needed)
|
||||||
.env*
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.development.local
|
||||||
|
.env.test.local
|
||||||
|
.env.production.local
|
||||||
|
# Allow example env files to be tracked
|
||||||
|
!.env.example
|
||||||
|
!.env.development.example
|
||||||
|
|
||||||
# vercel
|
# vercel
|
||||||
.vercel
|
.vercel
|
||||||
|
|||||||
@@ -1,3 +1,37 @@
|
|||||||
|
## [0.1.5] - 2026-04-26
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- ci: fix deployment directory path in release workflow
|
||||||
|
|
||||||
|
## [0.1.4] - 2026-04-02
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- ci: remove acceptance tests and add dev deployment
|
||||||
|
- fix(tests): resolve password validation, csv upload, and admin auth issues
|
||||||
|
- fix(ci): correct playwright config paths and add env example files
|
||||||
|
- fix(ci): use existing PostgreSQL server at dhg.lol
|
||||||
|
- fix(ci): use PostgreSQL in acceptance-tests with dev credentials
|
||||||
|
- feat(ci): build custom Docker images for Gitea Actions compatibility
|
||||||
|
- fix(tests): add @prisma/client mock for test isolation
|
||||||
|
- fix(ci): add prisma generate step to unit-tests job
|
||||||
|
- fix: downgrade ESLint to v8.57.1 for LSP compatibility
|
||||||
|
- fix: improve TypeScript types for better IDE code hinting
|
||||||
|
- feat: migrate to ESLint flat config (eslint.config.js)
|
||||||
|
- Revert "fix: downgrade ESLint to v8.x for .eslintrc.json compatibility"
|
||||||
|
- fix: downgrade ESLint to v8.x for .eslintrc.json compatibility
|
||||||
|
- fix: update PR workflow to exclude e2e tests from unit test phase
|
||||||
|
- fix: avoid global mock clearing in EditTournamentForm tests
|
||||||
|
- fix: avoid global mock clearing in Navigation tests
|
||||||
|
- fix: add DOM cleanup to bun-setup.ts
|
||||||
|
- fix: disable test isolation in bunfig.toml
|
||||||
|
- refactor: improve test structure for Bun compatibility
|
||||||
|
- feat: update CI/CD to use Bun
|
||||||
|
- feat: migrate from npm to Bun
|
||||||
|
- docs: update TODO list with recent fix
|
||||||
|
- fix: add defensive checks to prisma.ts to prevent build failures
|
||||||
|
|
||||||
## [0.1.3] - 2026-04-01
|
## [0.1.3] - 2026-04-01
|
||||||
|
|
||||||
### Patch Changes
|
### Patch Changes
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# Base CI image with Bun, Node.js, Playwright, and build tools
|
||||||
|
# Used for Gitea Actions CI workflows
|
||||||
|
# Uses Microsoft Playwright image as base (Ubuntu-based) with Bun added
|
||||||
|
|
||||||
|
FROM mcr.microsoft.com/playwright:v1.58.0-jammy AS base
|
||||||
|
|
||||||
|
# Install unzip (required for Bun installation) and other tools
|
||||||
|
RUN apt-get update && apt-get install -y unzip && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install Bun (latest version)
|
||||||
|
# Note: The playwright image already has Node.js pre-installed
|
||||||
|
RUN curl -fsSL https://bun.sh/install | bash
|
||||||
|
|
||||||
|
# Add Bun to PATH for subsequent commands
|
||||||
|
ENV PATH="/root/.bun/bin:$PATH"
|
||||||
|
|
||||||
|
# Verify installations
|
||||||
|
RUN echo "=== Bun Version ===" && bun --version && \
|
||||||
|
echo "=== Node.js Version ===" && node --version && \
|
||||||
|
echo "=== Playwright Version ===" && bun x playwright --version
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Set default environment variables
|
||||||
|
ENV DATABASE_PROVIDER=sqlite
|
||||||
|
ENV DATABASE_URL=file:./prisma/ci.db
|
||||||
|
ENV BETTER_AUTH_SECRET=test-secret-key-for-ci-only
|
||||||
|
ENV NODE_ENV=test
|
||||||
|
|
||||||
|
# Health check command (can be overridden)
|
||||||
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
|
||||||
|
CMD bun --version
|
||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
app:
|
||||||
image: euchre-camp/euchre-camp:0.1.0.dev
|
image: docker.notsosm.art/euchre-camp:0.1.0.dev
|
||||||
container_name: euchre-camp-app
|
container_name: euchre-camp-app
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ test.describe('CSV Upload Player Deduplication', () => {
|
|||||||
formData.append('eventId', testTournamentId.toString());
|
formData.append('eventId', testTournamentId.toString());
|
||||||
|
|
||||||
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
||||||
data: formData,
|
multipart: formData,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(response.ok()).toBeTruthy();
|
expect(response.ok()).toBeTruthy();
|
||||||
@@ -133,7 +133,7 @@ test.describe('CSV Upload Player Deduplication', () => {
|
|||||||
formData.append('eventId', testTournamentId.toString());
|
formData.append('eventId', testTournamentId.toString());
|
||||||
|
|
||||||
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
||||||
data: formData,
|
multipart: formData,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(response.ok()).toBeTruthy();
|
expect(response.ok()).toBeTruthy();
|
||||||
@@ -190,7 +190,7 @@ test.describe('CSV Upload Player Deduplication', () => {
|
|||||||
formData.append('eventId', testTournamentId.toString());
|
formData.append('eventId', testTournamentId.toString());
|
||||||
|
|
||||||
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
const response = await request.post('http://localhost:3000/api/matches/upload', {
|
||||||
data: formData,
|
multipart: formData,
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(response.ok()).toBeTruthy();
|
expect(response.ok()).toBeTruthy();
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ test.describe('Tournament Edit - allowTies functionality', () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should display allowTies checkbox on edit form', async ({ page }) => {
|
test('should display allowTies checkbox on edit form @chromium-admin', async ({ page }) => {
|
||||||
// Navigate to tournament edit page
|
// Navigate to tournament edit page
|
||||||
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
|
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ test.describe('Tournament Edit - allowTies functionality', () => {
|
|||||||
await expect(allowTiesCheckbox).not.toBeChecked();
|
await expect(allowTiesCheckbox).not.toBeChecked();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should save allowTies when toggled to true', async ({ page }) => {
|
test('should save allowTies when toggled to true @chromium-admin', async ({ page }) => {
|
||||||
// Navigate to tournament edit page
|
// Navigate to tournament edit page
|
||||||
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
|
await page.goto(`/admin/tournaments/${tournamentId}/edit`);
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ test.describe('Tournament Edit - allowTies functionality', () => {
|
|||||||
expect(updatedTournament?.allowTies).toBe(true);
|
expect(updatedTournament?.allowTies).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should save allowTies when toggled to false', async ({ page }) => {
|
test('should save allowTies when toggled to false @chromium-admin', async ({ page }) => {
|
||||||
// First, set allowTies to true
|
// First, set allowTies to true
|
||||||
await prisma.event.update({
|
await prisma.event.update({
|
||||||
where: { id: tournamentId },
|
where: { id: tournamentId },
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "euchre_camp",
|
"name": "euchre_camp",
|
||||||
"version": "0.1.3",
|
"version": "0.1.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "NEXT_PUBLIC_GIT_COMMIT=$(git rev-parse --short HEAD) next dev",
|
"dev": "NEXT_PUBLIC_GIT_COMMIT=$(git rev-parse --short HEAD) next dev",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { defineConfig, devices } from '@playwright/test';
|
import { defineConfig, devices } from '@playwright/test';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
testDir: './src/__tests__/e2e',
|
testDir: './e2e',
|
||||||
timeout: 30000,
|
timeout: 30000,
|
||||||
expect: {
|
expect: {
|
||||||
timeout: 5000
|
timeout: 5000
|
||||||
@@ -17,7 +17,7 @@ export default defineConfig({
|
|||||||
// Reporter to use
|
// Reporter to use
|
||||||
reporter: 'html',
|
reporter: 'html',
|
||||||
// Global setup and teardown
|
// Global setup and teardown
|
||||||
globalSetup: require.resolve('./src/__tests__/e2e/global.setup'),
|
globalSetup: require.resolve('./e2e/global.setup'),
|
||||||
// Use base URL for relative navigation
|
// Use base URL for relative navigation
|
||||||
use: {
|
use: {
|
||||||
baseURL: 'http://localhost:3000',
|
baseURL: 'http://localhost:3000',
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const path = require('path');
|
|||||||
const { execSync } = require('child_process');
|
const { execSync } = require('child_process');
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
const REGISTRY = 'euchre-camp';
|
const REGISTRY = 'docker.notsosm.art';
|
||||||
const IMAGE_NAME = 'euchre-camp';
|
const IMAGE_NAME = 'euchre-camp';
|
||||||
|
|
||||||
// Get current version from package.json
|
// Get current version from package.json
|
||||||
|
|||||||
@@ -1,8 +1,21 @@
|
|||||||
// Setup file for Bun test runner to provide DOM environment
|
// Setup file for Bun test runner to provide DOM environment
|
||||||
import { JSDOM } from 'jsdom';
|
import { JSDOM } from 'jsdom';
|
||||||
|
import { mock } from 'bun:test';
|
||||||
|
|
||||||
console.log('Loading bun-setup.ts...');
|
console.log('Loading bun-setup.ts...');
|
||||||
|
|
||||||
|
// Mock @prisma/client to avoid dependency on generated Prisma client
|
||||||
|
// This allows unit tests to run without requiring `prisma generate`
|
||||||
|
mock.module('@prisma/client', () => {
|
||||||
|
return {
|
||||||
|
PrismaClient: class MockPrismaClient {
|
||||||
|
$connect() {}
|
||||||
|
$disconnect() {}
|
||||||
|
$transaction() {}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
|
const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>', {
|
||||||
url: 'http://localhost',
|
url: 'http://localhost',
|
||||||
pretendToBeVisual: true,
|
pretendToBeVisual: true,
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ export const auth = betterAuth({
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
autoSignIn: true, // Automatically sign in after registration
|
autoSignIn: true, // Automatically sign in after registration
|
||||||
requireEmailVerification: false, // Don't require email verification for tests
|
requireEmailVerification: false, // Don't require email verification for tests
|
||||||
|
minPasswordLength: 8, // Set minimum password length
|
||||||
|
maxPasswordLength: 128, // Set maximum password length
|
||||||
},
|
},
|
||||||
secret: process.env.BETTER_AUTH_SECRET || process.env.NEXTAUTH_SECRET,
|
secret: process.env.BETTER_AUTH_SECRET || process.env.NEXTAUTH_SECRET,
|
||||||
baseURL: process.env.BETTER_AUTH_URL || process.env.NEXTAUTH_URL || "http://localhost:3000",
|
baseURL: process.env.BETTER_AUTH_URL || process.env.NEXTAUTH_URL || "http://localhost:3000",
|
||||||
|
|||||||
Reference in New Issue
Block a user