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

Commit ca53b11

Browse files
authored
Apply strictNullChecks to src/utils/local-room.ts (#10915)
* Stricity local room * Handle error
1 parent b5727cb commit ca53b11

File tree

4 files changed

+45
-14
lines changed

4 files changed

+45
-14
lines changed

src/utils/direct-messages.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export async function createRoomFromLocalRoom(client: MatrixClient, localRoom: L
8989
if (!roomId) throw new Error(`startDm for local room ${localRoom.roomId} didn't return a room Id`);
9090

9191
localRoom.actualRoomId = roomId;
92-
return waitForRoomReadyAndApplyAfterCreateCallbacks(client, localRoom);
92+
return waitForRoomReadyAndApplyAfterCreateCallbacks(client, localRoom, roomId);
9393
},
9494
() => {
9595
logger.warn(`Error creating DM for local room ${localRoom.roomId}`);

src/utils/local-room.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ import { LocalRoom, LocalRoomState } from "../models/LocalRoom";
2222
import { isLocalRoom } from "./localRoom/isLocalRoom";
2323
import { isRoomReady } from "./localRoom/isRoomReady";
2424

25+
const isActualRoomIdDefined = (actualRoomId: string | undefined): actualRoomId is string => {
26+
if (actualRoomId === undefined) {
27+
// should not happen
28+
throw new Error("Local room in CREATED state without actual room Id occurred");
29+
}
30+
31+
return true;
32+
};
33+
2534
/**
2635
* Does a room action:
2736
* For non-local rooms it calls fn directly.
@@ -43,7 +52,7 @@ export async function doMaybeLocalRoomAction<T>(
4352
if (isLocalRoom(roomId)) {
4453
const room = client.getRoom(roomId) as LocalRoom;
4554

46-
if (room.isCreated) {
55+
if (room.isCreated && isActualRoomIdDefined(room.actualRoomId)) {
4756
return fn(room.actualRoomId);
4857
}
4958

@@ -69,30 +78,36 @@ export async function doMaybeLocalRoomAction<T>(
6978
* @async
7079
* @param {MatrixClient} client
7180
* @param {LocalRoom} localRoom
81+
* @param actualRoomId Id of the actual room
7282
* @returns {Promise<string>} Resolved to the actual room id
7383
*/
7484
export async function waitForRoomReadyAndApplyAfterCreateCallbacks(
7585
client: MatrixClient,
7686
localRoom: LocalRoom,
87+
actualRoomId: string,
7788
): Promise<string> {
7889
if (isRoomReady(client, localRoom)) {
79-
return applyAfterCreateCallbacks(localRoom, localRoom.actualRoomId).then(() => {
90+
return applyAfterCreateCallbacks(localRoom, actualRoomId).then(() => {
8091
localRoom.state = LocalRoomState.CREATED;
8192
client.emit(ClientEvent.Room, localRoom);
82-
return Promise.resolve(localRoom.actualRoomId);
93+
return Promise.resolve(actualRoomId);
8394
});
8495
}
8596

86-
return new Promise((resolve) => {
97+
return new Promise((resolve, reject) => {
8798
const finish = (): void => {
8899
if (checkRoomStateIntervalHandle) clearInterval(checkRoomStateIntervalHandle);
89100
if (stopgapTimeoutHandle) clearTimeout(stopgapTimeoutHandle);
90101

91-
applyAfterCreateCallbacks(localRoom, localRoom.actualRoomId).then(() => {
92-
localRoom.state = LocalRoomState.CREATED;
93-
client.emit(ClientEvent.Room, localRoom);
94-
resolve(localRoom.actualRoomId);
95-
});
102+
applyAfterCreateCallbacks(localRoom, actualRoomId)
103+
.then(() => {
104+
localRoom.state = LocalRoomState.CREATED;
105+
client.emit(ClientEvent.Room, localRoom);
106+
resolve(actualRoomId);
107+
})
108+
.catch((err) => {
109+
reject(err);
110+
});
96111
};
97112

98113
const stopgapFinish = (): void => {

test/utils/direct-messages-test.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,11 @@ describe("direct-messages", () => {
196196
const result = await dmModule.createRoomFromLocalRoom(mockClient, localRoom);
197197
expect(result).toBe(room1.roomId);
198198
expect(localRoom.state).toBe(LocalRoomState.CREATING);
199-
expect(waitForRoomReadyAndApplyAfterCreateCallbacks).toHaveBeenCalledWith(mockClient, localRoom);
199+
expect(waitForRoomReadyAndApplyAfterCreateCallbacks).toHaveBeenCalledWith(
200+
mockClient,
201+
localRoom,
202+
room1.roomId,
203+
);
200204
});
201205
});
202206
});

test/utils/local-room-test.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,11 @@ describe("local-room", () => {
108108
});
109109

110110
it("should invoke the callbacks, set the room state to created and return the actual room id", async () => {
111-
const result = await localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(client, localRoom);
111+
const result = await localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(
112+
client,
113+
localRoom,
114+
room1.roomId,
115+
);
112116
expect(localRoom.state).toBe(LocalRoomState.CREATED);
113117
expect(localRoomCallbackRoomId).toBe(room1.roomId);
114118
expect(result).toBe(room1.roomId);
@@ -121,7 +125,11 @@ describe("local-room", () => {
121125
});
122126

123127
it("should invoke the callbacks, set the room state to created and return the actual room id", async () => {
124-
const prom = localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(client, localRoom);
128+
const prom = localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(
129+
client,
130+
localRoom,
131+
room1.roomId,
132+
);
125133
jest.advanceTimersByTime(5000);
126134
const roomId = await prom;
127135
expect(localRoom.state).toBe(LocalRoomState.CREATED);
@@ -137,7 +145,11 @@ describe("local-room", () => {
137145
});
138146

139147
it("should invoke the callbacks, set the room state to created and return the actual room id", async () => {
140-
const prom = localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(client, localRoom);
148+
const prom = localRoomModule.waitForRoomReadyAndApplyAfterCreateCallbacks(
149+
client,
150+
localRoom,
151+
room1.roomId,
152+
);
141153
mocked(isRoomReady).mockReturnValue(true);
142154
jest.advanceTimersByTime(500);
143155
const roomId = await prom;

0 commit comments

Comments
 (0)