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.
## Summary
- Fix `isProductionDatabase()` to allow CI database (`euchre_camp_ci`)
- Add database schema reset before CI test runs
- Create `global.teardown.ts` for cleanup (CI: full reset, dev/prod: selective cleanup)
- Add `acceptance-tests` job to PR workflow with CI database
- Create `sync-prod-to-dev.js` script for one-way prod→dev sync
- Add `just` recipes: `sync-dev`, `test-prod`, `reset-ci-db`
- Store credentials in `.credentials` (gitignored) with unique CI user
## Testing
Verified against CI database:
- Schema reset works
- Migrations apply correctly
- Test users created successfully
- 219 tests pass (slow but working)
## Next Steps
- Set `CI_DATABASE_URL` as Gitea repository variable
Reviewed-on: #35
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
## 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>
Mock @prisma/client globally in bun-setup.ts to allow unit tests to run
without requiring the generated Prisma client. This improves test isolation
and allows tests to pass even when prisma generate hasn't been run.
- Install @types/bun and @types/jsdom for proper type definitions
- Fix mock function typing in test files
- Create jest-dom.d.ts to properly extend Bun's Matchers interface
- Remove MockedFunction imports (not supported in Bun's types)
- Cast global.fetch and useSession mocks to any where needed
- Fix mock.module return types to match expected signatures
This resolves TypeScript errors that were preventing proper code
completion and type checking in IDEs.
Replace mock.clearAllMocks() with mockFetch.mockClear() to only
clear the specific fetch mock without affecting global module mocks
used by other test files.
- Add explicit next/link mock for consistency
- Remove mock.clearAllMocks() from beforeEach/afterEach
- Navigation tests now rely on module mocks set at file level
- Prevents interference with other test files
Add afterEach hook to clear document.body.innerHTML between tests.
This prevents test pollution where elements from previous tests
interfere with subsequent test queries.
- Update all test files to use named mock variables instead of inline mocks
- Clear mock history in beforeEach instead of using mock.restore()
- Add default mock implementations stored at module level
- Document that tests should not use --randomize flag due to mock.module() limitations
- All 89 unit tests pass consistently without randomization
- Install Bun via mise
- Update package.json scripts to use Bun
- Migrate unit tests from Vitest to Bun test runner
- Migrate component tests from Vitest to Bun test runner
- Configure Bun with DOM environment for React Testing Library
- Keep Playwright for E2E tests (as planned)
- 93/100 tests passing (7 flaky tests when running all together, pass individually)
Fix the allowTies checkbox not being saved when editing tournaments. Added comprehensive unit and E2E tests to verify the fix.
Co-authored-by: David Gwilliam <dhgwilliam@gmail.com>
Co-committed-by: David Gwilliam <dhgwilliam@gmail.com>
- Fixed unused variables in unit tests (elo.test.ts, permissions.test.ts)
- Fixed unused variables in E2E tests (account-acceptance.test.ts, elo-ratings.test.ts, epic1-auth-registration.test.ts, global.setup.ts)
- Fixed 'any' type usage in EditTournamentForm.test.tsx and auth-simple.test.ts
- Fixed unescaped quotes and apostrophes in React components
- Fixed TypeScript type errors in Navigation.tsx, test-api/page.tsx, and matches/upload/page.tsx
- Fixed missing useEffect dependency in tournaments/[id]/entry/page.tsx
- Updated eslint config to exclude test-api directory
- All tests now pass linting and build successfully