wip: Tournament schedule tests - 27/30 passing
Pull Request / unit-tests (pull_request) Successful in 57s
Pull Request / e2e-tests (pull_request) Failing after 1m49s
Pull Request / analyze-bump-type (pull_request) Has been skipped

Progress on issue #7 - tournament schedule e2e tests:
- Created ScheduleDisplay component with clickthrough to matches
- Updated ScheduleGenerator to use router.refresh() instead of window.location.reload()
- Fixed step definitions to handle page hydration and reloads
- Fixed database cleanup hook to use Prisma API instead of raw SQL
- Added test IDs and logging for debugging
- Updated feature file to match actual UI behavior

27/30 scenarios passing:
- All auth and navigation scenarios pass
- Scenario 1 (view schedule page) passes
- Scenarios 2-4 (generate schedule, view rounds, click matchup) need investigation

Remaining issues:
1. Page refresh not picking up newly generated schedule data
2. Round data not visible after 'Generated' message
3. Matchup elements not found after refresh
4. Database cleanup hook needs proper handling of foreign keys

Next steps:
1. Investigate why router.refresh() and explicit reload don't show new data
2. Check if there's a caching issue in the production build
3. Verify database transactions are committing correctly
4. Add more logging to trace data flow
This commit is contained in:
2026-04-27 00:29:38 -07:00
parent 799f5e1c63
commit 9353ab1edc
9 changed files with 223 additions and 53 deletions
+76 -1
View File
@@ -116,11 +116,86 @@ Before(async function () {
});
/**
* After each scenario: Close page
* After each scenario: Close page and clean up test data
*/
After(async function () {
console.log('🌍 Cleaning up after scenario...');
// Clean up test data from dev database
try {
const prisma = await world.getPrisma();
const dbUrl = process.env.DATABASE_URL || '';
// Safety check: only clean up dev/test databases
if (dbUrl.includes('_dev') || dbUrl.includes('test') || dbUrl.includes('ci')) {
// Use Prisma API for cleanup instead of raw SQL to avoid column name issues
// Find test tournaments first
const testTournaments = await prisma.event.findMany({
where: {
OR: [
{ name: { startsWith: 'Test Tournament' } },
{ name: { startsWith: 'Test Schedule Tournament' } }
]
},
select: { id: true }
});
const tournamentIds = testTournaments.map(t => t.id);
if (tournamentIds.length > 0) {
// Delete bracket matchups via Prisma
await prisma.bracketMatchup.deleteMany({
where: {
round: {
eventId: { in: tournamentIds }
}
}
});
// Delete rounds
await prisma.tournamentRound.deleteMany({
where: { eventId: { in: tournamentIds } }
});
// Delete event participants
await prisma.eventParticipant.deleteMany({
where: { eventId: { in: tournamentIds } }
});
// Delete tournaments
await prisma.event.deleteMany({
where: { id: { in: tournamentIds } }
});
}
// Delete test players
await prisma.player.deleteMany({
where: {
OR: [
{ name: { startsWith: 'Tournament Player' } },
{ name: { startsWith: 'Schedule Player' } },
{ name: { startsWith: 'Test Player' } },
{ name: { startsWith: 'Test Activity Player' } }
]
}
});
// Delete test users
await prisma.user.deleteMany({
where: {
email: { startsWith: 'cucumber-' }
}
});
console.log('🌍 Test data cleaned up from dev database');
} else {
console.log('🌍 Skipping database cleanup (not a dev/test database)');
}
} catch (error) {
console.log('🌍 Database cleanup error (non-critical):', error);
}
// Close page and context
if (world.page) {
await world.page.close();
+4 -7
View File
@@ -60,14 +60,11 @@ export class World implements WorldState {
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');
const { PrismaPg } = await import('@prisma/adapter-pg');
const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });
this.prisma = new PrismaClient({ adapter });
// Use the shared prisma instance from the app's lib
// This handles the adapter setup correctly
const { prisma } = require('@/lib/prisma');
this.prisma = prisma;
}
return this.prisma;
}