brackt/app/routes/leagues/__tests__/README.md
Chris Parsons 5268e07365
Migrate auth from Clerk to BetterAuth (#354)
* Fix BetterAuth field mapping and add owner-prefixed team names

- Fix auth.server.ts: use camelCase Drizzle field names for BetterAuth
  adapter (was snake_case, causing user inserts to fail); add
  generateId: "uuid" so PostgreSQL UUID columns accept generated IDs
- Add prependOwnerToTeamName / stripOwnerFromTeamName utilities
- Invite join, league creation, and settings assign/remove all now
  manage the owner-prefix on team names atomically

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Complete BetterAuth migration: auth flows, rename, and cleanup

- Add /forgot-password and /reset-password pages (full password reset flow)
- Add 'Forgot password?' link on login page
- Fix register.tsx: add explicit window.location fallback after signUp
- Rename commissionerAuditLog.actorClerkId → actorUserId (migration 0084)
  and update all references in model, routes, components, and tests
- Rewrite docs/agents/auth.md to document BetterAuth (removes all Clerk refs)
- Update test fixtures and schema comments to remove Clerk ID references;
  use UUID-format IDs throughout test data
- Update docs/agents/domain-models.md ownerId description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* Fix BetterAuth ID generation, clean up review issues

- Set generateId: false so BetterAuth omits id from inserts; add
  $defaultFn(crypto.randomUUID) to accounts/sessions/verifications
  so Drizzle fills it in (fixes null id constraint violation on signup)
- Move renameTeam to static import; rename before removeTeamOwner so
  a failed rename leaves owner intact rather than leaving a stale prefix
- Clarify stripOwnerFromTeamName toTitleCase assumption in comment
- Annotate reset-password token fallback to explain loader guarantee

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 10:03:50 -07:00

184 lines
5.5 KiB
Markdown

# League Settings Integration Tests
## Overview
This directory contains integration tests for league settings features. The tests are written using Vitest and cover the following functionality:
### Team Management
- **Remove Team Owner**: Commissioners can remove owners from teams
- **Assign Team Owner**: Admins can assign users to teams via dropdown
- **Authorization**: Proper access control for commissioners vs admins
- **Edge Cases**: Handling invalid inputs and error scenarios
- **Integration Scenarios**: Complete workflows and multi-team operations
### Draft Reset
- **Admin-Only Access**: Only admins can reset drafts
- **Delete Operations**: Clearing picks and queues
- **Status Updates**: Resetting season to pre_draft
- **Draft Order Preservation**: Ensuring draft slots remain intact
- **Data Integrity**: Maintaining referential integrity during reset
## Test Structure
### Test Files
- `team-management.test.ts` - Team management feature tests
- `draft-reset.test.ts` - Draft reset feature tests
### Fixtures
- `app/test/fixtures/user.ts` - Mock user data including admin and regular users
- `app/test/fixtures/team.ts` - Mock team data
- `app/test/fixtures/league.ts` - Mock league data
## Running Tests
### Run all tests
```bash
npm test
```
### Run tests in watch mode
```bash
npm run dev:test
```
### Run tests with UI
```bash
npm run test:ui
```
### Run tests with coverage
```bash
npm run test:coverage
```
### Run only team management tests
```bash
npm test team-management
```
## Test Coverage
The test suite covers:
### 1. Remove Owner Functionality (4 tests)
- ✅ Successfully remove an owner from a team
- ✅ Handle errors when removal fails
- ✅ Allow commissioners to remove owners
- ✅ Verify proper database calls
### 2. Assign Owner Functionality (5 tests)
- ✅ Successfully assign an owner to a team
- ✅ Handle errors when assignment fails
- ✅ Only allow admins to assign owners
- ✅ Prevent non-admins from assigning owners
- ✅ Replace existing owner when assigning new owner
### 3. Admin User List (3 tests)
- ✅ Fetch all users for admin dropdown
- ✅ Only fetch users when user is admin
- ✅ Return empty array for non-admin users
### 4. Authorization (3 tests)
- ✅ Verify admin status before allowing assignment
- ✅ Reject assignment for non-admin users
- ✅ Allow commissioners to remove owners regardless of admin status
### 5. Edge Cases (6 tests)
- ✅ Prevent assigning user who already owns a team in the league
- ✅ Handle removing owner from team with no owner
- ✅ Handle assigning owner to team that already has owner
- ✅ Handle invalid team ID gracefully
- ✅ Handle invalid user ID gracefully
- ✅ Proper error messages
### 6. Integration Scenarios (3 tests)
- ✅ Complete workflow: assign then remove owner
- ✅ Reassigning owner from one user to another
- ✅ Handle multiple teams with different ownership states
**Total: 24 tests**
## Draft Reset Test Coverage
### 1. Authorization (3 tests)
- ✅ Only allow admins to reset draft
- ✅ Reject non-admin users from resetting draft
- ✅ Reject commissioners who are not admins
### 2. Delete Operations (4 tests)
- ✅ Delete all draft picks for a season
- ✅ Clear all draft queues for a season
- ✅ Handle errors when deleting draft picks fails
- ✅ Handle errors when clearing queues fails
### 3. Season Status Update (2 tests)
- ✅ Update season status to pre_draft
- ✅ Handle errors when updating season status fails
### 4. Status Validation (4 tests)
- ✅ Allow reset when season status is draft
- ✅ Allow reset when season status is completed
- ✅ Allow reset when season status is active
- ✅ Not allow reset when season status is pre_draft
### 5. Complete Workflow (3 tests)
- ✅ Execute complete reset workflow in correct order
- ✅ Not proceed with reset if admin check fails
- ✅ Handle partial failure gracefully
### 6. Draft Order Preservation (2 tests)
- ✅ Not delete or modify draft slots during reset
- ✅ Preserve draft order after reset
### 7. Edge Cases (4 tests)
- ✅ Handle reset when no draft picks exist
- ✅ Handle reset when no draft queues exist
- ✅ Handle invalid season ID gracefully
- ✅ Handle concurrent reset attempts
### 8. Data Integrity (2 tests)
- ✅ Ensure all picks are deleted before updating status
- ✅ Maintain referential integrity after reset
**Total: 24 tests**
## Key Features Tested
### Commissioner Capabilities
- Remove owners from any team in their league
- No ability to assign owners (admin-only)
### Admin Capabilities
- Remove owners from any team
- Assign any user to any team via dropdown
- Access to full user list for assignment
- **Reset draft** (admin-only, not commissioners)
- Delete all draft picks
- Clear all draft queues
- Reset season to pre_draft status
- Preserve draft order
### Security
- Admin-only check enforced for assignments and draft resets
- Commissioner access verified for removals
- Proper error handling for unauthorized access
- Status validation for draft reset operations
## Mocking Strategy
The tests use Vitest's mocking capabilities to:
- Mock database operations (`removeTeamOwner`, `assignTeamOwner`)
- Mock user authentication (`isUserAdmin`)
- Mock user data fetching (`findAllUsers`)
- Simulate various success and error scenarios
## Future Enhancements
Potential additions to the test suite:
- [ ] Test UI component rendering
- [ ] Test form validation
- [ ] Test loading states
- [ ] Test success/error toast messages
- [ ] Test concurrent operations
- [ ] Test with real database (integration tests)
- [ ] Performance tests for large user lists