Prevents risky test warning where setupCollection makes assertions
before expectNotToPerformAssertions is called for server-side tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The cached token from setupMagicUrl may have been consumed by
setupMagicUrlSession in a previous test method in the same process,
causing a 401 when the test tries to create a session with it.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add MODEL_ATTRIBUTE_VARCHAR/TEXT/MEDIUMTEXT/LONGTEXT to Collection and
AttributeList models, fixing TypeError in Response::hasModel() that
caused 4974 server crashes when serializing collections with new
string attribute types
- Initialize $ruleType to null in Response::output() to prevent
undefined variable when no model condition matches
- Isolate testUniqueIndexDuplicate with its own collection to prevent
duplicate title interference from parallel tests in the same process
- Add retry mechanism to phone session creation for OTP token issues
- Increase GraphQL function build timeout from 30s to 120s
- Increase Sites deployment activation timeout from 100s to 200s
- Relax GraphQL bulk update row count assertion for parallel safety
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add response body to assertion messages for debugging 400/409 errors
- Re-add 409 handling for relationship creation (race condition in parallel mode)
- Use explicit fullName: null instead of empty data for null person documents
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- DatabasesBase: Wait for twoWayKey attribute on library collection in
setupOneToManyRelationship; use server API key headers for document creation
- DatabasesStringTypesTest: Add delays between attribute creation batches to
avoid overwhelming the database worker
- SchemaPolling: Improve waitForAllAttributes error messaging
- GraphQL UsersTest: Use fresh user in testDeleteUserSession to avoid
session conflicts
- Realtime: Increase WebSocket timeout to 120s and index polling to 60s
- Account: Add better error reporting for phone session creation failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set explicit twoWayKey in testOneToOneRelationship to avoid auto-generated ID
- Replace hardcoded person10/library10/11 IDs with ID::unique() in setupOneToManyRelationship
- Fix remaining datetime format comparison in testUpdateScheduledAt
- Use assertStringContainsString for Projects mock numbers excess items test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix Legacy DatabasesStringTypesTest with project-keyed setup cache
- Fix Account OTP test with unique email, phone session re-login
- Fix GraphQL setup methods with sleep, 409 handling, missing columns
- Fix Databases list/pagination tests with document ID filtering
- Fix Permissions tests with assertGreaterThanOrEqual for counts
- Fix Messaging scheduled tests to not depend on scheduler timing
- Increase Realtime WebSocket timeout to 60s and assertEventually to 30s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix missing return statement in DatabasesBase::testListDocuments
- Rewrite DatabasesStringTypesTest with project-keyed setup cache
- Use assertGreaterThanOrEqual in Functions testListDeployments
- Clean up OIDC provider after Account OAuth2 test
- Key all GraphQL static caches by project ID with unique IDs
- Replace sleep() with assertEventually in Realtime tests
- Increase Messaging scheduled message timeout to 180s
- Increase Sites deployment timeouts to 120s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- testListExecutions: Don't assume position in results list
- Use assertContains with array_column instead of position[0]
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- testDeleteUser: User is created with status=true, so assert that
- testUpdateUserStatus: Use probe to find correct webhook event
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Account: Use unique emails/phone numbers to avoid collisions
- Functions: Use flexible assertions for counts and search results
- GraphQL: Add better error handling and use unique IDs
- Projects: Use assertGreaterThanOrEqual for list counts
- Webhooks: Use probe to find specific delete webhook event
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use foreach loop to check all deployments instead of hardcoded indices
- Fix offset test to not assume exactly 1 function exists
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- testCreateAttributes: Use $actorsId instead of undefined $data['actorsId']
- testCreateColumns: Use $actorsId instead of undefined $data['actorsId']
- testCreateAccountSession: Add assertion for account creation success
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The testListUsers function was using $totalUsers which was removed when
the test was refactored for parallel execution. Now uses $minUsers and
flexible assertions instead of position-based assertions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Under high parallel load, authentication can transiently fail with 401.
Add retry logic with delays to handle these transient failures.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update account name before testing to ensure webhook data has
expected 'New Name' value, regardless of test execution order.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update bucket name before deleting to ensure webhook data has
expected name, regardless of whether testUpdateStorageBucket ran.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- setupDatabase() now fetches existing database on conflict
- setupTable() now fetches existing tables on conflict
- Enables parallel test execution with fixed resource IDs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- setupDatabase() now fetches existing database on conflict
- setupCollections() now fetches existing collections on conflict
- Enables parallel test execution with fixed resource IDs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use assertGreaterThanOrEqual instead of exact count
- Find users by ID instead of assuming position
- Document expected minimum user count for isolated execution
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create bucket1 within testListBucket instead of relying on
testCreateBucket running first. Accept 409 if bucket already exists.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use assertGreaterThanOrEqual and find bucket by ID instead of
assuming exact count and position after cursor query.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Account: Add createFreshAccountWithSession() for predictable session/log counts
- Account: Update testGetAccountSessions and testGetAccountLogs to use fresh accounts
- Storage: Fix testListBucket to find bucket by ID instead of assuming first position
- Messaging: Fix testListSubscribers to find subscriber by ID instead of assuming first position
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
These tests were creating resources directly in the shared collections,
which conflicts with setupAttributes() and setupIndexes() when tests
run in parallel. Now each test creates its own dedicated collection
to avoid conflicts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adding process ID and random bytes to uniqid() to avoid email
collisions when running tests in parallel with functional mode.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removed return statements from testManyToOneRelationship and
testManyToManyRelationship which were declared as void. These
cause PHP fatal errors in PHP 8.4+.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The testUpdateDocument method was declared as void but returned [].
This causes a PHP fatal error in PHP 8.4.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add search filters to isolate test data in testListSites to prevent
count assertions from failing when other test methods create sites
during parallel execution.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Added setupDatabase() helper with caching to all permission test files
- Removed @depends from LegacyPermissionsMemberTest, LegacyPermissionsTeamTest
- Removed @depends from TablesDBPermissionsMemberTest, TablesDBPermissionsTeamTest
- Partial GraphQL test updates from agents
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enables --functional mode for parallel test execution by:
- Adding helper methods for independent test setup
- Removing all #[Depends] annotations
- Using static caching for shared resources
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use /databases endpoint instead of /tablesdb for database creation
- Use /columns/string instead of /attributes/string for table columns
- Fix testAttributesCollectionsAPI return type from array to void
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add helper methods createCollectionWithAttribute(), createTableWithAttribute(),
createCollectionWithIndex(), createTableWithIndex() to RealtimeConsoleClientTest
- Add createTeam() helper to RealtimeCustomClientTest
- Replace all @depends annotations with direct helper method calls
- Enable tests to run in parallel with --functional flag
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix typo CLient -> Client in DatabasesBase.php:4568
- Fix typo CLient -> Client in StorageCustomClientTest.php:428
- Fix cleanupFunction() call with extra parameter in FunctionsScheduleTest.php:175
- Increase message scheduling test timeouts from 30s to 180s for CI stability
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The root cause of flaky attribute processing tests is that a single
appwrite-worker-databases container cannot keep up with attribute
creation jobs when tests run in parallel via paratest.
This fix:
- Scales the databases worker to 4 instances during E2E service tests
- Reverts timeout increases that masked the underlying issue
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>