Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 849b45b

Browse files
committed
Refactor RoomPredecessor tests
1 parent 21c8341 commit 849b45b

File tree

2 files changed

+95
-94
lines changed

2 files changed

+95
-94
lines changed

Diff for: test/components/views/messages/RoomPredecessorTile-test.tsx

+94-93
Original file line numberDiff line numberDiff line change
@@ -34,68 +34,61 @@ jest.mock("../../../../src/dispatcher/dispatcher");
3434
describe("<RoomPredecessorTile />", () => {
3535
const userId = "@alice:server.org";
3636
const roomId = "!room:server.org";
37-
const createEvent = new MatrixEvent({
38-
type: EventType.RoomCreate,
39-
state_key: "",
40-
sender: userId,
41-
room_id: roomId,
42-
content: {
43-
predecessor: { room_id: "old_room_id", event_id: "tombstone_event_id" },
44-
},
45-
event_id: "$create",
46-
});
47-
const createEventWithoutPredecessor = new MatrixEvent({
48-
type: EventType.RoomCreate,
49-
state_key: "",
50-
sender: userId,
51-
room_id: roomId,
52-
content: {},
53-
event_id: "$create",
54-
});
55-
const predecessorEvent = new MatrixEvent({
56-
type: EventType.RoomPredecessor,
57-
state_key: "",
58-
sender: userId,
59-
room_id: roomId,
60-
content: {
61-
predecessor_room_id: "old_room_id_from_predecessor",
62-
},
63-
event_id: "$create",
64-
});
65-
const viaPredecessorEvent = new MatrixEvent({
66-
type: EventType.RoomPredecessor,
67-
state_key: "",
68-
sender: userId,
69-
room_id: roomId,
70-
content: {
71-
predecessor_room_id: "old_room_id_from_predecessor",
72-
via_servers: ["a.example.com", "b.example.com"],
73-
},
74-
event_id: "$create",
75-
});
76-
const predecessorEventWithEventId = new MatrixEvent({
77-
type: EventType.RoomPredecessor,
78-
state_key: "",
79-
sender: userId,
80-
room_id: roomId,
81-
content: {
82-
predecessor_room_id: "old_room_id_from_predecessor",
83-
last_known_event_id: "tombstone_event_id_from_predecessor",
84-
},
85-
event_id: "$create",
86-
});
8737
stubClient();
8838
const client = mocked(MatrixClientPeg.get());
89-
const roomJustCreate = new Room(roomId, client, userId);
90-
upsertRoomStateEvents(roomJustCreate, [createEvent]);
91-
const roomCreateAndPredecessor = new Room(roomId, client, userId);
92-
upsertRoomStateEvents(roomCreateAndPredecessor, [createEvent, predecessorEvent]);
93-
const roomCreateAndPredecessorWithEventId = new Room(roomId, client, userId);
94-
upsertRoomStateEvents(roomCreateAndPredecessorWithEventId, [createEvent, predecessorEventWithEventId]);
95-
const roomNoPredecessors = new Room(roomId, client, userId);
96-
upsertRoomStateEvents(roomNoPredecessors, [createEventWithoutPredecessor]);
97-
const roomCreateAndViaPredecessor = new Room(roomId, client, userId);
98-
upsertRoomStateEvents(roomCreateAndViaPredecessor, [createEvent, viaPredecessorEvent]);
39+
40+
function makeRoom({
41+
createEventHasPredecessor = false,
42+
predecessorEventExists = false,
43+
predecessorEventHasEventId = false,
44+
predecessorEventHasViaServers = false,
45+
}): Room {
46+
const room = new Room(roomId, client, userId);
47+
48+
const createInfo = {
49+
type: EventType.RoomCreate,
50+
state_key: "",
51+
sender: userId,
52+
room_id: roomId,
53+
content: {},
54+
event_id: "$create",
55+
};
56+
57+
if (createEventHasPredecessor) {
58+
createInfo.content = {
59+
predecessor: { room_id: "old_room_id", event_id: "$tombstone_event_id" },
60+
};
61+
}
62+
63+
const createEvent = new MatrixEvent(createInfo);
64+
upsertRoomStateEvents(room, [createEvent]);
65+
66+
if (predecessorEventExists) {
67+
const predecessorInfo = {
68+
type: EventType.RoomPredecessor,
69+
state_key: "",
70+
sender: userId,
71+
room_id: roomId,
72+
content: {
73+
predecessor_room_id: "old_room_id_from_predecessor",
74+
last_known_event_id: undefined,
75+
via_servers: undefined,
76+
},
77+
event_id: "$predecessor",
78+
};
79+
80+
if (predecessorEventHasEventId) {
81+
predecessorInfo.content.last_known_event_id = "$tombstone_event_id_from_predecessor";
82+
}
83+
if (predecessorEventHasViaServers) {
84+
predecessorInfo.content.via_servers = ["a.example.com", "b.example.com"];
85+
}
86+
87+
const predecessorEvent = new MatrixEvent(predecessorInfo);
88+
upsertRoomStateEvents(room, [predecessorEvent]);
89+
}
90+
return room;
91+
}
9992

10093
beforeEach(() => {
10194
jest.clearAllMocks();
@@ -111,6 +104,10 @@ describe("<RoomPredecessorTile />", () => {
111104
});
112105

113106
function renderTile(room: Room) {
107+
// Find this room's create event (it should have one!)
108+
const createEvent = room.currentState.getStateEvents("m.room.create")[0];
109+
expect(createEvent).toBeTruthy();
110+
114111
return render(
115112
<RoomContext.Provider value={getRoomContext(room, {})}>
116113
<RoomPredecessorTile mxEvent={createEvent} />
@@ -119,15 +116,15 @@ describe("<RoomPredecessorTile />", () => {
119116
}
120117

121118
it("Renders as expected", () => {
122-
const roomCreate = renderTile(roomJustCreate);
119+
const roomCreate = renderTile(makeRoom({ createEventHasPredecessor: true }));
123120
expect(roomCreate.asFragment()).toMatchSnapshot();
124121
});
125122

126123
it("Links to the old version of the room", () => {
127-
renderTile(roomJustCreate);
124+
renderTile(makeRoom({ createEventHasPredecessor: true }));
128125
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
129126
"href",
130-
"https://matrix.to/#/old_room_id/tombstone_event_id",
127+
"https://matrix.to/#/old_room_id/$tombstone_event_id",
131128
);
132129
});
133130

@@ -136,21 +133,21 @@ describe("<RoomPredecessorTile />", () => {
136133

137134
it("Shows an empty div if there is no predecessor", () => {
138135
filterConsole;
139-
renderTile(roomNoPredecessors);
136+
renderTile(makeRoom({}));
140137
expect(screen.queryByText("Click here to see older messages.", { exact: false })).toBeNull();
141138
});
142139
});
143140

144141
it("Opens the old room on click", async () => {
145-
renderTile(roomJustCreate);
142+
renderTile(makeRoom({ createEventHasPredecessor: true }));
146143
const link = screen.getByText("Click here to see older messages.");
147144

148145
await act(() => userEvent.click(link));
149146

150147
await waitFor(() =>
151148
expect(dis.dispatch).toHaveBeenCalledWith({
152149
action: Action.ViewRoom,
153-
event_id: "tombstone_event_id",
150+
event_id: "$tombstone_event_id",
154151
highlighted: true,
155152
room_id: "old_room_id",
156153
metricsTrigger: "Predecessor",
@@ -160,10 +157,10 @@ describe("<RoomPredecessorTile />", () => {
160157
});
161158

162159
it("Ignores m.predecessor if labs flag is off", () => {
163-
renderTile(roomCreateAndPredecessor);
160+
renderTile(makeRoom({ createEventHasPredecessor: true, predecessorEventExists: true }));
164161
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
165162
"href",
166-
"https://matrix.to/#/old_room_id/tombstone_event_id",
163+
"https://matrix.to/#/old_room_id/$tombstone_event_id",
167164
);
168165
});
169166

@@ -175,7 +172,7 @@ describe("<RoomPredecessorTile />", () => {
175172
});
176173

177174
it("Shows an error if there are no via servers", () => {
178-
renderTile(roomCreateAndPredecessor);
175+
renderTile(makeRoom({ createEventHasPredecessor: true, predecessorEventExists: true }));
179176
expect(screen.getByText("Can't find the old version of this room", { exact: false })).toBeInTheDocument();
180177
});
181178
});
@@ -192,26 +189,32 @@ describe("<RoomPredecessorTile />", () => {
192189
});
193190

194191
it("Uses the create event if there is no m.predecessor", () => {
195-
renderTile(roomJustCreate);
192+
renderTile(makeRoom({ createEventHasPredecessor: true }));
196193
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
197194
"href",
198-
"https://matrix.to/#/old_room_id/tombstone_event_id",
195+
"https://matrix.to/#/old_room_id/$tombstone_event_id",
199196
);
200197
});
201198

202199
it("Uses m.predecessor when it's there", () => {
203-
renderTile(roomCreateAndPredecessor);
200+
renderTile(makeRoom({ createEventHasPredecessor: true, predecessorEventExists: true }));
204201
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
205202
"href",
206203
"https://matrix.to/#/old_room_id_from_predecessor",
207204
);
208205
});
209206

210207
it("Links to the event in the room if event ID is provided", () => {
211-
renderTile(roomCreateAndPredecessorWithEventId);
208+
renderTile(
209+
makeRoom({
210+
createEventHasPredecessor: true,
211+
predecessorEventExists: true,
212+
predecessorEventHasEventId: true,
213+
}),
214+
);
212215
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
213216
"href",
214-
"https://matrix.to/#/old_room_id_from_predecessor/tombstone_event_id_from_predecessor",
217+
"https://matrix.to/#/old_room_id_from_predecessor/$tombstone_event_id_from_predecessor",
215218
);
216219
});
217220

@@ -223,40 +226,38 @@ describe("<RoomPredecessorTile />", () => {
223226
});
224227

225228
it("Shows an error if there are no via servers", () => {
226-
renderTile(roomCreateAndPredecessor);
229+
renderTile(makeRoom({ createEventHasPredecessor: true, predecessorEventExists: true }));
227230
expect(
228231
screen.getByText("Can't find the old version of this room", { exact: false }),
229232
).toBeInTheDocument();
230233
});
231234

232235
it("Shows a tile if there are via servers", () => {
233-
renderTile(roomCreateAndViaPredecessor);
236+
renderTile(
237+
makeRoom({
238+
createEventHasPredecessor: true,
239+
predecessorEventExists: true,
240+
predecessorEventHasViaServers: true,
241+
}),
242+
);
234243
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
235244
"href",
236245
"https://matrix.to/#/old_room_id_from_predecessor?via=a.example.com&via=b.example.com",
237246
);
238247
});
239248

240249
it("Shows a tile linking to an event if there are via servers", () => {
241-
const predecessorEvent = new MatrixEvent({
242-
type: EventType.RoomPredecessor,
243-
state_key: "",
244-
sender: userId,
245-
room_id: roomId,
246-
content: {
247-
predecessor_room_id: "old_room_id_from_predecessor",
248-
last_known_event_id: "$tombstone",
249-
via_servers: ["a.example.com", "b.example.com"],
250-
},
251-
event_id: "$create",
252-
});
253-
const room = new Room(roomId, client, userId);
254-
upsertRoomStateEvents(room, [createEvent, predecessorEvent]);
255-
256-
renderTile(room);
250+
renderTile(
251+
makeRoom({
252+
createEventHasPredecessor: true,
253+
predecessorEventExists: true,
254+
predecessorEventHasEventId: true,
255+
predecessorEventHasViaServers: true,
256+
}),
257+
);
257258
expect(screen.getByText("Click here to see older messages.")).toHaveAttribute(
258259
"href",
259-
"https://matrix.to/#/old_room_id_from_predecessor/$tombstone?via=a.example.com&via=b.example.com",
260+
"https://matrix.to/#/old_room_id_from_predecessor/$tombstone_event_id_from_predecessor?via=a.example.com&via=b.example.com",
260261
);
261262
});
262263
});

Diff for: test/components/views/messages/__snapshots__/RoomPredecessorTile-test.tsx.snap

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ exports[`<RoomPredecessorTile /> Renders as expected 1`] = `
1414
class="mx_EventTileBubble_subtitle"
1515
>
1616
<a
17-
href="https://matrix.to/#/old_room_id/tombstone_event_id"
17+
href="https://matrix.to/#/old_room_id/$tombstone_event_id"
1818
>
1919
Click here to see older messages.
2020
</a>

0 commit comments

Comments
 (0)