Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/hooks/usePermalink.ts
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ export const usePermalink: (args: Args) => HookResult = ({ room, type: argType,
text = member.name || resourceId;
onClick = (e: ButtonEvent): void => {
e.preventDefault();
e.stopPropagation();
dis.dispatch({
action: Action.ViewUser,
member: member,
Expand Down
20 changes: 17 additions & 3 deletions test/components/views/elements/Pill-test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import {
} from "../../../test-utils";
import DMRoomMap from "../../../../src/utils/DMRoomMap";
import { Action } from "../../../../src/dispatcher/actions";
import { ButtonEvent } from "../../../../src/components/views/elements/AccessibleButton";

describe("<Pill>", () => {
let client: Mocked<MatrixClient>;
Expand All @@ -43,14 +44,20 @@ describe("<Pill>", () => {
const user1Id = "@user1:example.com";
const user2Id = "@user2:example.com";
let renderResult: RenderResult;
let pillParentClickHandler: (e: ButtonEvent) => void;

const renderPill = (props: PillProps): void => {
const withDefault = {
inMessage: true,
shouldShowPillAvatar: true,
...props,
} as PillProps;
renderResult = render(<Pill {...withDefault} />);
// wrap Pill with a div to allow testing of event bubbling
renderResult = render(
<div onClick={pillParentClickHandler}>
<Pill {...withDefault} />
</div>,
);
};

filterConsole(
Expand Down Expand Up @@ -88,6 +95,7 @@ describe("<Pill>", () => {
});

jest.spyOn(dis, "dispatch");
pillParentClickHandler = jest.fn();
});

describe("when rendering a pill for a room", () => {
Expand Down Expand Up @@ -168,11 +176,13 @@ describe("<Pill>", () => {
await userEvent.click(screen.getByText("User 1"));
});

it("should dipsatch a view user action", () => {
it("should dipsatch a view user action and prevent event bubbling", () => {
expect(dis.dispatch).toHaveBeenCalledWith({
action: Action.ViewUser,
member: room1.getMember(user1Id),
});

expect(pillParentClickHandler).not.toHaveBeenCalled();
});
});
});
Expand All @@ -195,7 +205,11 @@ describe("<Pill>", () => {
renderPill({
url: permalinkPrefix,
});
expect(renderResult.asFragment()).toMatchInlineSnapshot(`<DocumentFragment />`);
expect(renderResult.asFragment()).toMatchInlineSnapshot(`
<DocumentFragment>
<div />
</DocumentFragment>
`);
});

it("should not render an avatar or link when called with inMessage = false and shouldShowPillAvatar = false", () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`<Pill> should not render a non-permalink 1`] = `<DocumentFragment />`;
exports[`<Pill> should not render a non-permalink 1`] = `
<DocumentFragment>
<div />
</DocumentFragment>
`;

exports[`<Pill> should not render an avatar or link when called with inMessage = false and shouldShowPillAvatar = false 1`] = `
<DocumentFragment>
<div>
<bdi>
<span
class="mx_Pill mx_RoomPill"
Expand All @@ -15,11 +20,13 @@ exports[`<Pill> should not render an avatar or link when called with inMessage =
</span>
</span>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> should render the expected pill for @room 1`] = `
<DocumentFragment>
<div>
<bdi>
<span
class="mx_Pill mx_AtRoomPill"
Expand Down Expand Up @@ -52,11 +59,13 @@ exports[`<Pill> should render the expected pill for @room 1`] = `
</span>
</span>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> should render the expected pill for a room alias 1`] = `
<DocumentFragment>
<div>
<bdi>
<a
class="mx_Pill mx_RoomPill"
Expand Down Expand Up @@ -90,11 +99,13 @@ exports[`<Pill> should render the expected pill for a room alias 1`] = `
</span>
</a>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> should render the expected pill for a space 1`] = `
<DocumentFragment>
<div>
<bdi>
<a
class="mx_Pill mx_RoomPill"
Expand Down Expand Up @@ -128,11 +139,13 @@ exports[`<Pill> should render the expected pill for a space 1`] = `
</span>
</a>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> should render the expected pill for a user not in the room 1`] = `
<DocumentFragment>
<div>
<bdi>
<a
class="mx_Pill mx_UserPill"
Expand Down Expand Up @@ -166,11 +179,13 @@ exports[`<Pill> should render the expected pill for a user not in the room 1`] =
</span>
</a>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> when rendering a pill for a room should render the expected pill 1`] = `
<DocumentFragment>
<div>
<bdi>
<a
class="mx_Pill mx_RoomPill"
Expand Down Expand Up @@ -204,11 +219,13 @@ exports[`<Pill> when rendering a pill for a room should render the expected pill
</span>
</a>
</bdi>
</div>
</DocumentFragment>
`;

exports[`<Pill> when rendering a pill for a user in the room should render as expected 1`] = `
<DocumentFragment>
<div>
<bdi>
<a
class="mx_Pill mx_UserPill"
Expand Down Expand Up @@ -242,5 +259,6 @@ exports[`<Pill> when rendering a pill for a user in the room should render as ex
</span>
</a>
</bdi>
</div>
</DocumentFragment>
`;