* Add support for Channel Summarization, inline citations * Add support for Channel Summarization, inline citations * Revert package-lock to master * i18n fixes * e2e fixes * Remove a few tests as they're already covered by unit * Ensure channel summary is offline compatible - Add channel persistence check before switching to summary channel - Fetch and persist channel/membership if not in database - Fix TypeScript error handling for unknown error types - Update tests to properly mock DatabaseManager * Fixes * Fix expo-image patch file - remove accidental build artifacts The patch file was accidentally corrupted with build artifacts from node_modules/expo-image/android/build/ including .dex files, results.bin, and Oops.rej. This was causing the 16KB page size compatibility patch to fail during CI. * Fix iOS date picker spacing and placeholder text - Increase snap points on iOS to accommodate inline date picker spinner - Update AI prompt placeholder to "Ask AI about this channel" * Fix padding * Address PR review feedback from larkox - Fix i18n: use defineMessages pattern instead of separate labelId/defaultLabel - Replace custom SummaryOptionItem with existing OptionItem component - Add ScrollView for scrollability on smaller phones - Extract AgentItem to separate file, use FlatList for virtualization - Extract DateInputField component, unify DateTimePicker, add useCallback - Consolidate types into app/products/agents/types/api.ts - Remove unnecessary fetchPostById (WebSocket handles post delivery) - Use jest.mocked() instead of 'as jest.Mock' for type safety - Improve transform.ts: use urlParse, add post ID length constraint, validate internal links with serverUrl parameter, add subpath support - Add transform.test.ts cases for external links, subpaths, URL encoding - Remove unnecessary Platform.select in inline_entity_link - Revert video_file.tsx and prefetch.ts to use cachePath (patches include types) * Update en.json with new channel summary option translations Added missing translation keys for the defineMessages pattern used in channel summary sheet options. * Fix regex patterns and add negative assertions per PR review - Use exact 26-character constraint in post ID regex instead of permissive pattern followed by validation - Use specific identifier pattern in channel regex instead of [^/]+ - Remove unused ID_PATH_PATTERN and IDENTIFIER_PATH_PATTERN imports - Add negative assertions to processInlineEntities tests to verify mutual exclusivity of link vs inline_entity_link nodes * Add test cases for non-internal URLs and escaped slashes Per PR review feedback, added tests for: - Non-internal URLs with similar shape to internal links - URLs with escaped slashes (%2F) in various positions * Improve UI consistency for channel summary date picker and AI input - Add focus state (border highlight) to AI prompt input on Ask Agents sheet - Add active state highlight to Start/End date fields in date range picker - Increase back button tap area on date range picker using hitSlop - Fix date picker theme mismatch by setting themeVariant based on app theme - Apply initial date when opening picker so value matches displayed date Co-authored-by: Cursor <cursoragent@cursor.com> * Gate AskAgentsOption behind agents plugin availability check Add a plugin availability check for the "Ask Agents" feature that mirrors the webapp's useGetAgentsBridgeEnabled hook. Calls GET /api/v4/agents/status on WebSocket connect and plugin status change events, stores the result in an RxJS BehaviorSubject ephemeral store, and conditionally renders the AskAgentsOption component based on the plugin being available. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix quick actions tests and default date range to last 7 days Mock useAgentsConfig in quick actions tests so the Ask Agents button renders when agents plugin availability is gated. Default the date range picker to the last 7 days instead of empty. Co-authored-by: Cursor <cursoragent@cursor.com> * Address enahum's review feedback on channel summaries PR - Remove pluginEnabled=false on network error in agents_status - Use enableDynamicSizing for channel summary bottom sheet - Extract channel navigation logic to switchToChannelByName action - Move icon color to stylesheet, null guard to parent in InlineEntityLink - Replace custom URL parsing with parseDeepLink in transform.ts - Reorder channel membership check before API request in channel_summary - Use FormattedText, FormattedDate, FloatingTextInput consistently - Use getErrorMessage for proper intl error handling in alerts - Simplify agent_item to always use expo-image, memoize styles - Gate Ask Agents item count on agentsEnabled in header.tsx - Clean up CLAUDE-IOS-SIMULATOR.md per review suggestions - Update tests to match new behavior Co-authored-by: Cursor <cursoragent@cursor.com> * Fix i18n extraction for date_range_picker translated strings Add defineMessages declarations so the i18n extraction tool can find the translated string IDs passed through custom props to DateInputField. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix agent profile image not rendering on agent selector * Reduce channel summary bottom sheet max height from 80% to 50% The 80% snap point created too much whitespace below the options. 50% fits the main content well while still leaving room for the iOS date picker spinner when the custom date range view is shown. Co-authored-by: Cursor <cursoragent@cursor.com> * Adjust channel summary bottom sheet max height to 65% 50% was too short, cutting off the iOS date picker spinner. 65% provides enough room for the date range view with spinner while keeping the main options view compact. Co-authored-by: Cursor <cursoragent@cursor.com> * Use platform-specific max height for channel summary bottom sheet iOS uses 65% to accommodate the inline date picker spinner. Android uses 50% since its modal date picker doesn't need extra space. Co-authored-by: Cursor <cursoragent@cursor.com> * Reduce height on android slightly * Final tweaks for spacing * Address PR review feedback from larkox and pvev - Use MessageDescriptor props instead of separate id/defaultMessage strings in DateInputField - Extract hitSlop constant outside component for render stability - Normalize date range to UTC start/end of day to avoid timezone data loss - Replace hardcoded '#FFFFFF' with theme.buttonColor Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Mattermost Build <build@mattermost.com> Co-authored-by: Cursor <cursoragent@cursor.com> |
||
|---|---|---|
| .. | ||
| android_emulator | ||
| e2e | ||
| utils | ||
| .babelrc | ||
| .detoxrc.json | ||
| create_android_emulator.sh | ||
| inject-detox-settings.js | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| save_report.js | ||
| tsconfig.json | ||
| webhook_server.js | ||
How to Run Detox Tests
This guide will help you set up and run Detox tests for your project.
Install Dependencies
First, navigate to the root directory of your project and install the necessary dependencies by running:
npm install
navigate to the detox folder and run npm install
Android
Build Detox Android App
To build the Detox Android app, navigate to the detox folder and run:
npm run e2e:android-inject-settings
npm run e2e:android-build
The debug apk will be built and available at android/app/build/outputs/apk/debug/app-debug.apk
Run Detox Android Tests
Create emulator
./create_android_emulator.sh SDK_VERSION AVD_NAME
# example ./create_android_emulator.sh 34 pixel_5a_avd
# example ./create_android_emulator.sh 34 pixel_5a_avd --headless
# If we want to see the emulator logs. Run it in debug mode example ./create_android_emulator.sh 34 pixel_5a_avd --debug
To execute the Detox tests on Android, navigate to the detox folder and run:
npm run e2e:android-test
# To run a particular tests
npm run e2e:android-test <path to test file>
iOS
Build iOS Simulator
To build the iOS simulator for Detox, navigate to the detox folder and run:
npm run e2e:ios-build
This will build the Simulor .zip file at the root folder.
Create a folder named mobile-artifacts at the project root. Unzip the zip file and move the mattermost app under mobile-artifacts.
# From project root
mkdir mobile-artifacts
Run iOS Tests
To execute the Detox tests on iOS, navigate to the detox folder and run:
npm run e2e:ios-test
# To run a particular tests
npm run e2e:android-test path to test file.
Disabling Password Autofill (Optional)
iOS password autofill can interfere with login tests by automatically filling credentials. To disable this feature on your simulator:
# Interactive mode - select simulator from list
npm run e2e:ios-disable-autofill
# Or specify simulator ID directly
npm run e2e:ios-disable-autofill -- --simulator-id SIMULATOR_UDID
When to use this:
- Before running iOS E2E tests if you notice password fields being auto-filled
- When login tests fail unexpectedly due to autofill interference
- After creating a new iOS simulator for testing
Note: CI environments automatically disable this setting, so this is only needed for local development.
Finding your simulator ID:
xcrun simctl list devices | grep Booted
TIP : For iOS, you can download the simulator from ~Mobile: Test build or ~Release: Mobile Apps channel in the community.
Results
The Local Runs generate artifacts under detox/artifacts/ios-debug-** or detox/artifacts/android-debug-**.
You can see the html report, failure screenshot under that folder.
Playbooks Tests (AI-Powered Testing)
The Playbooks tests leverage AI-powered testing through the Wix Pilot framework, enabling natural language test creation and execution.
How It Works
The Playbooks tests utilize the pilot library, which connects to Anthropic Claude via the ClaudePromptHandler. This innovative approach allows you to:
- Write tests using natural language prompts
- Automatically translate prompts into executable test steps
- Maintain tests more intuitively through conversational interfaces
- Handle complex scenarios with AI-generated test logic
The system integrates seamlessly with your existing Detox test infrastructure while adding AI capabilities.
Best Practices
For reliable and effective Playbooks tests, follow these guidelines from the Pilot Best Practices Guide:
-
Prompt Clarity:
- Write clear, concise prompts
- Use specific action-oriented language
- Avoid ambiguous phrasing
-
Test Design:
- Keep prompts focused on single scenarios
- Use deterministic language to prevent flaky tests
- Structure complex tests as sequences of simple prompts
-
Maintenance:
- Review AI-generated test steps before committing
- Version control both prompts and generated code
- Monitor test stability regularly
-
Integration:
- Combine AI tests with traditional assertions
- Use AI for complex scenarios, traditional methods for simple verifications
- Document which tests are AI-generated
Getting Started
To run Playbooks tests:
-
Set up your environment:
export ANTHROPIC_API_KEY='your-api-key-here' -
Run tests normally:
- The system will automatically initialize the
ClaudePromptHandlerwhen the API key is detected - No additional configuration is required beyond the API key
- The system will automatically initialize the
-
Execution examples:
# Run all Playbooks tests npm run e2e:android-test tests/playbooks/ # Run a specific Playbook test npm run e2e:ios-test tests/playbooks/playbooks_basic.e2e.ts
Technical Notes
- The Pilot framework handles the translation between natural language prompts and executable code
- Tests are cached locally after generation for faster subsequent runs
- All AI interactions are logged in the test artifacts for debugging
- The system falls back to traditional testing methods if the API key isn't available
For complete documentation, see: