From dc346d5e837bb00c6ddbda12b742e7e744e8c68c Mon Sep 17 00:00:00 2001 From: Kerry Date: Mon, 9 May 2022 15:14:45 +0200 Subject: [PATCH] test typescriptification - RoomViewStore (#8539) * test/stores/RoomViewStore-test.js -> test/stores/RoomViewStore-test.tsx Signed-off-by: Kerry Archibald * fix tsc issues Signed-off-by: Kerry Archibald --- test/stores/RoomViewStore-test.js | 77 -------------------------- test/stores/RoomViewStore-test.tsx | 86 ++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 77 deletions(-) delete mode 100644 test/stores/RoomViewStore-test.js create mode 100644 test/stores/RoomViewStore-test.tsx diff --git a/test/stores/RoomViewStore-test.js b/test/stores/RoomViewStore-test.js deleted file mode 100644 index d948fa6496..0000000000 --- a/test/stores/RoomViewStore-test.js +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2017 - 2022 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import { RoomViewStore } from '../../src/stores/RoomViewStore'; -import { Action } from '../../src/dispatcher/actions'; -import { MatrixClientPeg as peg } from '../../src/MatrixClientPeg'; -import * as testUtils from '../test-utils'; - -const dispatch = testUtils.getDispatchForStore(RoomViewStore.instance); - -jest.mock('../../src/utils/DMRoomMap', () => { - const mock = { - getUserIdForRoomId: jest.fn(), - getDMRoomsForUserId: jest.fn(), - }; - - return { - shared: jest.fn().mockReturnValue(mock), - sharedInstance: mock, - }; -}); - -describe('RoomViewStore', function() { - beforeEach(function() { - testUtils.stubClient(); - peg.get().credentials = { userId: "@test:example.com" }; - peg.get().on = jest.fn(); - peg.get().off = jest.fn(); - - // Reset the state of the store - RoomViewStore.instance.reset(); - }); - - it('can be used to view a room by ID and join', function(done) { - peg.get().joinRoom = async (roomAddress) => { - expect(roomAddress).toBe("!randomcharacters:aser.ver"); - done(); - }; - - dispatch({ action: Action.ViewRoom, room_id: '!randomcharacters:aser.ver' }); - dispatch({ action: 'join_room' }); - expect(RoomViewStore.instance.isJoining()).toBe(true); - }); - - it('can be used to view a room by alias and join', function(done) { - const token = RoomViewStore.instance.addListener(() => { - // Wait until the room alias has resolved and the room ID is - if (!RoomViewStore.instance.isRoomLoading()) { - expect(RoomViewStore.instance.getRoomId()).toBe("!randomcharacters:aser.ver"); - dispatch({ action: 'join_room' }); - expect(RoomViewStore.instance.isJoining()).toBe(true); - } - }); - - peg.get().getRoomIdForAlias.mockResolvedValue({ room_id: "!randomcharacters:aser.ver" }); - peg.get().joinRoom = async (roomAddress) => { - token.remove(); // stop RVS listener - expect(roomAddress).toBe("#somealias2:aser.ver"); - done(); - }; - - dispatch({ action: Action.ViewRoom, room_alias: '#somealias2:aser.ver' }); - }); -}); diff --git a/test/stores/RoomViewStore-test.tsx b/test/stores/RoomViewStore-test.tsx new file mode 100644 index 0000000000..1513783559 --- /dev/null +++ b/test/stores/RoomViewStore-test.tsx @@ -0,0 +1,86 @@ +/* +Copyright 2017 - 2022 The Matrix.org Foundation C.I.C. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +import { Room } from 'matrix-js-sdk/src/matrix'; + +import { RoomViewStore } from '../../src/stores/RoomViewStore'; +import { Action } from '../../src/dispatcher/actions'; +import * as testUtils from '../test-utils'; +import { flushPromises, getMockClientWithEventEmitter } from '../test-utils'; + +const dispatch = testUtils.getDispatchForStore(RoomViewStore.instance); + +jest.mock('../../src/utils/DMRoomMap', () => { + const mock = { + getUserIdForRoomId: jest.fn(), + getDMRoomsForUserId: jest.fn(), + }; + + return { + shared: jest.fn().mockReturnValue(mock), + sharedInstance: mock, + }; +}); + +describe('RoomViewStore', function() { + const userId = '@alice:server'; + const mockClient = getMockClientWithEventEmitter({ + joinRoom: jest.fn(), + getRoom: jest.fn(), + getRoomIdForAlias: jest.fn(), + }); + const room = new Room('!room:server', mockClient, userId); + + beforeEach(function() { + jest.clearAllMocks(); + mockClient.credentials = { userId: "@test:example.com" }; + mockClient.joinRoom.mockResolvedValue(room); + mockClient.getRoom.mockReturnValue(room); + + // Reset the state of the store + RoomViewStore.instance.reset(); + }); + + it('can be used to view a room by ID and join', async () => { + dispatch({ action: Action.ViewRoom, room_id: '!randomcharacters:aser.ver' }); + dispatch({ action: 'join_room' }); + await flushPromises(); + expect(mockClient.joinRoom).toHaveBeenCalledWith('!randomcharacters:aser.ver', { viaServers: [] }); + expect(RoomViewStore.instance.isJoining()).toBe(true); + }); + + it('can be used to view a room by alias and join', async () => { + const roomId = "!randomcharacters:aser.ver"; + const alias = "#somealias2:aser.ver"; + + mockClient.getRoomIdForAlias.mockResolvedValue({ room_id: roomId, servers: [] }); + + dispatch({ action: Action.ViewRoom, room_alias: alias }); + await flushPromises(); + await flushPromises(); + + // roomId is set to id of the room alias + expect(RoomViewStore.instance.getRoomId()).toBe(roomId); + + // join the room + dispatch({ action: 'join_room' }); + + expect(RoomViewStore.instance.isJoining()).toBeTruthy(); + await flushPromises(); + + expect(mockClient.joinRoom).toHaveBeenCalledWith(alias, { viaServers: [] }); + }); +});