Skip to content

chore: stream-chat rc.31 compatibility - #3919

Merged
isekovanic merged 3 commits into
V10from
fix/latest-rc-api-compatibility
Nov 3, 2026
Merged

isekovanic merged 3 commits into
V10from
fix/latest-rc-api-compatibility

Conversation

@isekovanic

Copy link
Copy Markdown
Contributor

Tickets:

🎯 Goal

Bumps stream-chat to 10.0.0-rc.31 and removes the SDK code it makes redundant. rc.31 includes GetStream/stream-chat-js#1982, GetStream/stream-chat-js#1985, GetStream/stream-chat-js#1986 and GetStream/stream-chat-js#1987.

Commit Ticket Change
328ecfb7e REACT-1184 Remove setupCommandUIMiddlewares
01671f45b REACT-1400 Pinned-message search uses the default text filter
f34a0b01c Bump stream-chat to ^10.0.0-rc.31

🛠 Implementation details

REACT-1184 - remove setupCommandUIMiddlewares

Commit: 328ecfb7e

GetStream/stream-chat-js#1985 installs the four command middlewares in every composer by default: the active command guard and the command string extraction around the commands middleware, and the command injection after attachments, for messages and for drafts. Those are the same middlewares, with the same ids and positions, that setupCommandUIMiddlewares inserted, so the helper has nothing left to do and is removed. SampleApp no longer calls it.

This is a breaking change. Apps that call setupCommandUIMiddlewares delete the call. Apps that never called it now get the command behaviour too: typing /giphy cats makes giphy the active command and leaves cats in the input. ai-docs/ai-migration-v9-to-v10.md and ai-docs/v10-breaking-changes.md are updated, and the note about the REACT-1489 fix to this helper is dropped since the helper is gone.

REACT-1400 - pinned-message search

Commit: 01671f45b

MessageSearchSource matched message text by exact equality, so ChannelPinnedMessageListProvider replaced that filter with its own text: { $q }. GetStream/stream-chat-js#1987 makes the default text: { $autocomplete }, so the override is removed. Pinned-message search now matches by word prefix: "lun" finds "Lunch tomorrow?". An empty query still lists every pinned message.

Bump stream-chat to 10.0.0-rc.31

Commit: f34a0b01c

The SDK and the four example apps move to ^10.0.0-rc.31. Besides the two changes above, it brings:

Neither needs a change here.

🎨 UI Changes

None.

🧪 Testing

  • In SampleApp on iOS, typing /giphy cats shows the GIPHY chip with cats in the input, and sending it shows the Giphy preview. Picking Giphy from the commands menu and typing dogs does the same.
  • In SampleApp on iOS, pinned-message search finds "offline send check" for "offl" and "sen", and shows no results for "zzq".
  • The full unit suite, yarn typecheck, yarn lint and yarn build pass.

☑️ Checklist

  • I have signed the Stream CLA (required)
  • PR targets the develop branch
  • Documentation is updated
  • New code is tested in main example apps, including all possible scenarios
    • SampleApp iOS and Android
    • Expo iOS and Android

@Stream-SDK-Bot

Copy link
Copy Markdown
Contributor

SDK Size

title develop branch diff status
js_bundle_size 2037 KB 2020 KB -17486 B 🚀
ai_components_size 163 KB 163 KB -16 B 🚀

@isekovanic
isekovanic merged commit e7794a7 into V10 Nov 3, 2026
4 of 5 checks passed
@isekovanic
isekovanic deleted the fix/latest-rc-api-compatibility branch November 3, 2026 13:34
@github-actions github-actions Bot mentioned this pull request Nov 6, 2026
6 tasks
@stream-ci-bot

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 10.0.0 🎉

The release is available on:

Your semantic-release bot 📦🚀

isekovanic pushed a commit that referenced this pull request Nov 9, 2026
Ticket: https://linear.app/stream/issue/RN-449

## 🎯 Goal

Port the native iOS and Android e2e suites to the V10 Detox suite in
`examples/E2ETestApp`, and bring its CI up to the native SDKs: per-test
impact analysis on pull requests, a nightly run that builds the coverage
map, and Allure TestOps reporting.

## 🛠 Implementation details

**Tests**

- 19 suites, 255 tests, ported from the Android compose and iOS UIKit
suites (the union of both, with the native names and expectations).
Every test links an Allure case in project 3.
- When the SDK disagrees with the native expectation, the test keeps the
native expectation and is skipped with `it.skip` and a comment that
links a ticket. That covers 72 tests, tracked in RN-489 to RN-506 and
RN-510. With those skipped, 183 tests run.
- Robots, pages and support code grew to cover the suites: offline
toggling (Android), the media library, JWT asserts, and Android system
dialogs.

**E2E app**

- Offline support is on (`@op-engineering/op-sqlite`, `<Chat
enableOfflineSupport>`). The database is wiped at login, so every test
starts clean.
- Added a JWT test screen, plus the channel details and thread screens
the suites need.
- No `setupCommandUIMiddlewares` call: since stream-chat `10.0.0-rc.31`
(#3919), the client installs the command middlewares itself.

**SDK**

- Additive `testID`s only (channel preview, reactions, link previews,
unread indicators, swipe actions, and a few others). There is no
behaviour change. One snapshot changed because `ScrollToBottomButton`
got a new `testID`.

**Impact analysis (`e2e/README.md`, "Impact analysis")**

- `E2E_COVERAGE=1` builds add a small Babel plugin
(`e2e/coverage/babelPlugin.js`) that records which files run code. It
isn't istanbul, because worklets capture istanbul's counters and then
throw on the UI runtime.
- After each test, the app reports its coverage to a collector in the
test process, which writes one lcov file per test.
- `build_e2e_coverage_map` and `select_e2e_tests` use
`fastlane-plugin-stream_actions` (bumped from 0.4.14 to 0.4.19).
- A PR runs only the tests its diff can reach. Changes to the harness,
native code, dependencies or lanes still run everything.
- The `Check E2E Required` job now also selects the tests, and skips e2e
when none are selected.
- Android runs in batches, like the native Android SDK: `Build Android`
builds the APKs once, `Launch Allure TestOps (Android)` opens one
launch, and `Test Android` runs up to 8 batches (one per selected test
when fewer than 8 are selected), each taking a round-robin share of the
selection.
- A new nightly workflow, `e2e-test-cron.yml`, runs everything on
Android with the coverage build and uploads the `e2e-coverage-map`
artifact. It also runs every test on iOS. Until its first run on the
default branch, every PR runs all tests.

**Allure**

- The Allure lanes moved into `examples/SampleApp/fastlane/Allurefile`,
the same layout as stream-chat-swift. A new `allure_testcase` lane
creates test cases.
- Allure uses the `ALLURE_TOKEN` repository secret.

**Mock server**

- The suite runs the mock with `api_version=v2&timestamps=ns`. That mode
comes from GetStream/stream-chat-test-mock-server#98, which is now
merged into `main`.

## 🎨 UI Changes

None. The SDK changes are `testID`s only.

## 🧪 Testing

- Full Android run (debug build, emulator): 255 tests, 182 passed, 70
skipped and 3 failed. All 3 passed when rerun:
  - A mock server start timeout, which is a harness issue.
  - RN-489 (the channel actions sheet sometimes opens empty).
- RN-506 (after jumping to a quoted message, the list stays on the
jumped page when the user sends).
- Impact analysis:
- Coverage collection checked on debug and release builds (17 of 17
tests collected).
- A map built from those tests gave sensible selections from changed
files.
  - A selection file ran exactly the selected tests.
- First batched CI run (Android release build, 8 batches): batches 0 to
3 passed. Of the rest:
- The two long-thread jump tests hung in release builds only: the open
thread keeps enqueuing JS timers, so the app never becomes idle.
Reproduced locally, ticketed as RN-510, and skipped.
- The multiple-votes poll test pressed Back to hide a keyboard the CI
emulator never showed, which closed the sheet. It now presses Back only
when the keyboard is up.
  - One batch lost its emulator mid-run (runner issue, no test failure).
- `yarn lint`, E2ETestApp `typecheck` and the SDK unit tests pass.
- iOS isn't tuned yet. On PRs its e2e job runs on dispatch only; the
nightly runs it.

## ☑️ Checklist

- [x] I have signed the [Stream
CLA](https://docs.google.com/forms/d/e/1FAIpQLScFKsKkAJI7mhCr7K9rEIOpqIDThrWxuvxnwUq2XkHyG154vQ/viewform)
(required)
- [ ] PR targets the `develop` branch (targets `V10`: the suite needs
the v10 SDK)
- [x] Documentation is updated (`examples/E2ETestApp/e2e/README.md`)
- [ ] New code is tested in main example apps, including all possible
scenarios (e2e app only, no SampleApp/Expo changes)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants