Files
buzz/mobile/test/features
Logan Johnson a4e83dfb50 fix(mobile): open message links to public channels the user has not joined (#8518)
🤖
## Summary
- **Problem:** On mobile, tapping a link to a message in a public
channel did nothing if you had not joined that channel. The app showed a
brief "Channel not found in this workspace" notice and dropped the link,
although you are allowed to read that channel.
- **Now:** The app asks the relay for that one channel. If the channel
is public, it opens as a channel you can read but have not joined, the
same as opening it from Browse channels. Private channels and DMs still
open only when you are a member.

## Details
- Before, the link handler looked for the channel only in the app's
loaded channel list. That list holds the channels you joined. It holds
other public channels only after Browse channels has loaded them.
- When the channel is not in that list, the app now reads that channel's
metadata from the relay (kind:39000, the event that names and describes
a channel). The relay returns it only if you may see it. The app then
refuses private channels and DMs, as Browse already does.
- If the lookup fails, the app shows "Could not open the channel". If
the relay returns no channel, it still shows "Channel not found in this
workspace".
- Links are handled in arrival order. While one link is being looked up,
later links wait, including links to channels you already joined. When
the lookup ends, the app handles the next link. A slow relay can
therefore delay later links by up to the lookup timeout (8 s). The app
shows no loading indicator during the wait.
- A link to a channel already in the list opens at once, even while the
app reconnects to the relay. A link that needs the relay lookup waits
until the relay connection is signed in, then opens without a second
tap. If the connection drops during the lookup, the app keeps the link
and tries again after it reconnects.
- During hosted setup the app turns link navigation off. If a lookup
ends during setup, the link stays queued and opens when setup closes. It
does not open a channel over the setup screen.

### Related issue
None found. #8292 covers a different part of message links.

### Testing
- New dispatcher tests cover a public channel you have not joined, a
private channel you have not joined, and a failed lookup. All three fail
on main and pass here.
- Delayed-lookup tests hold the relay response open. They cover
navigation turning off during the lookup (the link opens only after
navigation turns back on; this test fails without the fix), a queued
link behind a slow lookup, and the dispatcher closing during the lookup.
- Reconnect tests start with cached channels and a reconnecting session.
An unlisted-channel link sends no lookup and stays queued, then opens
after the session connects. A listed-channel link opens at once while
reconnecting. A session drop during the lookup keeps the link and
retries it, both when the session returns after the cancelled lookup
ends and before it ends. The three reconnect cases fail on the previous
head.
- `flutter test test/features/channels test/features/onboarding` (1990
tests) and `flutter analyze` pass on the rebased head.
- End-to-end on an Android emulator (API 36) against a local relay.
Alice made a public channel `#launch-notes` and posted in it. In a
private channel `#team`, she posted a link to that message. The phone
user is a member of `#team` but not of `#launch-notes`. The same install
was upgraded in place from a main build to this branch's build.

| Before (main): tap the link | After: tap the same link | After: link
to a private channel you are not in |
| --- | --- | --- |
| <img width="300" alt="Tapping the message link shows 'Channel not
found in this workspace' and stays in #team"
src="https://github.com/user-attachments/assets/aa4341aa-8d87-4a78-a805-ef71f4bd6cc5"
/> | <img width="300" alt="Tapping the message link opens #launch-notes
with Alice's message and a 'Join this channel from Manage to
participate' footer"
src="https://github.com/user-attachments/assets/267930ab-b723-4d97-bb7f-960fe1497e63"
/> | <img width="300" alt="Tapping a link to a private channel still
shows 'Channel not found in this workspace'"
src="https://github.com/user-attachments/assets/10780121-c3a4-4cf4-a8d1-a6994cac0101"
/> |

---------

Signed-off-by: Logan Johnson <loganj@squareup.com>
Co-authored-by: Larry <627498bd4bd1f281a16431e3c6cce3b5c25b6692798c78672298aefbf2f8f8b5@buzz.block.builderlab.xyz>
2026-10-27 14:01:12 -04:00
..