Implement MSC3869: Read event relations with the Widget API (#9210)
* Add an action to read relations according to MSC3869 Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net> * Apply review comments Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net> * Fix test Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net> * Update matrix-widget-api to 1.1.1 Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net> Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net>
This commit is contained in:
parent
f20d86b7b8
commit
0c22b15bba
4 changed files with 148 additions and 7 deletions
|
@ -15,11 +15,13 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import { mocked, MockedObject } from "jest-mock";
|
||||
import { Widget, WidgetKind, WidgetDriver, ITurnServer } from "matrix-widget-api";
|
||||
import { MatrixClient, ClientEvent, ITurnServer as IClientTurnServer } from "matrix-js-sdk/src/client";
|
||||
import { ClientEvent, ITurnServer as IClientTurnServer, MatrixClient } from "matrix-js-sdk/src/client";
|
||||
import { DeviceInfo } from "matrix-js-sdk/src/crypto/deviceinfo";
|
||||
import { Direction, MatrixEvent } from "matrix-js-sdk/src/matrix";
|
||||
import { ITurnServer, Widget, WidgetDriver, WidgetKind } from "matrix-widget-api";
|
||||
|
||||
import { MatrixClientPeg } from "../../../src/MatrixClientPeg";
|
||||
import { RoomViewStore } from "../../../src/stores/RoomViewStore";
|
||||
import { StopGapWidgetDriver } from "../../../src/stores/widgets/StopGapWidgetDriver";
|
||||
import { stubClient } from "../../test-utils";
|
||||
|
||||
|
@ -131,4 +133,98 @@ describe("StopGapWidgetDriver", () => {
|
|||
await servers.return(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
describe("readEventRelations", () => {
|
||||
it('reads related events from the current room', async () => {
|
||||
jest.spyOn(RoomViewStore.instance, 'getRoomId').mockReturnValue('!this-room-id');
|
||||
|
||||
client.relations.mockResolvedValue({
|
||||
originalEvent: new MatrixEvent(),
|
||||
events: [],
|
||||
});
|
||||
|
||||
await expect(driver.readEventRelations('$event')).resolves.toEqual({
|
||||
originalEvent: expect.objectContaining({ content: {} }),
|
||||
chunk: [],
|
||||
nextBatch: undefined,
|
||||
prevBatch: undefined,
|
||||
});
|
||||
|
||||
expect(client.relations).toBeCalledWith('!this-room-id', '$event', null, null, {});
|
||||
});
|
||||
|
||||
it('reads related events if the original event is missing', async () => {
|
||||
client.relations.mockResolvedValue({
|
||||
// the relations function can return an undefined event, even
|
||||
// though the typings don't permit an undefined value.
|
||||
originalEvent: undefined as any,
|
||||
events: [],
|
||||
});
|
||||
|
||||
await expect(driver.readEventRelations('$event', '!room-id')).resolves.toEqual({
|
||||
originalEvent: undefined,
|
||||
chunk: [],
|
||||
nextBatch: undefined,
|
||||
prevBatch: undefined,
|
||||
});
|
||||
|
||||
expect(client.relations).toBeCalledWith('!room-id', '$event', null, null, {});
|
||||
});
|
||||
|
||||
it('reads related events from a selected room', async () => {
|
||||
client.relations.mockResolvedValue({
|
||||
originalEvent: new MatrixEvent(),
|
||||
events: [new MatrixEvent(), new MatrixEvent()],
|
||||
nextBatch: 'next-batch-token',
|
||||
});
|
||||
|
||||
await expect(driver.readEventRelations('$event', '!room-id')).resolves.toEqual({
|
||||
originalEvent: expect.objectContaining({ content: {} }),
|
||||
chunk: [
|
||||
expect.objectContaining({ content: {} }),
|
||||
expect.objectContaining({ content: {} }),
|
||||
],
|
||||
nextBatch: 'next-batch-token',
|
||||
prevBatch: undefined,
|
||||
});
|
||||
|
||||
expect(client.relations).toBeCalledWith('!room-id', '$event', null, null, {});
|
||||
});
|
||||
|
||||
it('reads related events with custom parameters', async () => {
|
||||
client.relations.mockResolvedValue({
|
||||
originalEvent: new MatrixEvent(),
|
||||
events: [],
|
||||
});
|
||||
|
||||
await expect(driver.readEventRelations(
|
||||
'$event',
|
||||
'!room-id',
|
||||
'm.reference',
|
||||
'm.room.message',
|
||||
'from-token',
|
||||
'to-token',
|
||||
25,
|
||||
'f',
|
||||
)).resolves.toEqual({
|
||||
originalEvent: expect.objectContaining({ content: {} }),
|
||||
chunk: [],
|
||||
nextBatch: undefined,
|
||||
prevBatch: undefined,
|
||||
});
|
||||
|
||||
expect(client.relations).toBeCalledWith(
|
||||
'!room-id',
|
||||
'$event',
|
||||
'm.reference',
|
||||
'm.room.message',
|
||||
{
|
||||
limit: 25,
|
||||
from: 'from-token',
|
||||
to: 'to-token',
|
||||
direction: Direction.Forward,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue