Skip to content

Sprint 4 PR 4.6b — integration tests for availability router - #234

Merged
tomqwu merged 1 commit into
mainfrom
sprint-4-pr-4-6b-availability-integration
Jul 18, 2026
Merged

tomqwu merged 1 commit into
mainfrom
sprint-4-pr-4-6b-availability-integration

Conversation

@tomqwu

@tomqwu tomqwu commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

Continues Sprint 4 PR 4.6b (file-by-file revival of the tests/integration/ tier). Adds a sixth production-endpoint integration file that drives the /availability router over real HTTP against the session-scoped uvicorn api_server fixture. Exercises time-off, single-date exceptions, and the recurring rrule per person.

Coverage

tests/integration/test_availability.py — 16 tests covering:

  • POST /availability/ — first-time create + missing-person 404
  • GET /availability/{person_id}/timeoff — empty state + list-after-add
  • POST /availability/{person_id}/timeoff — success, invalid range 400, overlap 409
  • PATCH /availability/{person_id}/timeoff/{id} — mutate dates + reason
  • DELETE /availability/{person_id}/timeoff/{id} — removal
  • GET /availability/{person_id}/exceptions — empty state
  • POST /availability/{person_id}/exceptions — create + idempotency on duplicate date
  • DELETE /availability/{person_id}/exceptions/{id} — removal
  • GET/PUT/DELETE /availability/{person_id}/rrule — get-when-null, set, idempotent clear

Validation

  • poetry run pytest tests/integration/test_availability.py -v — 16 passed
  • poetry run pytest tests/integration/ — 91 passed locally (with in-flight PR Sprint 4 PR 4.6b — integration tests for teams router #232 test_teams also present)
  • poetry run pytest tests/unit -q — 342 passed, 21 skipped
  • poetry run black tests/integration/test_availability.py — clean
  • poetry run ruff check tests/integration/test_availability.py — clean

No OpenAPI snapshot refresh (no endpoints added or changed).

Notes

  • Each test uses a fresh org + admin (also the target Person) so time-off dates don't collide across tests.
  • Future-dated windows (+14/+30/+60/+90/+120 days) space out the different tests' vacation periods so the overlap-guard assertions aren't accidentally triggered across them.

Follow-ups

Events integration is up as PR #233; teams integration is up as PR #232. Next: conflicts, invitations already covered — remaining production-endpoint files still to revive under tests/integration/.


Generated by Claude Code

Summary: Continues Sprint 4 PR 4.6b (file-by-file revival of the
tests/integration/ tier). Adds a sixth production-endpoint integration
file that drives the /availability router over real HTTP against the
session-scoped uvicorn api_server fixture. Exercises time-off, single-
date exceptions, and the recurring rrule per person.

Changed files: tests/integration/test_availability.py (new, 16 tests)

Validation:
  poetry run pytest tests/integration/test_availability.py -v → 16 passed
  poetry run pytest tests/integration/                        → 91 passed
    (with concurrent PR #232's test_teams.py also present locally)
  poetry run pytest tests/unit -q                              → 342 passed, 21 skipped
  poetry run black tests/integration/test_availability.py     → clean
  poetry run ruff check tests/integration/test_availability.py → clean

Coverage of /availability endpoints:
  - POST   /availability/                          — first-time create + missing-person 404
  - GET    /availability/{person_id}/timeoff       — empty state + list-after-add
  - POST   /availability/{person_id}/timeoff       — success, invalid range 400, overlap 409
  - PATCH  /availability/{person_id}/timeoff/{id}  — mutate dates + reason
  - DELETE /availability/{person_id}/timeoff/{id}  — removal
  - GET    /availability/{person_id}/exceptions    — empty state
  - POST   /availability/{person_id}/exceptions    — create + idempotency on duplicate
  - DELETE /availability/{person_id}/exceptions/{id} — removal
  - GET/PUT/DELETE /availability/{person_id}/rrule — get-when-null, set, idempotent clear

No OpenAPI snapshot refresh (no endpoints added or changed).

Follow-ups: continue file-by-file revival with the remaining routers
(events already up in PR #233, teams already up in PR #232).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CSAxAttZHQ5oLxLdcZZLt6
@tomqwu
tomqwu marked this pull request as ready for review July 18, 2026 13:03
@tomqwu
tomqwu merged commit 31b350c into main Jul 18, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants