* fix: remove @calcom/web imports from packages/features to eliminate circular dependency - Migrate UserTableUser and MemberPermissions types to packages/features/users/types/user-table.ts - Migrate useGeo hook to packages/features/geo/GeoContext.tsx - Migrate buildLegacyRequest to packages/lib/buildLegacyCtx.ts - Migrate Calendar component to packages/features/calendars/weeklyview/components/ - Move test utilities (bookingScenario, fixtures) to packages/features/test/ - Update all imports in packages/features to use new locations - Add re-exports in apps/web for backward compatibility Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: delete original implementation files and fix type issues - Delete original calendar component files in apps/web (keep only re-export stubs) - Migrate OutOfOfficeInSlots to packages/features/bookings/components - Convert apps/web OutOfOfficeInSlots to re-export stub - Fix className vs class issue in Calendar.tsx - Fix @calcom/trpc import violation in user-table.ts by using structural type Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing isGroup and contains fields to UserTableUser attributes type Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update customRole type to match actual Prisma Role model Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix build * fix * fix * cleanup weeklyview * fix * refactor to mv MemberPermissions to types package * add types dependency to features * fix * fix * fix * fix * fix * fix * rename * rename * migrate * migrate * migrate * fix * fix * fix * refactor: move test utilities from packages/features/test to tests/libs - Move bookingScenario utilities to tests/libs/bookingScenario - Move fixtures to tests/libs/fixtures - Update all imports in packages/features test files to use new location - Update all imports in apps/web test files to use new location - Eliminates duplication of test utilities between packages/features and apps/web Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: correct relative import paths for tests/libs in test files Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: replace test utility implementations with re-exports to tests/libs Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: fix test import paths and move signup handler tests to apps/web Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: move buildLegacyCtx to packages/lib and restore handlers to packages/features - Move buildLegacyCtx from apps/web/lib to packages/lib to break circular dependency - Update apps/web/lib/buildLegacyCtx.ts to re-export from @calcom/lib - Restore signup handlers and tests to packages/features/auth/signup/handlers - Update handler imports to use @calcom/lib/buildLegacyCtx instead of @calcom/web/lib/buildLegacyCtx Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update recurring-event.test.ts imports to use tests/libs path Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: delete test re-export files and update imports to use tests/libs directly Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update remaining test imports to use tests/libs directly Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: update handleRecurringEventBooking calls to match function signature (1 arg) Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * remove * migrate tests * migrate tests * refactor: update test mock imports by removing and using async for mock creators. * fix type errors * fix: add type assertion for MockUser in p2002.test-suite.ts Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: restore locale import in compareReminderBodyToTemplate.test.ts using relative path Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * feat: create @calcom/testing package and migrate tests from /tests directory - Created new @calcom/testing package in /packages/testing - Moved all files from /tests to /packages/testing - Updated all imports across the codebase to use @calcom/testing alias - Removed /tests directory at root level This allows other packages like @calcom/features and @calcom/web to import testing utilities using the @calcom/testing alias instead of relative paths. Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix * fix * fix: add missing useBookings export to @calcom/atoms package Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add missing useCalendarsBusyTimes and useConnectedCalendars exports to @calcom/atoms Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * chore: add @calcom/testing as explicit devDependency to packages that use it Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * refactor: move setupVitest.ts into @calcom/testing package Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix * chore: add biome rules to restrict @calcom/testing imports Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix * rename libs to lib * rename libs to lib * add rule * add rule * refactor: remove @calcom/features imports from @calcom/testing - Move mockPaymentSuccessWebhookFromStripe to fresh-booking.test.ts - Replace ProfileRepository.generateProfileUid() with uuidv4() - Clone Tracking type into @calcom/testing/src/lib/types.ts - Update imports in expects.ts and getMockRequestDataForBooking.ts - Move source files into src/ folder - Move CalendarManager mock to @calcom/features Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * fix: add explicit exports for nested paths in @calcom/testing Co-Authored-By: benny@cal.com <sldisek783@gmail.com> * improve * improve * fix * fix * fix type checks * fix type checks * fix type checks * fix tests --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Cal.com Booking Flow Performance Test Suite
This directory contains performance tests for Cal.com's booking flow using Grafana k6. The tests are designed to measure the performance of the booking flow under various load conditions, including high-volume scenarios with tens of thousands of requests per minute.
Prerequisites
- k6 installed on your machine
- Cal.com running locally or a deployed instance to test against
Test Structure
The test suite is organized into the following directories:
smoke/: Simple tests with minimal load to verify functionalityload/: Tests that simulate expected normal load (thousands of requests per minute)stress/: Tests that simulate heavy load to find breaking points (tens of thousands of requests per minute)spike/: Tests that simulate sudden spikes in traffic (rapid increase to tens of thousands of requests per minute)utils/: Shared utilities and helper functions
Running Tests
Setting the Base URL
By default, tests will run against http://localhost:3000. To test against a different environment, set the BASE_URL environment variable:
BASE_URL=https://your-cal-instance.com k6 run tests/performance/smoke/booking.js
Running Smoke Tests
# Run booking flow smoke test
k6 run tests/performance/smoke/booking.js
Running Load Tests
# Run booking flow load test (thousands of requests per minute)
k6 run tests/performance/load/booking.js
Running Stress Tests
# Run booking flow stress test (tens of thousands of requests per minute)
k6 run tests/performance/stress/booking.js
Running Spike Tests
# Run booking flow spike test (rapid spike to tens of thousands of requests per minute)
k6 run tests/performance/spike/booking.js
Running Tests with Docker Script
You can also run the performance tests using the provided run-k6-local.sh script.
This script automatically detects your operating system (Linux or macOS) and sets up the appropriate Docker flags for running k6 tests.
Prerequisites
- Docker installed and running
- Cal.com running locally (default:
http://localhost:3000)
Usage
From the root of the project, run:
./tests/scripts/run-k6-local.sh
You’ll see an interactive menu:
Select a test:
1) smoke
2) load
3) stress
4) spike
5) all
0) exit
Alternatively, you can run directly from the CLI:
# Run smoke tests
./tests/scripts/run-k6-local.sh smoke
# Run all tests
./tests/scripts/run-k6-local.sh all
Customizing
You can override the following environment variables:
BASE_URL=http://localhost:3000 \
TOKEN=your_token_here \
./tests/scripts/run-k6-local.sh load
Supported env vars:
BASE_URLTOKENTEST_USER_FREETEST_PASSWORD_FREETEST_USER_PROTEST_PASSWORD_PRO
Test Scenarios
The test suite focuses specifically on the booking flow, which is the most critical user journey in Cal.com:
- Booking Page View: Tests the performance of loading and viewing booking pages
Load Parameters
The tests are configured to handle tens of thousands of requests per minute during peak times:
- Load Tests: Up to 2,000 concurrent virtual users
- Stress Tests: Up to 4,000 concurrent virtual users
- Spike Tests: Rapid spike to 5,000 concurrent virtual users
Thresholds
Performance thresholds are defined in utils/config.js and vary by test type:
- Smoke Tests: Strictest thresholds to catch any performance regressions
- Load Tests: Moderate thresholds for normal operating conditions
- Stress Tests: More lenient thresholds for heavy load conditions
- Spike Tests: Most lenient thresholds for sudden traffic spikes
Environment Variables
The following environment variables can be used to configure the tests:
BASE_URL: Base URL for the application (default:http://localhost:3000)TEST_USER_FREE: Username for free tier testing (default:free)TEST_PASSWORD_FREE: Password for free tier testing (default:free)TEST_USER_PRO: Username for pro tier testing (default:pro)TEST_PASSWORD_PRO: Password for pro tier testing (default:pro)
Adding New Tests
To add a new test:
- Create a new JS file in the appropriate directory (smoke, load, stress, or spike)
- Import necessary helpers from
utils/helpers.js - Define test options including VUs, duration, and thresholds
- Implement the test scenario using k6 and helper functions