Test that pinned messages reflect edits correctly (#7960)

* Hide unpinnable pinned messages in more cases

Signed-off-by: Robin Townsend <robin@robin.town>

* Fix typo

Signed-off-by: Robin Townsend <robin@robin.town>

* Test that unpinnable pinned messages get hidden

Signed-off-by: Robin Townsend <robin@robin.town>

* Fix cli.relations error in test

Signed-off-by: Robin Townsend <robin@robin.town>

* Use event: true shortcut when calling mkEvent

Signed-off-by: Robin Townsend <robin@robin.town>

* Use mockResolvedValue instead of mockReturnValue for async mock

Signed-off-by: Robin Townsend <robin@robin.town>

* Actually mock redacted messages correctly

Signed-off-by: Robin Townsend <robin@robin.town>

* Ensure that panel is updated before assertions are made

Signed-off-by: Robin Townsend <robin@robin.town>

* Test that pinned messages reflect edits correctly

Signed-off-by: Robin Townsend <robin@robin.town>

* Fix warning about missing date

Signed-off-by: Robin Townsend <robin@robin.town>

* Move calls to update out of act

They don't need to be there.

Signed-off-by: Robin Townsend <robin@robin.town>

* Move calls to update out of act

They don't need to be there.

Signed-off-by: Robin Townsend <robin@robin.town>

* Fix lint

Signed-off-by: Robin Townsend <robin@robin.town>
This commit is contained in:
Robin 2022-03-03 12:20:13 -05:00 committed by GitHub
parent c42ef0de2a
commit 8a7ffb4f90
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 4 deletions

View file

@ -18,10 +18,16 @@ import React from "react";
import { mount } from "enzyme";
import { act } from "react-dom/test-utils";
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
import { EventType } from "matrix-js-sdk/src/@types/event";
import { EventType, RelationType, MsgType } from "matrix-js-sdk/src/@types/event";
import "../../../skinned-sdk";
import { stubClient, wrapInMatrixClientContext, mkStubRoom, mkEvent } from "../../../test-utils";
import {
stubClient,
wrapInMatrixClientContext,
mkStubRoom,
mkEvent,
mkMessage,
} from "../../../test-utils";
import { MatrixClientPeg } from "../../../../src/MatrixClientPeg";
import _PinnedMessagesCard from "../../../../src/components/views/right_panel/PinnedMessagesCard";
import PinnedEventTile from "../../../../src/components/views/rooms/PinnedEventTile";
@ -35,7 +41,7 @@ describe("<PinnedMessagesCard />", () => {
const mkRoom = (localPins: MatrixEvent[], nonLocalPins: MatrixEvent[]) => {
const pins = [...localPins, ...nonLocalPins];
const room = mkStubRoom();
const room = mkStubRoom("!room:example.org");
// Insert pin IDs into room state
const pinState = mkEvent({
@ -97,4 +103,45 @@ describe("<PinnedMessagesCard />", () => {
pins.update();
expect(pins.find(PinnedEventTile).length).toBe(0);
});
it("accounts for edits", async () => {
const pin = mkMessage({
event: true,
room: "!room:example.org",
user: "@alice:example.org",
msg: "Hello!",
});
cli.relations.mockResolvedValue({
events: [mkEvent({
event: true,
type: EventType.RoomMessage,
room: "!room:example.org",
user: "@alice:example.org",
content: {
"msgtype": MsgType.Text,
"body": " * Hello again!",
"m.new_content": {
msgtype: MsgType.Text,
body: "Hello again!",
},
"m.relates_to": {
rel_type: RelationType.Replace,
event_id: pin.getId(),
},
},
})],
});
let pins;
await act(async () => {
pins = mount(<PinnedMessagesCard room={mkRoom([], [pin])} onClose={() => {}} />);
// Wait a tick for state updates
await new Promise(resolve => setImmediate(resolve));
});
pins.update();
const pinTile = pins.find(PinnedEventTile);
expect(pinTile.length).toBe(1);
expect(pinTile.find(".mx_EventTile_body").text()).toEqual("Hello again!");
});
});

View file

@ -171,7 +171,7 @@ export function mkEvent(opts: MakeEventProps): MatrixEvent {
content: opts.content,
prev_content: opts.prev_content,
event_id: "$" + Math.random() + "-" + Math.random(),
origin_server_ts: opts.ts,
origin_server_ts: opts.ts ?? 0,
unsigned: opts.unsigned,
};
if (opts.skey) {