feat: Implement tournament schedule tab and fix E2E tests (#27)
## Summary This PR implements the tournament schedule tab functionality and fixes all remaining E2E test failures. ### Changes Included 1. **Tournament Schedule Feature** - Added tournament schedule page at `/admin/tournaments/[id]/schedule` - Implemented "Generate Schedule" button functionality - Added schedule generation logic for round-robin tournaments 2. **E2E Test Fixes** - Fixed database connection issues in production builds - Improved test reliability with better error handling and debugging - Updated test infrastructure to use environment variables instead of hardcoded values 3. **CI/CD Updates** - Added E2E test job to PR workflow - Configured tests to run against development database - Moved database password to Gitea secrets 4. **Code Quality** - Removed hardcoded passwords from codebase - Improved Prisma client configuration - Enhanced authentication and navigation components ### Test Results All 16 E2E test scenarios are now passing: - Authentication tests: ✅ - Registration tests: ✅ - Tournament schedule tests: ✅ - Player schedule tests: ✅ - Admin navigation tests: ✅ ### Database Configuration - Tests run against `euchre_camp_dev` database - Production builds use environment variables for database configuration - Database password stored in Gitea secrets as `DB_PASSWORD` ### CI Pipeline The PR workflow now includes: 1. Unit tests 2. E2E tests (using production build) 3. Version bump analysis E2E tests must pass before PR can be merged. Reviewed-on: #27 Co-authored-by: David Gwilliam <dhgwilliam@gmail.com> Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
This commit was merged in pull request #27.
This commit is contained in:
@@ -18,7 +18,12 @@ export interface WorldState {
|
||||
tournament?: any;
|
||||
tournamentTeamCount?: number;
|
||||
player?: any;
|
||||
playerId?: string; // Added for storing extracted player ID
|
||||
match?: any;
|
||||
generatedData?: {
|
||||
uniqueEmail?: string;
|
||||
[key: string]: any;
|
||||
};
|
||||
}
|
||||
|
||||
export class World implements WorldState {
|
||||
@@ -34,7 +39,12 @@ export class World implements WorldState {
|
||||
tournament?: any;
|
||||
tournamentTeamCount?: number;
|
||||
player?: any;
|
||||
playerId?: string; // Added for storing extracted player ID
|
||||
match?: any;
|
||||
generatedData?: {
|
||||
uniqueEmail?: string;
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
constructor() {
|
||||
this.baseURL = process.env.BASE_URL || 'http://localhost:3000';
|
||||
@@ -43,9 +53,21 @@ export class World implements WorldState {
|
||||
|
||||
async getPrisma() {
|
||||
if (!this.prisma) {
|
||||
// Lazily load PrismaClient when first accessed
|
||||
// Load .env.development file for test database configuration (fallback)
|
||||
require('dotenv').config({ path: '.env.development' })
|
||||
|
||||
// Ensure database environment is set for Cucumber tests BEFORE importing PrismaClient
|
||||
if (!process.env.DATABASE_URL) {
|
||||
throw new Error('DATABASE_URL not set. Make sure .env.development exists and contains DATABASE_URL or set DATABASE_URL environment variable.');
|
||||
}
|
||||
process.env.DATABASE_PROVIDER = process.env.DATABASE_PROVIDER || 'postgresql';
|
||||
|
||||
// Import PrismaClient AFTER setting environment variables
|
||||
const { PrismaClient } = await import('@prisma/client');
|
||||
this.prisma = new PrismaClient();
|
||||
const { PrismaPg } = await import('@prisma/adapter-pg');
|
||||
|
||||
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
|
||||
this.prisma = new PrismaClient({ adapter });
|
||||
}
|
||||
return this.prisma;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user