From 85987a891c4360f46b07ae92bebd64d1ecbe55f3 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Wed, 29 Apr 2026 22:44:35 +0200 Subject: [PATCH] fix(web): SpaceInviteCard navigates to /channels/:spaceId (not the non-existent /spaces/:id) --- packages/web/src/components/chat/SpaceInviteCard.test.tsx | 5 ++++- packages/web/src/components/chat/SpaceInviteCard.tsx | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/web/src/components/chat/SpaceInviteCard.test.tsx b/packages/web/src/components/chat/SpaceInviteCard.test.tsx index de37a774..87858fdf 100644 --- a/packages/web/src/components/chat/SpaceInviteCard.test.tsx +++ b/packages/web/src/components/chat/SpaceInviteCard.test.tsx @@ -96,6 +96,9 @@ describe('SpaceInviteCard', () => { // Specifically NOT called with empty string or undefined expect(mockJoinByCode).not.toHaveBeenCalledWith('abc', ''); expect(mockJoinByCode).not.toHaveBeenCalledWith('abc', undefined); + // After a successful join, the app must navigate to the space via the real + // route (/channels/:spaceId), not the non-existent /spaces/:id route. + await waitFor(() => expect(mockNavigate).toHaveBeenCalledWith('/channels/S1')); }); it('navigates to space when join returns "already a member" (no error shown)', async () => { @@ -111,7 +114,7 @@ describe('SpaceInviteCard', () => { const btn = await screen.findByRole('button', { name: /^join$/i }); await user.click(btn); - await waitFor(() => expect(mockNavigate).toHaveBeenCalledWith('/spaces/S1')); + await waitFor(() => expect(mockNavigate).toHaveBeenCalledWith('/channels/S1')); expect(screen.queryByText(/already a member of this space/i)).not.toBeInTheDocument(); }); }); diff --git a/packages/web/src/components/chat/SpaceInviteCard.tsx b/packages/web/src/components/chat/SpaceInviteCard.tsx index 249f51d8..fc858f2f 100644 --- a/packages/web/src/components/chat/SpaceInviteCard.tsx +++ b/packages/web/src/components/chat/SpaceInviteCard.tsx @@ -54,14 +54,14 @@ export function SpaceInviteCard({ payload, senderName }: Props) { // the DM transport origin nor window.location.origin. Empty string maps // to undefined so joinByCode follows its local-instance branch. const space = await joinByCode(payload.inviteCode, payload.spaceInstanceOrigin || undefined); - navigate(`/spaces/${space.id}`); + navigate(`/channels/${space.id}`); } catch (err) { const msg = (err as Error)?.message ?? ''; if (msg.toLowerCase().includes('already a member')) { // Already a member is a successful state — just navigate to the space. // Look up the space in the store by id; if not found (rare race), stay // silent rather than block the user with a noisy error. - navigate(`/spaces/${payload.spaceId}`); + navigate(`/channels/${payload.spaceId}`); return; } setJoinError(msg || 'Failed to join');