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>
Parallel test execution with paratest overwhelms the single databases
worker when many tests create attributes simultaneously. Run these
specific services sequentially with PHPUnit to ensure the worker
can keep up with attribute processing jobs.
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 --functional flag cannot be used because tests rely on static
properties to share state between test methods (e.g., $databaseId
set in testCreateDatabase is used by testCreateTable). With --functional,
each test method runs in a separate process so these properties are not
initialized.
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>
Increase all default timeouts in SchemaPolling trait from 5 minutes to
10 minutes. With tests running in parallel via paratest, the attribute
processing worker can become backlogged under heavy CI load, requiring
longer wait times for attributes to transition from 'processing' to
'available' status.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Increase all default timeouts in SchemaPolling trait from 3 minutes to
5 minutes to handle slower attribute processing when running tests in
parallel under heavy CI load.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The PNG file size varies depending on ImageMagick version and
compression settings. The meaningful validations (dimensions,
format, content-type) are already being tested.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Temporarily use dev branch (fix-conditional-compression) that only
applies SWOOLE_WEBSOCKET_FLAG_COMPRESS when compression is enabled.
This fixes websocket compatibility issues with Swoole 6.1.6.
See: https://github.com/utopia-php/websocket/pull/28
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix OR precheck bug: skip attribute existence check when OR conditions
exist, since OR can match with partial attributes present
- Remove dead code in app/realtime.php (unused $names and $channels variables)
- Add tests for OR queries with missing attributes in one branch
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
RuntimeQuery::filter() now returns null when the query doesn't match,
instead of an empty array. This distinguishes between "no match" and
"match with empty payload", fixing the issue where subscriptions with
empty payloads weren't being delivered.
Updated Realtime::getSubscribers() to check for null instead of using
!empty(), and updated all tests to expect null for non-matches.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>