brackt/app/routes/leagues/__tests__
Chris Parsons 05fe1493a3
Refactor league settings into per-section components (#379)
* Refactor league settings into per-section components (#347)

Extract all settings sections from the monolithic 1009-line route file into
individual components under app/components/league/settings/. Route file drops
to ~300 lines. Separates draft-order dirty state from general settings dirty
state, deduplicates section-change handling, and fixes several bugs found
during review (typo in pointsFor5th, wrong mock in tests, lint violations).

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

* Fix Stop hook loop: suppress output on typecheck success

The Stop hook was producing stdout on every run, causing Claude Code to
feed it back as context and rewake the model each turn. Now emits a
systemMessage JSON only on failure.

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

* Typescript fix

* Remove type asserting

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 14:19:50 -07:00
..
autodraft.test.ts Add draft room closure after completion (#359) 2026-04-30 10:14:14 -07:00
draft-board-access.test.ts Add oxlint linting setup with zero errors (#194) 2026-03-21 09:44:05 -07:00
draft-order-visibility.test.ts User/chris/bracket UI redesign (#95) 2026-03-09 22:44:33 -07:00
draft-reconnection-sync.test.ts Show "Syncing Draft State..." overlay during draft reconnection (#361) 2026-04-30 20:33:00 -07:00
draft-reset.test.ts Add draft room closure after completion (#359) 2026-04-30 10:14:14 -07:00
README.md Migrate auth from Clerk to BetterAuth (#354) 2026-04-29 10:03:50 -07:00
settings-update.test.ts Refactor league settings into per-section components (#379) 2026-05-05 14:19:50 -07:00
team-management.test.ts Migrate auth from Clerk to BetterAuth (#354) 2026-04-29 10:03:50 -07:00

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

npm test

Run tests in watch mode

npm run dev:test

Run tests with UI

npm run test:ui

Run tests with coverage

npm run test:coverage

Run only team management tests

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